Недавно был запущен сервис FindPresent.net, который позволяет устраивать весёлую игру на своём сайте для его посетителей. Её легко установить, не сложнее чем код счётчика от гугла. Игра будет доступна для всех пользователей сайта, но все они будут анонимными и чтобы пользователи могли участвовать в игре под теми именами, которые у них есть на сайте нужна поддержка со стороны сервера. Существует готовые решения в виде плагинов для WordPress, InstantCMS и LiveStreet версии 0.4.2. А нам потребовалось запустить эту игру на LiveStreet версии 0.3, к счастью от сервера требуется не много и такую поддержку легко обеспечить. Итак преступим.

Первое что нужно сделать это зарегистрировать новую компанию в админке сервиса. Там можно настроить параметры игры так, как вам необходимо. И не забудьте добавить подарки на странице подарков, иначе находить будет нечего.

Далее нам нужно вывести виджет игры и сами подарки на страницы сайта. Для этого нам нужно вставить javascript-код в шаблон сайта. Взять его можно на странице “Код для вставки”. Затем открываем шаблон **footer.tpl **(например: templates/skin/new/footer.tpl) в папке включенного скина и вставляем туда этот код перед тегом </body>, заключив его в теги {literal}{/literal}.

{literal}
<script type="text/javascript">
var _lsPresent = _lsPresent || [];
_lsPresent.push({'key' : '1:12345678901234567890'}); // не забудьте заменить на свой COMPANY KEY
_lsPresent.push({'ts' : 'm'});
_lsPresent.push({'debug' : 0});
(function() {
    var host = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'findpresent.net';
    document.write('<sc'+'ript type="text/javascript" src="'+host+'/js/p.load.js?t='+(new Date()).getTime()+'"></sc'+'ript>');
})();
</script>
{/literal}

После этого на страницах сайта появятся подарки и можно будет играть. Теперь нужно сделать так чтобы сервис мог привязать заработанные очки к аккаунту на сайте.

Для этого во вставленный ранее код нужно добавить информацию о пользователе и теперь он будет выглядеть так:

{literal}
<script type="text/javascript">
var _lsPresent = _lsPresent || [];
_lsPresent.push({'key' : '1:12345678901234567890'}); // не забудьте заменить на свой COMPANY KEY
_lsPresent.push({'ts' : 'm'});
_lsPresent.push({'debug' : 0});

{/literal} {if $fp_sUin} {literal}
_lsPresent.push({'user' : {
uin: '{/literal}{$fp_sUin}{literal}',
name: '{/literal}{$fp_sName}{literal}',
url: '{/literal}{$fp_sUrl}{literal}',
avatar: '{/literal}{$fp_sAvatar}{literal}',
sig: '{/literal}{$fp_sSig}{literal}'
}});

{/literal} {/if} {literal}

(function() {
    var host = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'findpresent.net';
    document.write('<sc'+'ript type="text/javascript" src="'+host+'/js/p.load.js?t='+(new Date()).getTime()+'"></sc'+'ript>');
})();
</script>
{/literal}

Писать нужно аккуратно, чтобы не запутаться в открывающих и закрывающих тегах {literal}{/literal}.

Теперь откройте файл classes/engine/Action.class.php и найдите в нем функцию __constructor. В конец этой функции добавьте следующий код:

$oUserCurrent=$this->User_GetUserCurrent();
if ($oUserCurrent) {
    $sUin=$oUserCurrent->getId();
    $sName=$oUserCurrent->getLogin();
    $sUrl=$oUserCurrent->getUserWebPath();
    $sAvatar=$oUserCurrent->getProfileAvatarPath(48);

    $sSig=md5("avatar=$sAvatar"."name=$sName"."uin=$sUin"."url=$sUrl".SECURE_KEY);

    $this->Viewer_Assign('fp_sUin',$sUin);
    $this->Viewer_Assign('fp_sName',$sName);
    $this->Viewer_Assign('fp_sUrl',$sUrl);
    $this->Viewer_Assign('fp_sAvatar',$sAvatar);
    $this->Viewer_Assign('fp_sSig',$sSig);
}

Этот код заполняет переменные необходимыми данными о пользователе, которые передаются сервису при каждом открытии страницы сайта.

Остался последний шаг. В папке classes/actions нужно создать файл с именем ActionApi.class.php и скопировать в него этот код:

<?php
class ActionApi extends Action {
   
    public function Init() {       
        $this->SetDefaultEvent('auth');
    }
       
    protected function RegisterEvent() {
        $this->AddEvent('auth','EventAuth');
    }
   
    protected function EventAuth() {
        $this->SetTemplateAction('auth');
    }   
}

Этот экшен будет выдавать сервису FindPresent информацию о том, залогинен пользователь или нет. Для этого экшена нужен соответствующий шаблон. В папке actions активного скина создайте папку ActionApi и добавьте в неё файл auth.tpl. В этот файл добавьте следующий код:

{if $oUserCurrent}
uin = {$oUserCurrent->getId()}
name = "{$oUserCurrent->getLogin()}"
url = "{$oUserCurrent->getUserWebPath()}"
{/if}

Теперь нужно добавить в config/config.route.php добавить константу:

define("ROUTE_PAGE_FINDPRESENT", 'findpresent');

И в массив page добавить строку:

ROUTE_PAGE_FINDPRESENT => 'ActionApi',

В панели управления на сайте findpresent.net в разделе настроек, в поле URL API нужно указать http://вашсайт.рф/findpresent/auth/

На этом всё, на сайте будут появляться подарки, а в рейтинге будут отображаться имена пользователей под которыми они зарегистрированы на сайте.