使用router.php发出问题,并通过joomla3组件中的URL发送参数


Issue with router.php and send parameters via URL in joomla3 component

我设计了一个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'有什么意义?