FOAF для LS пробы пера.
Во первых скажу сразу — Я не программист. Просто у Меня пытливый ум, а сегодня выходной без дел был.
Началось всё с пингатора, который работл, но конфликтовал с niceurl. Благо нашолся мил-добр человек, который его отладил. Потом встал вопрос о создании rss канала для яндекса, о нём позже. И создания FOAF профайла. Он опять же полезен в пингаторе как для яндекса, так и для других поисковых систем.
Итак начнём про FOAF.
Взято здесь. Хорошая статья.
А теперь как Я добавлял эту страничку на свой сайт.
Начнём с того, что я просто понятия не имел как это сделать, и не уверен что абсолютно правильно сделал. Буду рад правильному рецепту.
Я сделал эту страничку по аналогии с whois страничкой.
Идём в /classes/actions/ActionProfile.php
Находим строчку:
После неё добавляем:
После под строчкой:
Добавляем:
Да это просто копия кода который так же присутствует здесь с маленьким изменением.(Я не программист и ни чего другого не придумал.)
Далее Я проследовал в: /templates/skin/ваша тема/actions/ActionProfile
Где Я создал файл: whoisfoaf.tpl
Это переделанный вариант от яндекса. Он немного не доделан по причине того, что Я просто пока не знаю как это реализовать.
Сообщить поисковой системе об этом FOAF профиле пользователя можно через rss каналы, но об этом в другой раз.
Если у кого то по поводу этого есть советы и идеи, то буду только рад!
Началось всё с пингатора, который работл, но конфликтовал с 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 комментария
И выводился только на этой страничке(профиль пользователя)!