我的组件和 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;
}
我正在编码的 URL 最初看起来像:
index.php?option=com_portfolio&category=x&subcategory=y
并将JRoute::_
其转换为/portfolio/x/y
. 我现在需要的是在 url 编码后获取变量x和y的某种方法?
- - 编辑 - -
好的,所以我想通了 - 我将 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 将您 url 中的连字符转换为冒号!不太清楚为什么它会选择可怜的连字符,大 JRoute 恶霸。我可以在 URL 中使用下划线,它可以正常工作,但连字符比下划线更好。
我在 ParseRoute 的每个段上都使用了 str_replace 来解决这个问题。
我不确定这是否是解决此问题的正确和标准方法,但我是 Joomla 和 PHP 菜鸟,所以在收到其他建议之前必须这样做。
至少它有效!
:)