router.php 问题并通过 joomla3 组件中的 URL 发送参数
Posted
技术标签:
【中文标题】router.php 问题并通过 joomla3 组件中的 URL 发送参数【英文标题】:Issue with router.php and send parameters via URL in joomla3 component 【发布时间】:2014-06-05 16:20:39 【问题描述】:我设计了一个joomla3组件...
我想通过 URL 向组件发送一些参数。
我为这个组件链接了一个菜单。所以我通过这个地址访问这个组件:
http://examle.com/tag
我有 3 个参数:
年
月
一天
示例: http://examle.com/tag/2014/12/19
这是我的 router.php
<?php
defined('_JEXEC') or die ;
function BahaediniBuildRoute(&$query)
$segments = array();
$app = JFactory::getApplication();
$menu = $app->getMenu();
$params = JComponentHelper::getParams('com_bahaedini');
$advanced = $params->get('sef_advanced_link', 0);
if(isset($query['year']))
$segments[] = $query['year'];
unset( $query['year'] );
if(isset($query['month']))
$segments[] = $query['month'];
unset( $query['month'] );
if(isset($query['day']))
$segments[] = $query['day'];
unset( $query['day'] );
return $segments;
function BahaediniParseRoute($segments)
$vars = array();
$segments[0]='items';
switch($segments[0])
case 'items':
$vars['view'] = 'items';
if(isset($segments[0]))
$year = explode( '/', $segments[0] );
$vars['year'] = (int)$year[0];
if(isset($segments[1]))
$month = explode( '/', $segments[1] );
$vars['month'] = (int)$month[0];
if(isset($segments[2]))
$day = explode( '/', $segments[2] );
$vars['day'] = (int)$day[0];
break;
return $vars;
?>
所以我想测试一下。我将一些代码放在模型文件夹(items.php)中的 php 文件中:
echo "<br>y:".$_date = urldecode($app->input->getString('year'));
echo "<br>m:".$_date = urldecode($app->input->getString('month'));
echo "<br>d:".$_date = urldecode($app->input->getString('day'));
结果是:
y:0
m:12
d:19
你可以海...'y'的值必须是'2014'但它是'0'!
我该如何解决这个问题?我怎么了?
【问题讨论】:
【参考方案1】:读取您的代码,BahaediniParseRoute()
函数,首先将 $segments[0]
分配给“项目”,然后尝试分解它并从中读取 $year
...它返回“0”,因为您正在投射 @ 987654324@ 为 int,但它包含“项目”。
在分配“项目”之前尝试删除强制转换和 var_dump($segments)(无论如何这没什么意义,为什么要设置它然后在条件循环中测试它?你知道$segments[0]='items'
那么@ 的意义何在987654326@?
【讨论】:
大部分解析似乎都没有必要。 Joomla 已经将其拆分为单独的段(这就是$segments
包含的内容)。应该能够将每个部分设置为您想要的名称:$vars['day'] = (int)$segments[2];
以上是关于router.php 问题并通过 joomla3 组件中的 URL 发送参数的主要内容,如果未能解决你的问题,请参考以下文章
需要Joomla 2.5 自定义组件Router.php 说明