<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
			<channel>
			<title>Количество друзей (hook) / Вопросы, проблемы и их решения / Alto CMS</title>
			<link>http://79.174.14.219/comments/854/</link>
			<description><![CDATA[Ребята, помогите правильно написать хук для вывода кол-ва друзей на произвольных страницах сайта (в моем случае, нужно вывести на главной).]]></description>
			<language>ru</language>
			<managingEditor>noreply@altocms.ru</managingEditor>
			<webMaster>noreply@altocms.ru</webMaster>
			<generator>Alto CMS v.1.5.0b1</generator>
							<item>
					<title>Количество друзей (hook) (comment #16340)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/854/#comment16340</guid>
					<link>http://79.174.14.219/854.html#comment16340</link>
					<author>vshemarov@gmail.com</author>
					<description><![CDATA[Получить и сразу отобразить число друзей прямо в шаблоне для текущего юзера можно так:<br/>
<pre class="prettyprint"><code>{if E::IsUser()}
    Друзей: {E::User_GetCountUsersFriend(E::User())}
{/if}</code></pre><br/>
Можно и хуком сделать:<br/>
<pre class="prettyprint"><code>&lt;?php
class HookFriendsCount extends Hook {
    /**
     * Регистрируем хуки
     */
    public function RegisterHook() {
        $this-&gt;AddHook('template_friends_count', 'TplFriendsCount', __CLASS__);
    }

    /**
     * Обработка хука
     *
     * @return string
     */
    public function TplFriendsCount() {
        return E::IsUser() ? E::User_GetCountUsersFriend(E::User()) : '0';
    }
}</code></pre>А в шаблоне в нужное место ставим:<br/>
<pre class="prettyprint"><code>{if E::IsUser()}
    Друзей: {hook run=friends_count}
{/if}</code></pre><br/>
Либо, если уж совсем по всем правилам делать, делаем маленький файл шаблона (напр., <strong>friends_count.tpl</strong>:<br/>
<pre class="prettyprint"><code>{if E::IsUser()}
    Друзей: {$iFriendsCount}
{/if}</code></pre>А обработчик хука записываем так:<br/>
<pre class="prettyprint"><code>public function TplFriendsCount() {
    $iFriendsCount = E::IsUser() ? E::User_GetCountUsersFriend(E::User()) : '0';
    $this-&gt;Viewer_Assign('iFriendsCount ', $iFriendsCount );
    return $this-&gt;Viewer_Fetch('friends_count.tpl');
}</code></pre><br/>
Но важно понимать, что запрос числа друзей — это обращение к базе. Поэтому если речь про то, что это надо вывести в одном месте страницы для текущего юзера — то это нормально. А если, например, на странице выводится большой список юзеров и для каждого нужно вывести число друзей, то это уже лучше писать плагин, чтоб оптимизировать число запросов.]]></description>
					<pubDate>Sun, 16 Nov 2014 02:49:11 +0300</pubDate>
									</item>
							<item>
					<title>Количество друзей (hook) (comment #16347)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/854/#comment16347</guid>
					<link>http://79.174.14.219/854.html#comment16347</link>
					<author>orthograf@bk.ru</author>
					<description><![CDATA[Отлично, то что нужно!<br/>
<blockquote>Но важно понимать, что запрос числа друзей — это обращение к базе.</blockquote>Нет — это именно для одного, конкретного юзера. Модифицированный аналог сайдбара в Профиле, только на другой странице. Спасибо!]]></description>
					<pubDate>Sun, 16 Nov 2014 11:46:13 +0300</pubDate>
									</item>
					</channel>
	</rss>
