<?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>Свои переменные в виджете (решено) / Вопросы, проблемы и их решения / Alto CMS</title>
			<link>http://79.174.14.219/comments/571/</link>
			<description><![CDATA[Добрый день. AltoCMS 0.9.7.1 Код виджета: &amp;#60;?php /** * Обработка виджета карты * * @package widgets * @since 1.0 */]]></description>
			<language>ru</language>
			<managingEditor>noreply@altocms.ru</managingEditor>
			<webMaster>noreply@altocms.ru</webMaster>
			<generator>Alto CMS v.1.5.0b1</generator>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9483)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9483</guid>
					<link>http://79.174.14.219/571.html#comment9483</link>
					<author>reverty@gmail.com</author>
					<description><![CDATA[попробуйте в коде вывести содержимое $aTopics в момент передачи в шаблон $oViewer-&gt;Assign('aMyTopics', $aTopics); и посмотрите, передается тем самым с шаблон или нет.<br/>
И надеюсь вы ожидаете увидеть aMyTopics в шаблоне yandexmap.tpl. <br/>
<br/>
Пробежавшись глаза вроде все правильно написано]]></description>
					<pubDate>Sat, 12 Apr 2014 17:14:11 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9484)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9484</guid>
					<link>http://79.174.14.219/571.html#comment9484</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[Остаётся всё равно ноль, при заходе в блоги.<br/>
Шаблон block.yandexmap.tpl в /templates/skin/bootstrap/blocks<br/>
<br/>
Подключаю в widgets.php:<br/>
<pre>&lt;code&gt;$config['widgets'][] = array(
    'name' =&gt; 'yandexmap',     // исполняемый виджет
    'wgroup' =&gt; 'header',    // группа, куда нужно добавить виджет
    'priority' =&gt; 100,      // приоритет
    'action' =&gt; array(
        'index',
        'community',
        'filter',
        'blogs',
        'blog' =&gt; array('{topics}', '{topic}', '{blog}'),
        'tag',
    ),
    'title' =&gt; 'Карта',
);&lt;/code&gt;</pre><br/>
В основном шаблоне: <pre class="prettyprint"><code>{include file='blocks.tpl' group='header'}</code></pre>]]></description>
					<pubDate>Sat, 12 Apr 2014 17:38:34 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9485)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9485</guid>
					<link>http://79.174.14.219/571.html#comment9485</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[<a href="http://pomogi-sosedyam.ru/filter/need_help/" rel="nofollow">pomogi-sosedyam.ru/filter/need_help/</a><br/>
Под лого сейчас цифры 0 0 1<br/>
<pre class="prettyprint"><code>$oViewer-&gt;Assign('aNeedTopics', $aTopics);
$oViewer-&gt;Assign('aCanTopics', $aTopics);</code></pre><br/>
<pre class="prettyprint"><code>{$aNeedTopics|@count}
{$aCanTopics|@count}
{$aTopics|@count}</code></pre>]]></description>
					<pubDate>Sat, 12 Apr 2014 17:46:15 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9486)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9486</guid>
					<link>http://79.174.14.219/571.html#comment9486</link>
					<author>reverty@gmail.com</author>
					<description><![CDATA[подождите, я что-то запутался тогда. У вас получается есть только файл block.yandexmap.tpl и aMyTopics вы хотите передать туда? Тогда я несколько не понимаю вашего кода. Он должен быть вместо <br/>
<pre class="prettyprint"><code>$oViewer = $this-&gt;Viewer_GetLocalViewer();
$oViewer-&gt;Assign('aMyTopics', $aTopics);

// * Формируем результат в виде шаблона и возвращаем
$sTextResult = $oViewer-&gt;FetchWidget('yandexmap.tpl');
$this-&gt;Viewer_Assign('sYandexmap', $sTextResult);</code></pre><br/>
<pre class="prettyprint"><code>$this-&gt;Viewer_Assign('aMyTopics', $aTopics);</code></pre><br/>
Я конечно могу путаться в особенностях версий, потому как сам живу на чем-то промежуточном.]]></description>
					<pubDate>Sat, 12 Apr 2014 18:06:00 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9487)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9487</guid>
					<link>http://79.174.14.219/571.html#comment9487</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[Так тоже не помогло.<br/>
Может разработчики подскажут?<br/>
<br/>
Изменёны:<br/>
/templates/skin/bootstrap/header.tpl<br/>
/classes/modules/topic/Topic.class.php<br/>
/config/widgets.php<br/>
Добавлены:<br/>
/templates/skin/bootstrap/blocks/block.yandexmap.tpl<br/>
/classes/widgets/WidgetYandexmap.class.php<br/>
<br/>
Прямо хоть на 1.0 RC3 пробовать сразу…<br/>
Очень трудно новичку, когда нет документации.<br/>
Пробую на 0.9.7, так как оно ближе к LS, а на LS очень много статей.<br/>
Да и плагины под 0.9 пока что только есть. Не факт что карты там подключить получится…]]></description>
					<pubDate>Sat, 12 Apr 2014 18:25:47 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9488)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9488</guid>
					<link>http://79.174.14.219/571.html#comment9488</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[Этот многострочный код я брал из другого виджета за образец.]]></description>
					<pubDate>Sat, 12 Apr 2014 18:27:59 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9504)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9504</guid>
					<link>http://79.174.14.219/571.html#comment9504</link>
					<author>vshemarov@gmail.com</author>
					<description><![CDATA[Пара замечаний по функции <strong>GetTopicsForMap()</strong>:<br/>
<br/>
1) Сначала используется переменная <strong>$aTopicsId</strong>, а потом для ключа кеша — <strong>$aTopicsId</strong>, т.е. пропущена буква <strong>s</strong>. Я так понимаю, это просто опечатка. Если ее исправить, то проверка на <strong>is_array($aTopicId)</strong> будет уже не нужна, т.к. вызов метода маппера <strong>GetAllTopics()</strong> всегда вернет массив.<br/>
<br/>
2) Вы сначала получаете список ID, а потом сами топики. Но кешируете только вторую часть получения данных. Думаю, лучше было б кешировать полный набор данных, чтоб уменьшить число запросов к базе. Плюс Ваш кеш не учитывает того, что данные топиков могут меняться (Ваш кеш не будет сбрасываться).<br/>
<br/>
В общем, я бы код написал примерно так:<br/>
<pre class="prettyprint"><code>
    public function GetTopicsForMap()  {
        // Задаем фильтр для топиков
        $aFilter = array(
            'topic_type' =&gt; 'need_help',
        );
        // Создаем ключ кеша
        $sCacheKey = 'topics_filter_' . serialize($aFilter);

        // Если топиков в кеше нет, то получаем их
        if (false === ($aTopics = $this-&gt;Cache_Get($sCacheKey))) {
            // Сначала получим список ID топиков по фильтру
            $aTopicsId = $this-&gt;oMapperTopic-&gt;GetAllTopics($aFilter);

            // Теперь получим сами топики
            $aData = $this-&gt;GetTopicsAdditionalData($aTopicsId);

            // Формируем массив топиков со всеми требуемыми данными
            foreach ($aData as $oTopic) {
                $aTopics[$oTopic-&gt;getId()] = $oTopic;
            }
            /* Сохраняем массив в кеше. При этом указываем:
             *
             * 1) Дополнительные кеш-ключи (в нашем случае - 'topic_new' и 'topic_update')
             * При добавлении/обновлении любого топика будет выполнена очистка кеша по этим ключам,
             * и наш кеш тоже очистится, чтоб при следующем запросе получить новые данные
             *
             * 2) Время жизни кеша. Его можно указывать в виде числа (количество секунд) либо
             * в виде строки задания периода, например:
             *   P1D - 1 день
             *   P1M - 1 месяц
             *   P2DT8H - 2 дня и 8 часов
             *   PT3600S - 3600 секунд  
             */
            $this-&gt;Cache_Set($aTopics, $sCacheKey, array('topic_new', 'topic_update'), 'P1D');
        }
        // Возвращаем массив топиков
        return $aTopics;
    }
</code></pre>]]></description>
					<pubDate>Sun, 13 Apr 2014 15:00:11 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9506)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9506</guid>
					<link>http://79.174.14.219/571.html#comment9506</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[Спасибо<br/>
После корректировки функция выглядит теперь так:<pre class="prettyprint"><code>/**
     * Возвращает список топиков для карты
     *
     * @return array
     */ 
    public function GetTopicsForMap($sType)  {
        $aFilter = array(
            'topic_type' =&gt; $sType,
        );
	$sCacheKey = 'topics_filter_' . serialize($aFilter);
        if (false === ($aTopics = $this-&gt;Cache_Get($sCacheKey))) {
	        $aTopicId = $this-&gt;oMapperTopic-&gt;GetAllTopics($aFilter);
        	$aTopicId = array_unique($aTopicId);
	        $aTopics = array();
		$aData = $this-&gt;GetTopicsAdditionalData($aTopicId, array('user' =&gt; array(), 'blog' =&gt; array('owner' =&gt; array()), 'fields' ));
		foreach ($aData as $oTopic) {
                	$aTopics[$oTopic-&gt;getId()] = $oTopic;
            	}
            	$this-&gt;Cache_Set($aTopics, $sCacheKey, array('topic_new', 'topic_update'), 60 * 60 * 24 * 1);
        }
        return $aTopics;
    }</code></pre>]]></description>
					<pubDate>Sun, 13 Apr 2014 15:20:01 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9509)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9509</guid>
					<link>http://79.174.14.219/571.html#comment9509</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[<pre class="prettyprint"><code>$aTopicId = array_unique($aTopicId);
</code></pre><br/>
там нет<br/>
комментарий отредактировать почему-то не даёт]]></description>
					<pubDate>Sun, 13 Apr 2014 15:31:20 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9505)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9505</guid>
					<link>http://79.174.14.219/571.html#comment9505</link>
					<author>vshemarov@gmail.com</author>
					<description><![CDATA[Просьба: большие тексты убирать под кат. Такая кнопочка есть на панели редактора с ножницами. Либо руками надо указать тег &lt;cut&gt; в нужном месте]]></description>
					<pubDate>Sun, 13 Apr 2014 15:03:48 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9507)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9507</guid>
					<link>http://79.174.14.219/571.html#comment9507</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[Учту]]></description>
					<pubDate>Sun, 13 Apr 2014 15:22:08 +0400</pubDate>
									</item>
							<item>
					<title>Свои переменные в виджете (решено) (comment #9508)</title>
					<guid isPermaLink="true">http://79.174.14.219/t/571/#comment9508</guid>
					<link>http://79.174.14.219/571.html#comment9508</link>
					<author>yakon@inbox.ru</author>
					<description><![CDATA[Ещё маленький подвопрос.<br/>
Получается, что сейчас нет функционала для построения фильтра с критериями для fields?<br/>
Я сейчас ещё дополнительно обрабатываю массив топиков в шаблоне.<br/>
<pre class="prettyprint"><code>{foreach from=$aNeedTopics item=oTopic}
		        {if $LS-&gt;Topic_IsAllowTopicType($oTopic-&gt;getType())}
				{$oFieldActual = $oTopic-&gt;getField(9)}
				{if $oFieldActual-&gt;getValue() == 'Да'}
...
	        		{/if}
        		{/if}
	        {/foreach}</code></pre>]]></description>
					<pubDate>Sun, 13 Apr 2014 15:25:39 +0400</pubDate>
									</item>
					</channel>
	</rss>
