Что нового

Shortstory template switch : переключатель шаблонов кратких новостей для DLE 14.x (1 Viewer)

AlexRUSA

AlexRUSA

Участник
Регистрация
5 Фев 2022
Сообщения
146
Реакции
409
Plug in
Ajax переключатель шаблонов кратких новостей. Шаблоны могут иметь собственные уникальные html разметки, вы ограничены лишь своей фантазией и навыками владения языка html. Модуль предназначен для людей которые более-менее что-то в этом понимают. Так как переключение шаблонов происходит посредством технологии Ajax то все бинды и события навешанные в момент открытия страницы будут сброшены и их потребуется инициализировать повторно. Всё это делается в JS коде описанном в блоке Дополнительной информации ниже.

Еще могут возникнуть проблемы с различными модулями и плагинами которые применяли какие-то операции и функции вне файла show.short.php. Если таковые будут, то разработчик этого плагина должен будет внести соответствующие правки в файл change_template.php.

Возможности:
  • Использует Cookie для хранения префикса шаблона.
  • Использует отдельные tpl шаблоны.
  • Ajax метод переключения.

Установка:
  1. Установить xml плагин.
  2. Создать копии шаблона shortstory.tpl и затем присвоить каждой копии имя в качестве суффикса shortstory_suffix.tpl.
  3. Перечисление суффиксов шаблонов делается в переменной $template в виде ($suffix_template => text\icon). Переменная находится в первой правке файла functions.php в классе templateSwitcher. По умолчанию установлено два варианта: один по умолчанию, второй компактный стиль.
    Код:
    В качестве ключа указывается суффикс шаблона, а значением является название или html код с иконкой. Разделяются запятыми (Подробней о PHP:Array)
    Если в шаблоне оставить одно значение, то переключатель не отображается. Так же функции становятся неактивными.
  4. В main.tpl или других шаблонах тегом {switcherButton} выводится переключатель. {templates-class} выводит суффикс шаблона для дополнительной вариативности стилей.

Готово!

Дополнительная информация:
  1. Если нужно изменить HTML разметку, это делается в изменениях над файлов engine/modules/functions.php. В функции show_button класса templateSwitcher.
  2. В файле engine/ajax/change_template.php есть переменная $custom_navigation в состоянии true пагинация добавляется в отдельном ключе ответа json от сервера если она размещалась при помощи тега {newsnavigation}. В JS ниже нужно указать место для пагинации.
  3. В переменной $change_tpl_mod перечислены разделы в которых будет разрешено менять шаблон. По умолчанию установлено 3 раздела где задействован файл short.story.php. Если у Вас есть модули с другими разделами которые так же используют данный файл для формирования кратких новостей то добавьте название раздела в переменную, и в том модуле будет так же меняться шаблоны при условии, что условный модуль не переназначает имя подключаемого shortstory.tpl. Однако многие как раз это делают.
  4. engine/ajax/change_template.php - файл обработчик ответов. В этом файле формируются ответы шаблона, если есть какие-то модули которые добавляли кастомные теги и функции вне файла short.story.php то аналогичные правки нужно делать и в обработчике.
  5. Для изменения jаvascript кода переключателя делается в правках файла engine/modules/main.php. В коде представленном ниже. В этом коде так же производится повторная инициализация js скриптов.
  6. JavaScript:
    $onload_scripts[] = <<<HTML
    $(".template-switcher a[data-template]").click(function(){
    
    if( $(this).hasClass('current') ) return false;
    $(this).addClass('current').siblings().removeClass('current');
    
    let new_templ = $(this).data('template');
    let content_block = $('#content').find('.left-content > div').eq(0);
    
    setcookie('short_template', new_templ);
    
    ShowLoading();
    
    $.post(dle_root + "engine/ajax/controller.php?mod=change_template", {user_hash: dle_login_hash}, function(response) {
    
    if( response.success ) {
    
    content_block.html(response.returnbox);
    content_block.append(response.navigation);
    
    //This place re-initialization javascript plugins
    
    } else {
    
    DLEAlert('Ошибка', 'Так-вот');
    
    }
    
    HideLoading();
    
    }, 'json');
    
    return false;
    });
    HTML;

let content_block = $('#content').find('.left-content > div').eq(0); Если объяснить коротко, то код ищет объект с конкретным атрибутом id="content" и если есть, то в нём же пытается найти дочерние объекты с атрибутом class="left-content" в котором находится div. В него то и будет помещена разметка из шаблонов кратких новостей которая содержится в переменной data.
Строкой ниже определяется куда добавлять разметку пагинации. Если переменная $custom_navigation установлена в true. Если в false то строку стоит закомментировать.
Функция append добавляет в самый конец.



Версия DLE: 14.x
Автор: TeraMoune
 

Пользователи, просматривающие данную тему

Верх