Компонент 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, так что мне придется это делать, пока мне не сообщат иначе.
По крайней мере, это работает!
:)