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

时间:2014-04-21 15:14:39

标签: php joomla components joomla3.0

我设计了一个joomla3组件......

我想通过网址向组件发送一些参数。

我链接了这个组件的菜单。所以我通过这个地址访问这个组件:

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

你可以海......价值&#39; y&#39;必须是2014年&#39;但它是&#39; 0&#39;!

我该如何解决这个问题?我错了什么?

1 个答案:

答案 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'是什么意思?