Собственные страницы (подробно)

Тема в разделе "Инструкции и основная информация", создана пользователем Raerek, 04.02.16.

  1. Raerek

    Raerek Участник

    Сообщения:
    136
    Репутация:
    7
    Рейтинг:
    +14 / -0
    В следующем примере я покажу, как можно создать в меню навигации форума дополнительные кнопки, ведущие на страницы с произвольным контентом.
    Созданные кнопки будут работать так же, как и основные, т.е. при переходе будут подсвечиваться и иметь свое суб-меню, а контент страниц будет правильно интегрирован в шаблон форума.

    ВНИМАНИЕ! Не занимайтесь бездумным копипастом! Будьте внимательны и тогда всё получится.

    И так, начнем.
    Для начала переведем форум в режим отладки. для этого добавим в файл /library/config.php строчку:
    Код:
    $config['debug'] = true;
    Теперь создадим необходимые для работы папки и файлы.
    Или скачайте архив CustomNavTabs.zip из вложения в теме с обсуждением ресурса и распакуйте в папку library.
    Листинг:
    Код:
    library/CustomNavTabs/ControllerPublic/Chat.php
    library/CustomNavTabs/Listeners/Navigation.php
    library/CustomNavTabs/Route/Prefix/Extra.php
    Содержимое файла library/CustomNavTabs/ControllerPublic/Chat.php
    PHP:
    <?php

    class CustomNavTabs_ControllerPublic_Chat extends XenForo_ControllerPublic_Abstract
    {
        public function 
    actionIndex()
        {
            
    $visitor XenForo_Visitor::getInstance();
            
    $sessionModel $this->getModelFromCache('XenForo_Model_Session');

            
    $onlineUsers $sessionModel->getSessionActivityQuickList(
                
    $visitor->toArray(),
                array(
    'cutOff' => array('>'$sessionModel->getOnlineStatusTimeout())),
                (
    $visitor['user_id'] ? $visitor->toArray() : null)
            );

            
    $boardTotals $this->getModelFromCache('XenForo_Model_DataRegistry')->get('boardTotals');
            if (!
    $boardTotals)
                
    $boardTotals $this->getModelFromCache('XenForo_Model_Counters')->rebuildBoardTotalsCounter();

            
    $viewParams = array(
                
    'onlineUsers' => $onlineUsers,
                
    'boardTotals' => $boardTotals
            
    );

            return 
    $this->responseView('CustomNavTabs_ViewPublic_Chat''extra_chat'$viewParams);
        }
        public static function 
    getSessionActivityDetailsForList(array $activities)
        {
            return new 
    XenForo_Phrase('viewing_chat_content');
        }
    }
    CustomNavTabs_ControllerPublic_Chat - должно соответствовать пути к данному файлу.
    CustomNavTabs_ViewPublic_Chat - конец строки _Chat должен соответсвовать имени данного файла
    'extra_chat' - имя шаблона для вывода контента
    'viewing_chat_content' - имя фразы, отвечающей для страницы "Сейчас на форуме"

    Содержимое файла library/CustomNavTabs/Listeners/Navigation.php
    PHP:
    <?php

    class CustomNavTabs_Listeners_Navigation
    {
        public static function 
    navtabs(array &$extraTabs$selectedTabId)
        {
            
    $extraTabs['extra/chat/'] = array(
                
    'title' => new XenForo_Phrase('chat_nav_tab'),
                
    'href' => XenForo_Link::buildPublicLink('full:extra/chat/'),
                
    'selected' => ($selectedTabId == 'pages'),
                
    'position' =>  'middle',
                
    'selected' =>  ($selectedTabId == 'extra/chat/'),
                
    'linksTemplate' => 'extra_chat_sublinks',
            );
        }
    }
    CustomNavTabs_Listeners_Navigation - должно соответствовать пути к данному файлу.
    'chat_nav_tab' - имя фразы, отвечающей за название создаваемой вкладки в меню.
    'href' - путь до создаваемой страницы
    'position' - позиция в меню. Возможны варианты home, end или middle.
    'extra_chat_sublinks' - имя шаблона дополнительных ссылок ниже вкладок, false - без ссылок.

    Содержимое файла library/CustomNavTabs/Route/Prefix/Extra.php
    PHP:
    <?php

    class CustomNavTabs_Route_Prefix_Extra implements XenForo_Route_Interface
    {
        public function 
    match($routePathZend_Controller_Request_Http $requestXenForo_Router $router)
        {
            
    $urlComponents explode('/'$routePath);
            
    $subPrefix strtolower(array_shift($urlComponents));

            switch(
    $subPrefix)
            {
                case 
    'chat':
                    
    $controllerName 'CustomNavTabs_ControllerPublic_Chat';
                    
    $routeName 'extra/chat/';
                    break;
                default:
                    
    $controllerName 'CustomNavTabs_ControllerPublic_Chat';
                    
    $routeName 'extra/chat/';
                    break;
            }

            return 
    $router->getRouteMatch($controllerName'index'$routeName$routePath);
        }
    }
    CustomNavTabs_Route_Prefix_Extra - должно соответствовать пути к данному файлу.
    CustomNavTabs_ControllerPublic_Chat - должно соответствовать пути к файлу library/CustomNavTabs/ControllerPublic/Chat.php


    С файлами закончили. Теперь перейдем в админку форума.

    Создадим новое дополнение (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    ID дополнения: Custom Nav Tabs
    Заголовок: Custom Nav Tabs
    Информация о версии: 1
    Номер версии: 1

    Содадим новый префикс роутинга (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    Префикс роутинга: extra
    Тип роутинга: Публичный
    Класс роутинга: CustomNavTabs_Route_Prefix_Extra
    Использовать класс для генерации ссылки: Всегда
    Дополнение: Custom Nav Tabs
    (К этому префиксу в дальнейшем можно будет добавлять и другие новые страницы. Ссылки на них буду иметь вид

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )

    Содадим новый обработчик событий (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    Обрабатывать событие: navigation_tabs
    Класс: CustomNavTabs_Listeners_Navigation
    Метод: navtabs
    Порядок выполнения обработчиков: 1
    Дополнение: Custom Nav Tabs

    Создадим новую фразу (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    Заголовок: chat_nav_tab
    Текст фразы: Чат
    Дополнение: Custom Nav Tabs
    Добавлять данную фразу в глобальный кэш

    Создадим еще одну новую фразу (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    Заголовок: viewing_chat_content
    Текст фразы: В чате
    Дополнение: Custom Nav Tabs
    Добавлять данную фразу в глобальный кэш

    Создадим новый шаблон (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    Имя шаблона: extra_chat_sublinks
    Содержимое шаблона:

    Код:
    <ul class="secondaryContent blockLinksList">
        <li><a href="ваша ссылка">Суб-меню 1</a></li>
        <li><a href="ваша ссылка">Суб-меню 1</a></li>
        <li><a href="ваша ссылка">Суб-меню 3</a></li>
    </ul>
    Дополнение: Custom Nav Tabs

    Создадим еще один новый шаблон (ссылка

    Ссылки могут видеть только зарегистрированные пользователи. Зарегистрируйтесь или авторизуйтесь для просмотра ссылок!

    )
    Имя шаблона: extra_chat
    Содержимое шаблона:

    HTML:
    <xen:h1>Заголовок страницы</xen:h1>
    <xen:title>Название страницы</xen:title>
    <xen:description>Описание страницы</xen:description>
    
    КОНТЕНТ СТРАНИЦЫ В ФОРМАТЕ HTML
    
    <xen:sidebar>
        <xen:include template="sidebar_online_users" />
        <xen:include template="forum_stats" />
    </xen:sidebar>
    Дополнение: Custom Nav Tabs

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

    Вложения: