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 3.0 组件参数存储在哪里?

Joomla 3 Widgetkit 未显示在组件菜单中

需要Joomla 2.5 自定义组件Router.php 说明

Joomla 3 MVC 平台 12.1 自定义组件模板覆盖

Joomla 3以编程方式为组件设置默认模板

Magento2:在Router.php Submiting POST表单Redict问题