0 Пользователей и 1 Гость просматривают эту тему.
  • 35 Ответов
  • 3536 Просмотров
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
что подразумевается под "Роутер не работает"? фатальная ошибка? или не получает управление?
ошибок не выдаёт, просто не переходит на страницу
site.ru/index.php?view=object_list&id_category=kakaya-to-kategoryya

а вот если раскомментировать строку:
if( isset($query['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
Код
function AbreadBuildRoute( &$query )
{
    $segments = array();
    if( isset($query['view']) ){       unset($query['view']); }
    if( isset($query['task']) ){       $segments[] = $query['task'];        unset($query['task']); }
    if( isset($query['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
    if( isset($query['id']) ){         $segments[] = $query['id'];          unset($query['id']); }
    if( isset($query['limitstart']) ){ unset($query['limitstart']); }

    //echo "<pre>"; print_r($segments); echo "</pre>";
    return $segments;

}
function AbreadParseRoute( $segments )
{
    $vars  = array();
    $count = count($segments);
    $menu  = JMenu::getInstance('site')->getActive();
    $view  = isset($menu->query['view'])? $menu->query['view'] : '';

    if( $view === 'object_list' && $count == 1 ){
        $vars['view'] = 'object_view';
        //$vars['id_category'] = $segments[0];
        $vars['id'] = $segments[0];
        return $vars;
        //echo "<pre>"; print_r($vars); echo "</pre>";
    }

}
то выходит ошибка:

Warning: array_merge(): Argument #2 is not an array in site.ru/libraries/cms/router/router.php on line 350
Fatal error: Unsupported operand types in site.ru/libraries/cms/router/router.php on line 234

ошибка-то понятна, но вот как её отловить, не понятно...
ведь посмотреть что в массиве невозможно!
« Последнее редактирование: 25.05.2016, 09:55:19 от john.deff »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
ошибка-то понятна, но вот как её отловить, не понятно...
Мне кажется, что вам непонятна ошибка, поскольку отловить как раз можно - известны все данные: функция, файл, строка... В данном случае ваша функция AbreadParseRoute() ничего не возвращает, отсюда и ошибка.
ведь посмотреть что в массиве невозможно!
Сделайте
Код: php-brief
exit();
Не будь паразитом, сделай что-нибудь самостоятельно!
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Мне кажется, что вам непонятна ошибка, поскольку отловить как раз можно - известны все данные: функция, файл, строка... В данном случае ваша функция AbreadParseRoute() ничего не возвращает, отсюда и ошибка.Сделайте
Код: php-brief
exit();

как этим пользоваться?
покажите примерами! компонент написал проблем нет, но не могу совладать с роутингом!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
как этим пользоваться?
Так и пользоваться: вызывайте ее после prin_r(), чтобы прервать работу скрипта.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Так и пользоваться: вызывайте ее после prin_r(), чтобы прервать работу скрипта.

если в роутер ставить exit(); то выводятся кракозябры и даже главная страница падает!
ссылки вывожу через модуль!
как реально сделать отладку методов роутера? покажите на примере
« Последнее редактирование: 25.05.2016, 15:26:15 от john.deff »
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
 ^-^ Ура! разобрался! мой код с комментариями и возможностью просмотра данных в массивах

Надеюсь кому нибудь будет полезно! всем спасибо! *DRINK*
код файна "router.php" который должен лежать в корне Вашего компонента
Код: php
<? defined('_JEXEC') or die;

function AbreadBuildRoute( &$query )
{
    $segments = array();
    if( isset($query['view']) ){       unset($query['view']);}
    if( isset($query['task']) ){       $segments[] = $query['task'];        unset($query['task']); }
    if( isset($query['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
    if( isset($query['id']) ){         $segments[] = $query['id'];          unset($query['id']); }
    if( isset($query['limitstart']) ){ unset($query['limitstart']); }
    return $segments;
}

function AbreadParseRoute( $segments )
{
    $vars  = array();
    $count = count($segments);
    $menu  = JMenu::getInstance('site')->getActive();
    $view  = isset($menu->query['view'])? $menu->query['view'] : '';

    //echo "<pre>"; print_r($count); echo "</pre>";
    //echo "<pre>"; print_r($menu); echo "</pre>";
    //echo "<pre>"; print_r($view); echo "</pre>";
    //echo "<pre>"; print_r($segments); echo "</pre>";

    # Этот блок орабатывает ссылки, типа:
    # index.php?option=com_macomp&view=home&Itemid=106
    # index.php?option=com_macomp&view=object_list&id_category=moya-kategoriya&Itemid=106
    # Главная страница где модуль отображает список ссылок на категории
    # это вид нашего компонента "MycompViewHome"
    if( $view === 'home' && $count == 1){// && $count == 1
        $vars['view'] = 'object_list';
        # так как нам надо отображать только alias категории без id,
        # то убираем из строки ":", так как Joomla сама автоматически проставляет это двоеточие ":"
        $vars['id_category'] = str_replace( ':', '-', $segments[0] );

        //echo "<hr />1<pre>"; print_r($view); echo "</pre>";
        //echo "<pre>"; print_r($vars); echo "</pre>";
        return $vars;
    }

    # Этот блок орабатывает ссылки, типа:
    # index.php?option=com_macomp&view=object_view&id_category=moya-kategoriya&id=29:moya-statya&Itemid=106
    # Так как эта страница выводит конечный объект в категории, то
    # в массиве у нас первей идет имя категории, второй id статьи и имя статьи (alias)
    if( $view === 'home' && $count == 2 ){// && $count == 2
        $vars['view'] = 'object_view';
        # так как нам надо отображать только alias категории без id,
        # то убираем из строки ":", так как Joomla сама автоматически проставляет это двоеточие ":"
        $vars['id_category'] = str_replace( ':', '-', $segments[0] );
        # Здесь отдаём: 29:moya-statya
        $vars['id'] = $segments[1];

        //echo "<hr />2<pre>"; print_r($view); echo "</pre>";
        //echo "<pre>"; print_r($vars); echo "</pre>";
        return $vars;
    }
}

Прошу модератора перевести тему в статус: РЕШЕНО
« Последнее редактирование: 25.05.2016, 17:25:36 от john.deff »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться