我设计了一个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;
}?>
所以我想测试一下。我把一些代码放在models文件夹(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"!
我该如何解决这个问题?我怎么了?
读取您的代码,BahaediniParseRoute()
函数,首先将$segments[0]
分配给"items",然后尝试分解它并从中读取$year
…它返回"0",因为您将$year
强制转换为int,但它包含"items"。
在将其分配为"items"之前,请尝试删除强制转换和var_dump($segments)(无论如何,这没有什么意义,为什么要设置它,然后在条件循环中测试它?你知道$segments[0]='items'
,那么switch ... case 'items'
有什么意义?