我的组件和Joomla的SEF链接出现问题。我正在尝试使用JRequest::getVar
从原始网址获取变量(使用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
。我现在需要的是在编码url后获取变量 x 和 y 的某种方法吗?
---- ---- EDIT
好的,所以我想出来了 - 我将router.php文件的ParseRoute部分更改为:
function PortfolioParseRoute($segments)
{
$vars = array();
$vars['category'] = str_replace(":", "-", $segments[0]);
$vars['subcategory'] = str_replace(":", "-", $segments[1]);
return $vars;
}
我觉得我现在对router.php文件有了更好的了解。事实证明,JRoute将您网址中的连字符转换为冒号!不知道为什么它选择了可怜的连字号,大JRoute欺负。我可以在URL中使用下划线,它可以正常运行,但连字符是比下划线更好的SEO。
我在ParseRoute中的每个段上使用了str_replace来对其进行排序。
我不确定这是否是正确和标准的方法,但我是Joomla和PHP noob所以它必须做,直到我建议不这样做。
至少它有效!
:)