• SanDev.pro
  •  › 
  • Datalife Engine
  •  › 
  • Расширение функционала шаблонизатора для списка коротких новостей
Расширение функционала шаблонизатора для списка коротких новостей для DLE

Расширение функционала шаблонизатора для списка коротких новостей

Расширение функционала шаблонизатора для списка коротких новостей

Небольшое дополнение к шаблонизатору для вывода списка коротких новостей.
Суть проблемы:
Столкнулся я тут с задачей. Надо было вывести новости на сайте для разных категорий - разные шаблон.
Разумеется в настройках категорий есть параметр "Шаблон короткой новости", но все бы ничего, но что делать, если данные надо выводить в виде списка, плиткой и таблицей. Можно конечно в main.tpl использовать конструкции [category...] и [aviable...] но когда категорий много, то получается ооочень громоздко и неудобно. Особенно когда категорий на сайте более 100 и периодически нужно добавлять новые категории.
Так же не забываем о системной обертке, которая добавляется автоматически перед выводом:
<div id="dle-content">{content}</div>

Если контент выводится как таблица, еще можно приспособить
#dle-content{display: table;}
.shortstory{display:table-row;}

Но вот со списком:
<ul><li>...</li></ul>

Валидно уж точно не получится.
Я уж молчу о том, что навигацию тоже нужно будет приспосабливать под вышеуказанные теги.


Решение:
Решение получилось довольно таки простым, но невероятно удобным и многофункциональным!
Для оформления желаемого списка используется только шаблон shortstory.tpl (или какой выбран для категории). В main.tpl никаких дополнительных тегов не нужно.
Вот пример шаблона короткой новости:
[page-count=1]<h1>Какое-то SEO описание для выбранной категории</h1>[/page-count]
<table>
<thead>
<tr>
	<td>Фото</td>
	<td>Описание</td>
</tr>
</thead>
<tbody>
[list]
<tr>
	<td><img src="{image-1}"></td>
	<td>
		[full-link]{title}[/full-link]
		<div>{short-story limit="200"}</div>
	</td>
</tr>
[/list]
</tbody>
</table>
{navigation}

Как видно добавился тег:
[list]...[/list]

Внутри него находится именно шаблон короткой новости, все остальное непосредственная обертка. Так же обратите внимание на тег навигации. Его можно вручную разместить где угодно или придать ему индивидуальный стиль. Если тег не указан, по умолчанию он будет выведен снизу.


Установка:
Открыть файл engine/modules/show.short.php
Найти строку (это кусок строки, для простоты):
	if( strpos( $tpl->copy_template, "[xfvalue_" 

В DLE 13.2 строка:
	if( stripos( $tpl->copy_template, "[xf"

ПЕРЕД ней вставить:
////////////////////////////////////////////////////////////////////////////////////////////////
	if( preg_match( "#\\[list\\](.+?)\\[/list\\]#is", $tpl->copy_template, $list_tpl ) ){
		$global_tpl = $tpl->template;
		$tpl->template = $tpl->copy_template = $list_tpl[1];
	}else $global_tpl = '';
////////////////////////////////////////////////////////////////////////////////////////////////


Найти строку:
			switch ( $config['news_navigation'] ) {

ПЕРЕД ней вставить:
////////////////////////////////////////////////////////////////////////////////////////////////
			if( !$global_tpl )
////////////////////////////////////////////////////////////////////////////////////////////////


В самом низу найти код:
}
?>

ПЕРЕД ним вставить:
////////////////////////////////////////////////////////////////////////////////////////////////
	if( $global_tpl AND $news_found ){
		$tpl->result['content'] = str_replace( $list_tpl[0], $tpl->result['content'], $global_tpl );
		if (stripos ( $tpl->result['content'], "[category=" ) !== false) $tpl->result['content'] = preg_replace_callback ( "#\\[(category)=(.+?)\\](.*?)\\[/category\\]#is", "check_category", $tpl->result['content'] );
		if (stripos ( $tpl->result['content'], "[not-category=" ) !== false) $tpl->result['content'] = preg_replace_callback ( "#\\[(not-category)=(.+?)\\](.*?)\\[/not-category\\]#is", "check_category", $tpl->result['content'] );
		if(stripos($global_tpl,"{navigation}")!==false) $tpl->result['content'] = str_replace( "{navigation}", $tpl->result['navi'], $tpl->result['content'] );
		else $tpl->result['content'] .= $tpl->result['navi'];
	}
////////////////////////////////////////////////////////////////////////////////////////////////


Вот и все.
Если в шаблоне короткой новости не используется тег [list], то движок работает в стандартном режиме.

Версия DLE: 10.0 и старше

Пример: color.sandev.pro

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (8)
  1. foto
    Гость 2 октября 2018 21:31 #
    в примере по ссылке на сайт не видно этих кнопок для смены коротких новостей ((
    0
  2. foto
    Клиент 25 ноября 2018 00:22 #
    а можно просто вырезать из движка - <div id='dle-content'>
    и за что он вообще отвечает? =)
    0
    1. foto
      Администратор 27 ноября 2018 00:40 #
      Отвечает за любое AJAX взаимодействие с контентом.
      Лучше не убирать. Ничем же не мешает по сути.
      0
  3. foto
    Гость 6 марта 2019 00:02 #
    Здравствуйте.

    Попробовал сегодня установить данный хак в релиз 13.2, но начались ошибки. Тэги
    [list][/list]
    и тэг
    {navigation}
    просто отображаются на странице сайта. Также повсюду дублируются тэги вывода таблицы и т.п. Одним словом, этот хак в его исходном виде под 13.2 не работает.

    Не могли бы вы выложить коды для замены в show.short.php для релиза 13.2 ? Был бы вам очень признателен и благодарен!

    Заранее благодарю, с уважением!
    0
  4. foto
    Гость 6 марта 2019 02:02 #
    Разобрался уже сам :) В 13.2 вместо кода
    if( strpos( $tpl->copy_template, "[xfvalue_"
    присутствует код
    if( stripos( $tpl->copy_template, "[xf"

    Вот из-за этого и не работало. Теперь все пучком. Спасибо за хак, очень пригодился!
    +1
  5. foto
    Клиент 21 февраля 2020 08:18 #
    Здравствуйте.

    Нашел небольшой баг (или фича?):
    При использовании тегов [list]...[/list] в шаблоне shortstory.tpl, не работают теги [xfgiven_xxx]...[/xfgiven_xxx], которые находятся ВНЕ тегов [list]...[/list]. Т.е. просто выводится текст [xfgiven_xxx]...[/xfgiven_xxx]...

    Как исправить? Спасибо!
    0
    1. foto
      Администратор 21 февраля 2020 14:44 #
      Это не баг и не фича, а очевидный алгоритм работы.
      То что внутри тегов [list] - это виртуальный шаблон shortstory.tpl
      То что вне его - это грубо говоря тот же main.tpl. И в нем невозможно вывести теги доп.полей из коротких новостей.
      0
  6. foto
    Гость 20 июля 2020 15:56 #
    dle 14
    тег {navigation} не работает при просмотре /lastnews, категорий и т.д
    шаблон shortstory.tpl
    {navigation}
    <div  class="table-responsive" id="index">
    <table class="table table-striped table-hover table-sm">
      <thead>
        <tr class="backgr">
          <th scope="col">Дата</th>
          <th scope="col">Название</th>
    	  <th scope="col"></th>
          <th scope="col">Размер</th>
          <th scope="col">Пиры</th>
        </tr>
      </thead>
      <tbody>
    [list]
    <tr>
     <th class="text-nowrap">{date=d M y}</th>
     <td class="d-block text-truncate" style="max-width: 30rem;">
         <a href="[xfvalue_torrent]" id ="down" style="float: left;"><img src="{THEME}/images/d.gif" alt="D" /></a>
         <a href="{torrent_magnet}"><img src="{THEME}/images/m.png" alt="M" style="margin: 0 0 1px 4px; cursor: pointer;" ></a>
         <a href="{full-link}" title="{title}">{title} </a>
     </td>
     <td class="text-nowrap">[comments]{comments-num} <img src="{THEME}/images/com.gif" alt="C">[/comments]</td>
     <td class="text-nowrap">{torrent_size}</td>
     <td class="text-nowrap">
         <span class="text-success" data-toggle="tooltip" title="Раздают"><img src="{THEME}/images/arrowup.gif" alt="S" /> {torrent_seeders} </span>
         <span class="text-danger" data-toggle="tooltip" title="Качают"><img src="{THEME}/images/arrowdown.gif" alt="L" />  {torrent_leechers} </span>
     </td>
    </tr>
    [/list]
    </tbody>
    </table>
     </div> 

    и еще один вопрос, для результатов поиска и custom как это все проделать?
    +1
Добавить комментарий
  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2020.
При копировании, ссылка на источник обязательна.