Превью для первого и последующих топиков

Снова, здравствуйте.

Пользуюсь плагином «Main Preview».
Надо для первого топика сделать превью с кропом 575, а для последующих — 100.

В конфигах width и height прописаны.

Пытаюсь делать так:

в topic_list меняю include на:
{include file=$sTopicTemplateName bTopicList=true bFirstTopic=$smarty.foreach.Topics.first}


Потом в topic_part_header.tpl:


{if $bFirstTopic}
<a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('575crop')}"></a>
{else}
<a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('100crop')}"></a>
{/if}


Но так не получается. Для всех топиков на главной выводится превью 100crop.

Как правильно реализовать?

17 комментариев

avatar
а откуда у Вас взялась
$bFirstTopic
?
avatar
Я думал это условие для первого топика. Значит не правильно думал.
Не подскажите как правильно вывести?
avatar
avatar
Попробовал так:
{foreach from=$aTopics item=oTopic name="TopicListCycleName"}
{if $smarty.foreach.CycleName.iteration == 1}
    <a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('575crop')}"></a>
{else}
    <a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('100crop')}"></a>
{/if}
{/foreach}


Не получается.
avatar
так у Вас синтаксис не верный, по этому и не получается, читайте внимательно мануал (имя цикла)
avatar
Вместо «CycleName» поставьте название вашего цикла, то есть TopicListCycleName

{if $smarty.foreach.TopicListCycleName.iteration == 1}
    <a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('575crop')}"></a>
{else}
    <a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('100crop')}"></a>
{/if}
avatar
Спасибо, сделал так.
Теперь для первого и последующих топиков выводится по два превью — 575 и 100 crop. Т.е. if и else не действуют. Куда копать?
avatar
а в каком шаблоне это делаете, topic_list.tpl?
avatar
В шаблоне topic_topic.tpl
avatar
а, тогда немного иначе нужно поступить: в файлике topic_list.tpl проверяете, что это первый топик и передаете размер 575 превьюшки в шаблон топика:
{foreach $aTopics as $oTopic}
	{if $oTopic@first}
		{$previewSize = 575}
	{/if}

	{assign var="sTopicTemplateName" value="topic_`$oTopic->getType()`.tpl" previewSize=$previewSize}
{/foreach}


А в шаблоне с топиком уже вставляете превьюшку:
<img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('`$previewSize`crop')}">
avatar
обманул вас, превью необходимо так вставлять:
{if $previewSize}
	<img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('`$previewSize`crop')}">
{else}
	<img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('100crop')}">
{/if}
avatar
в topic_list.tpl
{foreach from=$aTopics item=oTopic name="cnt"}
{include file=$sTopicTemplateName bTopicList=true iCnt=$smarty.foreach.cnt.iteration}
в topic_topic.tpl
<a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{if $iCnt == 1}{$oTopic->getPreviewImageWebPath('575crop')}{else}{$oTopic->getPreviewImageWebPath('100crop')}{/if}"></a>
avatar
Спасибо! Работает :)
avatar
Хочу чисто понять для себя как работает, что такое Cnt и что оно делает?
avatar
Кстати, можно еще и так написать:

{foreach $aTopics as $oTopic}
	{if $oTopic@first}
		<a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('575crop')}"></a>
	{else}
		<a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath('100crop')}"></a>
	{/if}
{/foreach}
avatar
по сути у Вас почти все было правильно, просто Вы не внимательно посмотрели исходный код и не обозвали цикл (имя цикла), во второй раз уже обозвали но не там и не правильно его использовали, на чем уже и окончательно запутались.

а ответ то был всего то в topic_list
в
{foreach from=$aTopics item=oTopic}
добавить имя цикла
{foreach from=$aTopics item=oTopic name="имя_цикла"}
и искользовать это имя в при обращении к свойствам цикла тут
в topic_list меняю include на:
{include file=$sTopicTemplateName bTopicList=true bFirstTopic=$smarty.foreach.Topics.first}
. что и было показано ниже

просто внимательно читайте мануалы
avatar
Буду изучать. Спасибо за решение и за советы)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.