Автор Тема: Доработка вывода.  (Прочитано 8957 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sound

  • Новичок
  • *
  • Карма: +0/-0
  • Пол: Мужской
    • Просмотр профиля
Доработка вывода.
« : 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>&nbsp;</label>
  </div>
  {/if} 
 {else}
  <div style="margin-left: 4px">Нет новостей!</div>
 {/if}    
</div> 

Можете его немного доработать пожалуйста, чтоб там было по мимо вывода даты и заголовка еще и вывод фото к новости (если оно имеется) и краткое описание. Надеюсь на вашу помощь и думаю многим это будет полезно, за ранее спасибо. :D

Оффлайн forwebm

  • Администратор
  • Постоялец
  • *****
  • Карма: +9/-0
    • Просмотр профиля
Re: Доработка вывода.
« Ответ #1 : 19 Январь 2012, 20:49:23 »
Здравствуйте!

В цикле:
{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/