Компонент Joomla - SEF ссылки и JRequest::getVar не возвращают переменные из закодированного URL

У меня проблемы с моим компонентом и ссылками Joomla SEF. Я пытаюсь использовать JRequest::getVar чтобы получить переменные из исходного URL (указывается с JRoute::_)

Мой файл router.php выглядит так:

function PortfolioBuildRoute(&$query)
{
    $segments = array();

    if (isset($query['category'])) {
        $segments[] = $query['category'];
        unset($query['category']);
    }
    if (isset($query['subcategory'])) {
        $segments[] = $query['subcategory'];
        unset($query['subcategory']);
    }
    return $segments;
}

function PortfolioParseRoute($segments)
{
    $vars = array();
    $count = count($segments);

    if ($count) {
        $count--;
        $segment = array_shift($segments);
        if (is_numeric($segment)) {
            $vars['subcategory'] = $segment;
        } else {
            $vars['category'] = $segment;
        }
    }
    if ($count) {
        $count--;
        $segment = array_shift($segments) ;
        if (is_numeric($segment)) {
            $vars['subcategory'] = $segment;
        }
    }
    return $vars;
}

Исходный код, который я кодирую, выглядит следующим образом:index.php?option=com_portfolio&category=x&subcategory=y а также JRoute::_ превращает это в /portfolio/x/y, Теперь мне нужен какой-то способ получения переменных x и y после того, как URL закодирован?

----РЕДАКТИРОВАТЬ----

Итак, я понял это - я изменил часть ParseRoute файла router.php на:

function PortfolioParseRoute($segments)
{
    $vars = array();
    $vars['category'] = str_replace(":", "-", $segments[0]);
    $vars['subcategory'] = str_replace(":", "-", $segments[1]);
    return $vars;
}

Я чувствую, что теперь я немного лучше понимаю файл router.php. Оказывается, JRoute конвертирует дефисы в вашем URL в двоеточие! Не совсем знаю, почему он выбирает бедных дефисов, большой запутанный хулиган. Я мог бы использовать подчеркивания в URL, и он работал бы нормально, но дефисы лучше, чем подчеркивание.

Я использовал str_replace на каждом из сегментов в ParseRoute, чтобы разобраться в этом.

Я не уверен, что это правильный и стандартный способ сделать это, но я новичок в Joomla и PHP, так что мне придется это делать, пока мне не сообщат иначе.

По крайней мере, это работает!

:)

0 ответов

Другие вопросы по тегам