Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

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

Тема в разделе "Хаки DLE", создана пользователем Sander, 10 ноя 2016.

10.11.16 в 21:51
10.11.16 в 21:51
0
999
2
  1. TopicStarter Overlay
    Sander

    Sander Новичок

    Регистрация:
    5 мар 2016
    Сообщения:
    49
    Лучших ответов:
    0
    Рейтинги:
    +101 / 0 / -0
    [​IMG]
    Небольшое дополнение к шаблонизатору для вывода списка коротких новостей.

    Суть проблемы:

    Столкнулся я тут с задачей. Надо было вывести новости на сайте для разных категорий - разные шаблон.
    Разумеется в настройках категорий есть параметр "Шаблон короткой новости", но все бы ничего, но что делать, если данные надо выводить в виде списка, плиткой и таблицей. Можно конечно в 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_"
    ПЕРЕД ней вставить:
    Код:
    ////////////////////////////////////////////////////////////////////////////////////////////////
        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

    Источник: http://sandev.pro/web/100-rasshirenie-funkcionala-shablonizatora-dlya-spiska-korotkih-novostey.html

    С уважением,
    Олег Александрович a.k.a. Sander
     
    • Нравится Нравится x 2
Похожие темы
  1. Valkiriya
    Ответов:
    6
    Просмотров:
    1.684
Загрузка...
Яндекс.Метрика