Поддержка продуктов forwebm.net
SEO-TOOLS проект сайта SEO инструментов => FAQ, вопросы и ответы => Тема начата: Sound от 19 Январь 2012, 17:59:16
-
Доброго времени суток, над работай с шаблоном вывода анонсов новостей возникла необходимость вывода дополнительных массивов, в стандартном шаблоне есть возможность и пример вывода только двух массивов date и title то есть даты создания новости и заголовка, но как показывает практика и возможности системы что этого мало еще нужно картинка и краткое описание для более полного ознакомления с новостью в блоке, допустим на главной странице. И так сам собой напрашивается вопрос как это реализовать? Я не особо компетентен в вопросе шаблонизатора смарти, ибо не когда с ним не сталкивался и плюс ко всему чтоб там что-то реализовать нужно хорошо знать ядро системы. Данными знаниями я не обладаю тобиш без конкретного примера не смогу реализовать данный вывод.
Ваш вывод который есть в шаблоне сайта не много не подходит под эти нужды.
Пример:
{* блок новостей
$newstype = тип новостей
$limit = кол-во для вывода
$fontsize = размер шрифта
$fontsizeallnews = размер шрифта всех новостей
$fulldate = 1 or empty for full format date
$noshowallnews = false
$marginleft = 4
$allnewsmarginleft = 4
*}
<!-- news begin -->
<div>
{if $CONTROL_OBJ->GetNewsListByBlockData($newstype, $limit)}
{foreach from=$CONTROL_OBJ->GetNewsListByBlockData($newstype, $limit) item=val name=val}
<div style="margin-left: {if $marginleft}{$marginleft}{else}4px{/if}; margin-top: 4px">
<span style="font-size: {$fontsize}">{if !$fulldate}{$CONTROL_OBJ->DateToSpecialFormat($val.datecreate)}{else}{$CONTROL_OBJ->DateTimeToSpecialFormat($val.datecreate, $smarty.const.W_SITENEWSDATETIMEFORMATONHOST)}{/if}</span>
<a style="text-decoration: none; font-size: {$fontsize}" href="{$smarty.const.W_SITEPATH}news/{$newstype}/{$val.iditem}/">{$val.newtitle}</a>
</div>
{/foreach}
{if !$noshowallnews}
<div class="contentway" style="font-size: {if $fontsizeallnews}{$fontsizeallnews}{else}{$fontsize}{/if}; margin-top: 5px; padding-left: {if $allnewsmarginleft}{$allnewsmarginleft}{else}4px{/if}">
<a class="black"{if $fontsizeallnews} style="font-size: {$fontsizeallnews}"{/if} href="{$smarty.const.W_SITEPATH}news/{$newstype}/">Все новости</a><label> </label>
</div>
{/if}
{else}
<div style="margin-left: 4px">Нет новостей!</div>
{/if}
</div>
Можете его немного доработать пожалуйста, чтоб там было по мимо вывода даты и заголовка еще и вывод фото к новости (если оно имеется) и краткое описание. Надеюсь на вашу помощь и думаю многим это будет полезно, за ранее спасибо. :D
-
Здравствуйте!
В цикле:
{foreach from=$CONTROL_OBJ->GetNewsListByBlockData($newstype, $limit) item=val name=val}
......................
{/foreach}
Вы можете использовать любые данные, которые содержит статья\запись, обращение к которым осуществляется через переменную $val
Пример:
{* идентификатор типа записей, которые нужно выводить
1 - новости сайта, 2 - новости интернета если по умолчанию -
или определенный тип данных, если создавались другие разделы
статей\новостей\записей
*}
{assign var="newstypedata" value=1}
{* сколько последних записей выводить *}
{assign var="elementscount" value=8}
{* занесем данные в переменную, данные кэшируются - можно и без переменных, но все же желательно .. *}
{assign var="dataItemBlock" value=$CONTROL_OBJ->GetNewsListByBlockData($newstypedata, $elementscount)}
<!-- здесь выводим какой либо html перед выводом записей -->
{* теперь по циклу обходим все полученные в переменную $dataItemBlock записи
** их может быть меньше чем указано в лимите на вывод, если например записей мало
если записей нет вообще - переменная $dataItemBlock будет равна false
для проверки например можно сделать так:
{if $dataItemBlock}
.......... здесь цикл вывода и прочее
{else}
здесь выводится что-то если записей нет
{/if}
*}
{foreach from=$dataItemBlock item=val name=val}
{* в данном цикле переменная $val содержит данные текущей строки записей
** Все описанные ниже манипуляции с переменной $val следует выполнять ТОЛЬКО
внутри данного цикла, т.е между {foreach.....} и {/foreach}
*}
{* для того, чтобы вывести дату создания статьи в формате, который установлен в настройках
сайта можете использовать подобную конструкцию *}
{$CONTROL_OBJ->DateTimeToSpecialFormat($val.datecreate, $smarty.const.W_SITENEWSDATETIMEFORMATONHOST)}
{* по умолчанию дата содержится в переменной $val.datecreate и храниться там в формате Y-m-d H:i:s *}
{* если требуется вывести изображение - для этого потребуется использовать переменную
$val.dwnameimg
Если статья\запись содержит изображение пред просмотра - переменная $val.dwnameimg
будет содержать его имя (без полного пути к нему)
для показа изображения сперва потребуется проверить его наличие и после этого
вывести его в случае его присутствия с учетом полного пути, пример:
*}
{if $val.dwnameimg} {* если изображение есть *}
{* указание пути к изображению от корня проекта *}
<img src="{$smarty.const.W_SITEPATH}/pfiles/images/{$val.dwnameimg}" border="0" width="60px" height="60px">
{/if}
{* для показа названия записи достаточно вывести переменную $val.newtitle *}
{$val.newtitle}
{* для показа текста записи используйте переменную $val.newdata
Данная переменная содержит полный текст статьи\записи и в необработанном формате
прежде чем использовать данную переменную - её необходимо обработать в
нужный формат, например для показа краткого описания, без html форматирования и т.д
используйте отображение данной переменной по конструкции вида:
*}
{$CONTROL_OBJ->strings->CorrectTextFromDB($val.newdata, false, true, $val.contenttype, 180, true)}
{* здесь значение 180 определяет кол-во символов, которое следует вывести,
переменная $val.contenttype от записи указывает на тип контента (чистый html или
форматированный по тэгам проекта текст) *}
{* остальные данные записи *}
{$val.newlooks} {* кол-во просмотров *}
{$val.iditem} {* ID записи - используется для составления ссылки для перехода к записи *}
{$val.newtype} {* тип раздела записи - ID раздела - также необходим для составления ссылки *}
{* описание остальных ключей массива $val вы можете посмотреть в файле установщика проекта
все ключи доступны через $val. и после точки имя ключа
*}
{/foreach}
Пример привел без html и прочего - только описание конструкции для организации вывода. Как именно это применить - решать Вам.
Составление ссылки для перехода к записи делается следующим методом:
<a href="{$smarty.const.W_SITEPATH}news/{$val.newtype}/{$val.iditem}/">{$val.newtitle}</a>
где:
$smarty.const.W_SITEPATH - корень проекта
news/ - путь к разделу (может быть любым, который создается в качестве имени при создании раздела)
{$val.newtype} - тип раздела, в котором данная запись состоит
{$val.iditem} - ID непосредственно самой записи
{$val.newtitle} - и соответственно название записи
пример: http://seo-tools.forwebm.net/project-help/7/40/