В следующем примере я покажу, как можно создать в меню навигации форума дополнительные кнопки, ведущие на страницы с произвольным контентом.
Созданные кнопки будут работать так же, как и основные, т.е. при переходе будут подсвечиваться и иметь свое суб-меню, а контент страниц будет правильно интегрирован в шаблон форума.
ВНИМАНИЕ! Не занимайтесь бездумным копипастом! Будьте внимательны и тогда всё получится.
И так, начнем.
Для начала переведем форум в режим отладки. для этого добавим в файл /library/config.php строчку:
Теперь создадим необходимые для работы папки и файлы.
Или скачайте архив CustomNavTabs.zip из вложения в теме с обсуждением ресурса и распакуйте в папку library.
Листинг:
Содержимое файла library/CustomNavTabs/ControllerPublic/Chat.php
CustomNavTabs_ControllerPublic_Chat - должно соответствовать пути к данному файлу.
CustomNavTabs_ViewPublic_Chat - конец строки _Chat должен соответсвовать имени данного файла
'extra_chat' - имя шаблона для вывода контента
'viewing_chat_content' - имя фразы, отвечающей для страницы "Сейчас на форуме"
Содержимое файла library/CustomNavTabs/Listeners/Navigation.php
CustomNavTabs_Listeners_Navigation - должно соответствовать пути к данному файлу.
'chat_nav_tab' - имя фразы, отвечающей за название создаваемой вкладки в меню.
'href' - путь до создаваемой страницы
'position' - позиция в меню. Возможны варианты home, end или middle.
'extra_chat_sublinks' - имя шаблона дополнительных ссылок ниже вкладок, false - без ссылок.
Содержимое файла library/CustomNavTabs/Route/Prefix/Extra.php
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
Содержимое шаблона:
Дополнение: Custom Nav Tabs
Создадим еще один новый шаблон (ссылка )
Имя шаблона: extra_chat
Содержимое шаблона:
Дополнение: Custom Nav Tabs
Вот и закончили - можно проверять результат.
Данным способом можно создавать любые страницы.
Так же не обязательно создавать саму страницу, можно сделать вкладки просто для ссылок и в таком случае обработчик событий создавать не нужно.
Созданные кнопки будут работать так же, как и основные, т.е. при переходе будут подсвечиваться и иметь свое суб-меню, а контент страниц будет правильно интегрирован в шаблон форума.
ВНИМАНИЕ! Не занимайтесь бездумным копипастом! Будьте внимательны и тогда всё получится.
И так, начнем.
Для начала переведем форум в режим отладки. для этого добавим в файл /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
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_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',
);
}
}
'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($routePath, Zend_Controller_Request_Http $request, XenForo_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_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>
Создадим еще один новый шаблон (ссылка )
Имя шаблона: 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>
Вот и закончили - можно проверять результат.
Данным способом можно создавать любые страницы.
Так же не обязательно создавать саму страницу, можно сделать вкладки просто для ссылок и в таком случае обработчик событий создавать не нужно.
Вложения
-
2.1 KB Просмотры: 6