1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Создание красивого BB-кода [spoiler]

Тема в разделе "Статьи по XenForo Framework", создана пользователем FractalizeR, 06.10.2011.

Загрузка
  1. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Создаем обработчик события BbCode, включая в цепочку свой обработчик:

    PHP:
    <?php
    class XfRu_Spoiler_Listener_BbCode {
        public static function 
    listen($class, array &$extend) {
            if (
    $class == 'XenForo_BbCode_Formatter_Base') {
                
    $extend[] = 'XfRu_Spoiler_BbCode_Formatter';
            }
        }
    }
    Этот файл должен называться BbCode.php и лежать в папке /library/XfRu/Spoiler/Listener.

    Теперь пишем наш обработчик

    PHP:
    <?php
    class XfRu_Spoiler_BbCode_Formatter extends XFCP_XfRu_Spoiler_BbCode_Formatter {

        protected 
    $_tags;
        public function 
    getTags() {
            
    $this->_tags parent::getTags();
            
    $this->_tags['spoiler'] = array(
                
    'trimLeadingLinesAfter' => 1,
                
    'callback' => array($this'renderTagSpoiler')
            );
            return 
    $this->_tags;
        }

        public function 
    renderTagSpoiler(array $tag, array $rendererStates) {
            
    $content $this->renderSubTree($tag['children'], $rendererStates);
            
    $spoiler $tag['option'];
            if (
    $this->_view) {
                
    $template $this->_view->createTemplateObject('XfRu_Spoiler_spoiler', array(
                    
    'content' => $content,
                    
    'spoiler' => $spoiler
                
    ));
                return 
    $template->render();
            }
            else {
                
    $name '<div>' . new XenForo_Phrase('spoiler_warning') . ($spoiler ': '.$spoiler '') . '</div>';
                return 
    '<blockquote>' $name $content '</blockquote>';
            }
        }
    }
    Этот файл должен называться Formatter.php и лежать в папке /library/XfRu/Spoiler/BbCode

    В принципе, все достаточно просто. Ищем тег
    , затем определяем получаем настройкии смотрим, используется ли тег в варианте
    или
    . А затем обращаемся к шаблону XfRu_Spoiler_spoiler.

    Создаем этот шаблон:

    HTML:
    <xen:require css="bb_code.css" />
    <xen:require js="js/XfRu/Spoiler.js" />
    <div class="bbCodeBlock bbCodeQuote bbCodeSpoiler">
        <aside>
            <div class="attribution type">
                <div style="float: right;">
                    (<a href="#" class="spoilerToggle">{xen:phrase toggle_spoiler}</a>)
                </div>
                <b>{xen:phrase spoiler_warning}</b><xen:if is="{$spoiler}">: {$spoiler}</xen:if>
            </div>
            <blockquote class="spoilerContent">{xen:raw $content}</blockquote>
        </aside>
    </div>
    Шаблон очень прост. Он ссылается на небольшой файл Javascript Spoiler.js в папке js/XfRu. Создадим его:

    Код:
    /** @param {jQuery} $ jQuery Object */
    !function($, window, document, _undefined){
        XenForo.Spoiler = function($spoiler) {
            var $content = $spoiler.find('.spoilerContent:first').hide();
            $spoiler.find('.spoilerToggle:first').click(function(e) {
                e.preventDefault();
                $content.toggle('slow');
            });
        }
        XenForo.register('.bbCodeSpoiler', 'XenForo.Spoiler');
    }
    (jQuery, this, document);
    Этот код просто ищет все зоны спойлеров и прячет их. А затем связывает ссылку спойлера с функцией для реализации функционала "отобразить / спрятать". С таким подходом, если у пользователя отключен Javascript, он все равно увидит нужную информацию.

    Вам понадобится также создать две фразы spoiler_warning, которая будет отображаться слева на заголовках всех спойлеров и toggle_spoiler, которая будет служить ссылкой с функционалом "развернуть / свернуть" спойлер.

    Теперь нам нужно подключить к форуму созданные файлы. Для этого вам нужно перевести форум в режим разработки. Затем вам нужно создать Аддон для нашего тега Спойлер:
    CreateAddon.png

    Затем вам нужно создать обработчик события:
    CodeEventListener.png

    Тег должен работать.

    Оригинал.
     
    garikm, Desperado, Wertrend и 3 другим нравится это.
  2. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Небольшое дополнение - фразу спойлера spoiler_warning желательно поместить в глобальный кеш фраз (указывается при создании фраз), т.к. она напрямую используется в коде, т.е. в некоторых случаях может быть никому не нужный доп запрос к базе (например при просмотре ленты последней активности, ленты поиска и т.д.)
     
    Romchik®, infis и FractalizeR нравится это.
  3. Desperado

    Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
    Сделал себе данный спойлер, красиво, вопросов нет. Почти нет.

    Дело в том, что при его использовании получается следующее:

    После размещения сообщения вида
    Hidden Text
    всё отлично. Спойлер работает, а если перезагрузить страницу - опять вижу его неотформатированным (необработанным)

    Включён файловый кеш - удалял.
    Кеш из админки перестраивал. 0 реакции.
     
  4. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Дайте ссылку на ваш ресурс, пожалуйста.
     
  5. Desperado

    Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
  6. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    А где там спойлер есть? В какой теме?
     
  7. Desperado

    Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
  8. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    По-моему, у вас плагин неактивен. Я не вижу никакого соответствующего HTML или js в шапке.
     
    Desperdo нравится это.
  9. Desperado

    Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
    Да нет, включён.
    Ладно, спасибо, пойду искать где я лох :)
     
  10. Union

    Union Местный

    Регистрация:
    12.10.11
    Сообщения:
    306
    Симпатии:
    86
    Версия XF:
    1.1.2
    Может расскажете как например сделать ббкод на основе цитаты свой?
     
  11. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    А этого в качестве примера недостаточно? Вам что нужно сделать конкретно?
     
  12. Union

    Union Местный

    Регистрация:
    12.10.11
    Сообщения:
    306
    Симпатии:
    86
    Версия XF:
    1.1.2
    Нужна рабочая версия на 1.1 линейку, без правки файлов движка и шаблонов:)
     
  13. ShanKo

    ShanKo Местный

    Регистрация:
    16.10.10
    Сообщения:
    17
    Симпатии:
    14
    А где вы тут правку файлов движка увидели?) Всё что написано в статье - это равносильно установке отдельного аддона, разница только в том, что вы это делаете сами, а не средствами автоматики. Что, как следствие, позволяет понять элементарные правила создания своих собственных аддонов для Ксены)

    Впрочем, в той же теме на оф. форуме выложили готовый аддон:
    http://xenforo.com/community/threads/creating-a-beautiful-looking-spoiler-tag.17083/#post-241180
     
    Romchik®, Yoskaldyr и FractalizeR нравится это.
  14. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    Хех, а решение то было уже давно оказывается :)
    Выложил готовый плагин в отдельную тему: BB-код spoiler
     
    Union и TAIFUN нравится это.
  15. Union

    Union Местный

    Регистрация:
    12.10.11
    Сообщения:
    306
    Симпатии:
    86
    Версия XF:
    1.1.2
    :D Пардон, я не туда отписался, нужен был мод first post on all pages рабочий
     
  16. Xiri

    Xiri Пользователь

    Регистрация:
    06.01.17
    Сообщения:
    10
    Симпатии:
    1
    Добрый день. Спасибо Вам за ваши отличные посты и помощь. Мне бы хотелось получше разобраться как создавать bbcode в админке. По этому поводу нашла пример с wiki (<a href="Википедия — свободная энциклопедия{text}" target="_blank">{text}</a>). Но никакого описания что значит {text} и как это использовать не нашла. Методом тыка обнаружила, что можно использовать еще параметр {option}. Не очень понятно, также, зачем писать классы, если все можно настроить в админке, может для рендеринга? Может есть примеры или документация на эту тему?
     

Поделиться этой страницей