Иконка ресурса

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

После правки файла: Extra
Код:
An exception occurred: Undefined offset: 0 in /home/t/t7able/public_html/library/CustomNavTabs/Route/Prefix/Extra.php on line 10

    XenForo_Application::handlePhpError() in CustomNavTabs/Route/Prefix/Extra.php at line 10
    CustomNavTabs_Route_Prefix_Extra->match() in XenForo/Route/Prefix.php at line 86
    XenForo_Route_Prefix->_loadAndRunSubRule() in XenForo/Route/Prefix.php at line 66
    XenForo_Route_Prefix->match() in XenForo/Router.php at line 72
    XenForo_Router->match() in XenForo/Dependencies/Abstract.php at line 107
    XenForo_Dependencies_Abstract->route() in XenForo/FrontController.php at line 285
    XenForo_FrontController->route() in XenForo/FrontController.php at line 130
    XenForo_FrontController->run() in /home/t/t7able/public_html/index.php at line 13
 
Improvs, в общем решение такое вышло.
Скорее всего проблема в том что сильно большое название имени в контроллерах и прочие.
Поменял по меньше и заработало, но и префиксы чуть-чуть поменял.

Если URL будет не соответствовать то перенаправит на главную страницу.

CHAT.PHP
PHP:
class MMOSBT_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('MMOSBT_ViewPublic_Chat', 'extra_chat', $viewParams);
  }

  public function actionRedirect() {
    return $this->responseRedirect(
                    XenForo_ControllerResponse_Redirect::SUCCESS,
                    XenForo_Link::buildPublicLink('/'),
                    'Ошибка'
        );
  }

  
public static function getSessionActivityDetailsForList(array $activities)
    {
        $output = array();
        foreach ($activities as $key => $activity)
        {
            $output[$key] = array(
                new XenForo_Phrase('viewing_chat_content'),
                new XenForo_Phrase('Правила'),
                XenForo_Link::buildPublicLink('mmosbt/pravila/'),
                false
            );
        }
        return $output;
    }
}

EXTRA.PHP
PHP:
class MMOSBT_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));

        if($urlComponents[0] == '') {
                switch($subPrefix)
                {
                    case 'pravila/':
                        $controllerName = 'MMOSBT_ControllerPublic_Chat';
                        $routeName = 'mmosbt/pravila/';
                        break;
                    default:
                        $controllerName = 'MMOSBT_ControllerPublic_Chat';
                        $routeName = 'mmosbt/pravila/';
                        break;
                }
                return $router->getRouteMatch($controllerName, 'index', $routeName, $routePath);
        }
        else
        {
                switch($subPrefix)
                {
                    default:
                        $controllerName = 'MMOSBT_ControllerPublic_Chat';
                        $routeName = '/';
                        break;
                }
                return $router->getRouteMatch($controllerName, 'redirect', $routeName, $routePath);
        }

    }
}

NAVIGATION.PHP
PHP:
class MMOSBT_Listeners_Navigation
{
     public static function navtabs(array &$extraTabs, $selectedTabId)
    {
        $extraTabs['mmosbt/pravila/'] = array(
            'title' => new XenForo_Phrase('chat_nav_tab'),
            'href' => XenForo_Link::buildPublicLink('full:mmosbt/pravila/'),
            'selected' => ($selectedTabId == 'pages'),
            'position' =>  'middle',
            'selected' =>  ($selectedTabId == 'mmosbt/pravila/'),
            'linksTemplate' => 'extra_chat_sublinks',
        );
    }
}
 
Хотелось бы узнать как добавлять ещё страницы. может кто-нибудь написать туториальчик?
 
Хм, а как-нибудь можно реализовать, чтоб ссылка в меню отображалась в зависимости от условия, ну, например, включение/выключение плагина? Как в шаблоне такое реализовать, в принципе понятно, но ведь тут, как я понимаю, этот линк берется не из какого-то шаблона.
 
[SVG]Record Online Player расковыряй, я там делал с правами и с выключением в настройках стиля

Вопрос возник. Здесь
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',
        );
    }
}
Надо указывать расположение вкладки на панели навигации 'position' => 'middle', ну понятно можно менять на end или home, но вот если я хочу сделать настройку с меню выбора, как там указать ее?
 
Skaiman, с выбором из настройки ?
Ну да. Например я сделал настройку option_id с редактированием формата "Меню выбора", с "Параметрами формата"
Код:
home=Спереди
middle=По середине
end=В конце
Что бы можно было выбирать в настройках расположение вкладки.
 
Последнее редактирование:
Skaiman,

В общем создаем новую настройку, и привязываем к своему дополнению.
testg4.png

Выйдет примерно так.
testg2.png
Указываем ID нашего в меню тут.
$myChoice = $options->menu_test;

Ну и убираем жесткую привязку тут
'position' => 'middle',

Заменяем на это
'position' => $myChoice,

И теперь он будет подставлять в зависимости от того что мы выбрали.

Итого.
PHP:
<?php

class CustomNavTabs_Listeners_Navigation
{
    public static function navtabs(array &$extraTabs, $selectedTabId)
    {
        $options = XenForo_Application::get('options');
        $myChoice = $options->menu_test;

        $extraTabs['extra/chat/'] = array(
            'title' => new XenForo_Phrase('chat_nav_tab'),
            'href' => XenForo_Link::buildPublicLink('full:extra/chat/'),
            'selected' => ($selectedTabId == 'pages'),
            'position' =>  $myChoice,
            'selected' =>  ($selectedTabId == 'extra/chat/'),
            'linksTemplate' => 'extra_chat_sublinks',
        );
    }
}
 
Последнее редактирование:
Skaiman, Да я понял. Просто как пример, чтобы понимал откуда взялось это.
$myChoice = $options->menu_test; -> menu_test
 
АА блин, тогда можно и так сделать
PHP:
<?php

class CustomNavTabs_Listeners_Navigation
{
    public static function navtabs(array &$extraTabs, $selectedTabId)
    {
        $options = XenForo_Application::getOptions();
        $extraTabs['extra/chat/'] = array(
            'title' => new XenForo_Phrase('chat_nav_tab'),
            'href' => XenForo_Link::buildPublicLink('full:extra/chat/'),
            'selected' => ($selectedTabId == 'pages'),
            'position' =>  $options->menu_test,
            'selected' =>  ($selectedTabId == 'extra/chat/'),
            'linksTemplate' => 'extra_chat_sublinks',
        );
    }
}
 
Skaiman, как душе угодно.
Всё будет зависеть от того на сколько удобно читать вам этот код.

Skaiman, как пример можно было и так сделать. :-D
Но сами понимаете, каждый раз писать это длинное название.
И читабельность кода не очень становится.
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' =>  XenForo_Application::getOptions()->menu_test,
            'selected' =>  ($selectedTabId == 'extra/chat/'),
            'linksTemplate' => 'extra_chat_sublinks',
        );
    }
}
 
Последнее редактирование:
Всё будет зависеть от того на сколько удобно читать вам этот код.
Да это понятьно, просто бывает случается затык, а ответ на поверхности и в итоге то сам получается знал :) но вот мозг отключился, сцука

Там просто в моем варианте еще настройка может быть названия вкладки, вместо фразы
PHP:
<?php

class CustomNavTabs_Listeners_Navigation
{
    public static function navtabs(array &$extraTabs, $selectedTabId)
    {
        $options = XenForo_Application::getOptions();
        $extraTabs['extra/chat/'] = array(
            'title' => $options->nav_title,
            'href' => XenForo_Link::buildPublicLink('full:extra/chat/'),
            'selected' => ($selectedTabId == 'pages'),
            'position' =>  $options->menu_test,
            'selected' =>  ($selectedTabId == 'extra/chat/'),
            'linksTemplate' => 'extra_chat_sublinks',
        );
    }
}
 
Skaiman, раз у вас растет почему бы не сделать массив, и не использовать одну переменную для более удобного вида.

Как пример:
PHP:
<?php

class CustomNavTabs_Listeners_Navigation
{
    public static function navtabs(array &$extraTabs, $selectedTabId)
    {
        $options = XenForo_Application::getOptions();
        $myArray = array(
        'menu_test' => $options->menu_test,
        'nav_title' => $options->nav_title
        );

        $extraTabs['extra/chat/'] = array(
            'title' => $myArray['nav_title'],
            'href' => XenForo_Link::buildPublicLink('full:extra/chat/'),
            'selected' => ($selectedTabId == 'pages'),
            'position' =>  $myArray['menu_test'],
            'selected' =>  ($selectedTabId == 'extra/chat/'),
            'linksTemplate' => 'extra_chat_sublinks',
        );
    }
}
 
Реально ли вывести данные и таблиц если я их добавил недавно ? )
То есть хочется данные брать из этих новых таблиц ноя так и не понял каким образом цепляется к ним )
upload_2017-2-1_19-21-52.png
 
У меня проблема, помогите пожалуйста разобраться.
Я создала по инструкции страницу, она отлично работает.
Хлебные крошки отображаются: Форум -> Категория (роутинг ww.forum.ru/category)
Активная вкладка тоже подсвечивается, что я нахожусь в категории.
На этой созданной странице(category) я расположила еще одну ссылку, которая ведет на ещё одну созданную страницу: (роутинг ww.forum.ru/category/page)
При переходе по ссылке из category на page не отображаются хлебные крошки :( И активная вкладка перестает работать, ничего не подсвечивается.
Должно быть так: Форум -> Категория -> Страница (роутинг ww.forum.ru/category/page)

Проще говоря, в category всё работает,
При переходе на page нет крошек и подсветки активной вкладки.
Помогите пожалуйста.
 
Veronica, в мануале допущены ошибки. Видимо это отрерайченный копипаст.

Вкладки, они же табы. Из-за ошибок мануала не будет выделяться вкладка при двойной вложенности, как в вашем случае.
Хлебные крошки. Чтобы вывести крошки можно воспользоваться <xen:navigation> и <xen:breadcrumb>.
А принцип примерно такой. В роутинге вы получаете часть пути из страницы на которую перешел пользователь. Назначаете екшен и переходите в контроллер. В контроллере нужно подготовить массив для breadcrumb source и передать его в viewParams, а viewParams соответственно передаете в шаблон.
В шаблоне достаете из viewParams что необходимо и булочка! :)

Если хотите, то скидывайте данные от форума помогу разобраться на проблеме о которой вы говорили выше. Или могу просто сделать без пояснений, если нет азов в PHP и MVC.

Реально ли вывести данные и таблиц если я их добавил недавно ? )
То есть хочется данные брать из этих новых таблиц ноя так и не понял каким образом цепляется к ним )
Реально конечно. У вас есть хоть какие-то наработки?
 
в мануале допущены ошибки. Видимо это отрерайченный копипаст.
Если хотите, то скидывайте данные от форума помогу разобраться на проблеме о которой вы говорили выше.
А почему не сделать мануал правильный, без ошибок, кто то делает, пусть ошибается, но старается донести до других. Почему не дать возможность всем разобраться в проблеме?
 
Этот мануал был написан ТСом лично, не нужно тут...
А то, что Вы знаете много умных слов - это конечно очень круто. Но лучше бы вместо слов, просто взяли и написали для всех свой правильный ман. :-)
 
Парни, в ксенфоро я нуб. До написания мануалов мне очень далеко. :wink:
Просто человек обратился с конкретной проблемой и я знаю как ее решить, не более того.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу