FOAF для LS пробы пера.

Во первых скажу сразу — Я не программист. Просто у Меня пытливый ум, а сегодня выходной без дел был.

Началось всё с пингатора, который работл, но конфликтовал с niceurl. Благо нашолся мил-добр человек, который его отладил. Потом встал вопрос о создании rss канала для яндекса, о нём позже. И создания FOAF профайла. Он опять же полезен в пингаторе как для яндекса, так и для других поисковых систем.

Итак начнём про FOAF.

FOAF
Friend Of A Friend — онтология описания человека (грубо говоря), точнее личности. Короче, обычная анкета, которую вы заполняли на сайтах миллион раз. Содержит информацию об имени, дате рождения, работе, контактах, знакомствах.Он является отправной точкой в Социальном Графе. Давайте разберемся по-подробнее? Для большей понятливости, мы с вами его придумаем, заново, что б вы поняли всю логику и увидели, как тут все продумано и почему все так, а не эдак. К тому же это будет удобно людям, не читающим XML.

Взято здесь. Хорошая статья.

А теперь как Я добавлял эту страничку на свой сайт.

Начнём с того, что я просто понятия не имел как это сделать, и не уверен что абсолютно правильно сделал. Буду рад правильному рецепту.

Я сделал эту страничку по аналогии с whois страничкой.

Идём в /classes/actions/ActionProfile.php

Находим строчку:
$this->AddEventPreg('/^[\w\-\_]+$/i','/^favourites$/i','/^(page(\d+))?$/i','EventFavourite');

После неё добавляем:
$this->AddEventPreg('/^[\w\-\_]+$/i','/^whoisfoaf$/i','/^(page(\d+))?$/i','EventWhoisFOAF');/**Показывает инфу профиля FOAF*/

После под строчкой:
/** РЕАЛИЗАЦИЯ ЭКШЕНА **/

Добавляем:
/**
	 * Показывает инфу профиля !!!!! FOAF проба пера
	 *
	 */

	protected function EventWhoisFOAF() {
		/**
		 * Получаем логин из УРЛа
		 */
		$sUserLogin=$this->sCurrentEvent;					
		/**
		 * Проверяем есть ли такой юзер
		 */
		if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin))) {			
			return parent::EventNotFound();
		}
		/**
		 * Получаем список друзей
		 */
		$aUsersFriend=$this->User_GetUsersFriend($this->oUserProfile->getId());
		
		if (Config::Get('general.reg.invite')) {
			/**
			 * Получаем список тех кого пригласил юзер
			 */
			$aUsersInvite=$this->User_GetUsersInvite($this->oUserProfile->getId());	
			$this->Viewer_Assign('aUsersInvite',$aUsersInvite);
			/**
			 * Получаем того юзера, кто пригласил текущего
			 */
			$oUserInviteFrom=$this->User_GetUserInviteFrom($this->oUserProfile->getId());			
			$this->Viewer_Assign('oUserInviteFrom',$oUserInviteFrom);
		}	
		/**
		 * Получаем список юзеров блога
		 */
		$aBlogUsers=$this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),ModuleBlog::BLOG_USER_ROLE_USER);
		$aBlogModerators=$this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),ModuleBlog::BLOG_USER_ROLE_MODERATOR);
		$aBlogAdministrators=$this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);		
		/**
		 * Получаем список блогов которые создал юзер
		 */
		$aBlogsOwner=$this->Blog_GetBlogsByOwnerId($this->oUserProfile->getId());
		/**
		 * Вызов хуков
		 */
		$this->Hook_Run('profile_whois_show',array("oUserProfile"=>$this->oUserProfile));	
		/**
		 * Загружаем переменные в шаблон
		 */
		$this->Viewer_Assign('aBlogUsers',$aBlogUsers);
		$this->Viewer_Assign('aBlogModerators',$aBlogModerators);
		$this->Viewer_Assign('aBlogAdministrators',$aBlogAdministrators);
		$this->Viewer_Assign('aBlogsOwner',$aBlogsOwner);
		$this->Viewer_Assign('aUsersFriend',$aUsersFriend);		
		$this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile').' '.$this->oUserProfile->getLogin());
		$this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile_whois'));
		/**
		 * Устанавливаем шаблон вывода
		 */
		$this->SetTemplateAction('whoisfoaf');				
	}

Да это просто копия кода который так же присутствует здесь с маленьким изменением.(Я не программист и ни чего другого не придумал.)

Далее Я проследовал в: /templates/skin/ваша тема/actions/ActionProfile
Где Я создал файл: whoisfoaf.tpl
<rdf:RDF
    xml:lang="ru"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:ya="http://blogs.yandex.ru/schema/foaf/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <foaf:Person>
-------------------------------------------------------
Здесь добавляем ник и имя пользователя
-------------------------------------------------------
    <foaf:nick>{$oUserProfile->getLogin()}</foaf:nick>
    <foaf:name xml:lang="ru">{$oUserProfile->getProfileName()|escape:'html'}</foaf:name>
-------------------------------------------------------
Здесь добавляем место проживания пользователя
------------------------------------------------------- 
    <ya:country
        dc:title="{$oUserProfile->getProfileCountry()}"
        rdf:resource="http://beta-maps.yandex.ru/?text={$oUserProfile->getProfileCountry()}"/>
    <ya:region
        dc:title="{$oUserProfile->getProfileRegion()}"
        rdf:resource="http://beta-maps.yandex.ru/?text={$oUserProfile->getProfileRegion()}"/>
    <ya:city
        dc:title="{$oUserProfile->getProfileCity()}"
        rdf:resource="http://beta-maps.yandex.ru/?text={$oUserProfile->getProfileCountry()}, {$oUserProfile->getProfileCity()}"/>
-------------------------------------------------------
Здесь добавляем некоторые его данные которые у нас есть
-------------------------------------------------------
 
    <foaf:dateOfBirth>{$oUserProfile->getProfileBirthday()}</foaf:dateOfBirth>
 
    <foaf:gender>{$oUserProfile->getProfileSex()}</foaf:gender>
 
    <foaf:img>{$oUserProfile->getProfileAvatarPath(100)}</foaf:img>
-------------------------------------------------------
Каким кодом добавить аську не нашёл
-------------------------------------------------------
    <foaf:icqChatID></foaf:icqChatID>
 
    <foaf:homepage>{$oUserProfile->getUserWebPath()}</foaf:homepage>
-------------------------------------------------------
Как добавить почту тоже не нашёл, для приватности решил его вообще убрать.
------------------------------------------------------- 
    <foaf:mbox></foaf:mbox>
-------------------------------------------------------
Rss канала коментариево пользователя нет, пока не знаю как его создать и добавить.
------------------------------------------------------- 
    <ya:blogActivity>
      <ya:Comments>
        <ya:feed
            dc:type="application/rss+xml"
            rdf:resource=""/>
        <ya:posted></ya:posted>
        <ya:received></ya:received>
      </ya:Comments>
    </ya:blogActivity>
-------------------------------------------------------
Здесь добавляем rss персонального блога пользователя
Добавить число публикаций не удалось <ya:posted>???</ya:posted>
------------------------------------------------------- 
    <ya:blogActivity>
      <ya:Posts>
        <ya:feed
            dc:type="application/rss+xml"
            rdf:resource="/rss/personal_blog/{$oUserProfile->getLogin()}"/>
        <ya:posted></ya:posted>
      </ya:Posts>
    </ya:blogActivity>
-------------------------------------------------------
Здесь добавляем дополнительную информацию о блоге пользователя и о нём самом
------------------------------------------------------- 
    <foaf:weblog
        ya:creationDate="{$oUserProfile->getDateRegister()}"
        dc:title="Персональный блог {$oUserProfile->getLogin()}"
        rdf:resource="{router page='my'}{$oUserProfile->getLogin()}/"/>
 
    <ya:bio>{$oUserProfile->getProfileAbout()}</ya:bio>
-------------------------------------------------------
Через интересы добавил все ссылки на блоги в которых он состоит, создал или модерирует.
-------------------------------------------------------
{foreach from=$aBlogsOwner item=oBlog name=blog_owner}
    <foaf:interest
        dc:title="{$oBlog->getTitle()|escape:'html'}"
        rdf:resource="{router page='blog'}{$oBlog->getUrl()}"/>
{/foreach}

{foreach from=$aBlogAdministrators item=oBlogUser name=blog_user}
{assign var="oBlog" value=$oBlogUser->getBlog()}
    <foaf:interest
        dc:title="{$oBlog->getTitle()|escape:'html'}"
        rdf:resource="{router page='blog'}{$oBlog->getUrl()}"/>
{/foreach}

{foreach from=$aBlogModerators item=oBlogUser name=blog_user}
{assign var="oBlog" value=$oBlogUser->getBlog()}
    <foaf:interest
        dc:title="{$oBlog->getTitle()|escape:'html'}"
        rdf:resource="{router page='blog'}{$oBlog->getUrl()}"/>
{/foreach}

{foreach from=$aBlogUsers item=oBlogUser name=blog_user}
{assign var="oBlog" value=$oBlogUser->getBlog()}
    <foaf:interest
        dc:title="{$oBlog->getTitle()|escape:'html'}"
        rdf:resource="{router page='blog'}{$oBlog->getUrl()}"/>
{/foreach}

-------------------------------------------------------
Здесь добавляем друзей пользователя.
-------------------------------------------------------
{foreach from=$aUsersFriend item=oUser} 
    <foaf:knows>
      <foaf:Person>
        <foaf:nick>{$oUser->getLogin()}</foaf:nick>
        <rdfs:seeAlso
            rdf:resource="{$oUser->getUserWebPath()}whoisfoaf/"/>
        <foaf:weblog
            rdf:resource="{$oUser->getUserWebPath()}"/>
      </foaf:Person>
    </foaf:knows>
{/foreach}
  </foaf:Person>
</rdf:RDF>


Это переделанный вариант от яндекса. Он немного не доделан по причине того, что Я просто пока не знаю как это реализовать.

Сообщить поисковой системе об этом FOAF профиле пользователя можно через rss каналы, но об этом в другой раз.

Если у кого то по поводу этого есть советы и идеи, то буду только рад!

3 комментария

avatar
Кто — нибудь может подсказать где и какой код нужно добавить что бы на странице сайт.ру/profile/имя/ В хук
{hook run='html_head_end'}
Выводился определённый код(просто html строчка)?
И выводился только на этой страничке(профиль пользователя)!
avatar
avatar
Сообщить поисковой системе об этом FOAF профиле пользователя можно через rss каналы, но об этом в другой раз.
жду следующего раза)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.