我设计了一个joomla3组件......
我想通过网址向组件发送一些参数。
我链接了这个组件的菜单。所以我通过这个地址访问这个组件:
我有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
你可以海......价值&#39; y&#39;必须是2014年&#39;但它是&#39; 0&#39;!
我该如何解决这个问题?我错了什么?
答案 0 :(得分:2)
阅读您的代码BahaediniParseRoute()
功能,首先您将$segments[0]
分配给&#39;项目&#39;然后您尝试将其展开并从中读取$year
...它正在回归&#39; 0&#39;因为您将$year
转换为int,但它包含&#39; items&#39;。
尝试删除演员表和var_dump($ segments),然后再分配它们&#39; items&#39; (这没什么意义,为什么设置它然后在条件循环中测试它?你知道$segments[0]='items'
那么switch ... case 'items'
是什么意思?