Joomla Development :: URL重写问题

时间:2013-01-31 22:34:11

标签: php url joomla rewrite

我正在为Joomla创建一个组件,我遇到了URL重写的问题。

我创建了类“router.php”,它由我的组件的基本文件调用,我使用“JRoute”来重写我在SEF中的链接。

问题是Joomla忽略了我的组件rooter并加载了本机组件com_content的内容。

以下网址 - http://lafoliedesvernis.com/vernitheque/revendeurs/2-printemps-haussmann.html - Joomla将向我展示com_content ID = 2的{​​{1}}文章,而不是显示我ID = 2

组件的记录

我觉得我已经达到了目标,但是对于某些我无法看到的代码。是什么让Joomla忽略我的路由器并使用com_content路由器?

以下是我的路由器的代码:

<?php
defined ('_JEXEC') or die ('Restricted access');

   VernithequeBuildRoute function (& $ query)
   {
     $ Segments = array ();

     if (isset ($ query ['view'])) {
       $ Segments [0] = $ query ['view'];
         unset ($ query ['view']);
      };

     if (isset ($ query ['id'])) {
           $ Segments [1] = $ query ['id'];
         unset ($ query ['id']);
      };

     return $ segments;
   } / / End function VernithequeBuildRoute

   VernithequeParseRoute function ($ segments)
   {
     $ Vars = array ();

     if (count ($ segments)> 0) {

         $ Vars ['view'] = $ segments [0];
       switch ($ vars ['view']) {
         case 'all':
             $ Catid = explode (':', $ segments [1]);
             $ Vars ['catid'] = (int) $ catid [0];
          break;
         case 'category':
             $ Vars ['id'] = (int) $ segments [1];
          break;
         case 'brand':
             $ Id = explode (':', $ segments [1]);            
             $ Vars ['id'] = (int) $ id [0];       
          break;
         case 'resellers':
             $ Id = explode (':', $ segments [1]);            
             $ Vars ['id'] = (int) $ id [0];       
          break;
         case 'varnish':
             $ Id = explode (':', $ segments [1]);            
             $ Vars ['id'] = (int) $ id [0];       
          break;
         case 'configure':
             $ Id = explode (':', $ segments [1]);            
             $ Vars ['id'] = (int) $ id [0];       
          break;
         box 'panel':
             $ Id = explode (':', $ segments [1]);            
             $ Vars ['id'] = (int) $ id [0];       
          break;

       };

     Else {}
       $ Vars ['view'] = $ segments [0];
     } / / End count (segments) statement

     return $ vars;
   } / / End VernithequeParseRoute
?>

2 个答案:

答案 0 :(得分:0)

法语:

Bien j'ai un peuavancécequi me permet d'apporteruneprécisionsupplémentaire:

il ne s'agit apparemment pas d'unproblèmede“router”,j'aiétudierceluidu“com_content”,notamment les infos qu'il renvoi(l'array $ vars)。

En l'occurrence l'array $varsrenvoyéparle“router”du“com_content”estcomposédel'index“view”(string),de l'index“id”(int),et de l' index“catid”(int)si il y en a une。 J'AI donc既成事实连接sorte阙乐“路由器”德周一composant renvoie LA即使得到选择,等CE乐CAS汽车SI乙脑FAIS未去的var_dump $瓦尔河畔拉页去目的地J'AI边莱最近搜索renvoyées魁s'affiche, maislesdonnéeschargéessontcelles du“com_content”,il s'agit bien d'unproblèmed'extend!! Joomla ne charge pas la bonne extension il ne va pas lire la bonne table ... de quoi ca peut venir ?? de l'项目ID ?? du lien de menu ??

En cas de besoin je meet le code pour JRoute:

// Not Working   
$link = JRoute::_('index.php?view='.$type.''.$catid.'&id='. $slug);
// also try this but Not Working to   
$link = JRoute::_('index.php?option=com_vernitheque&view='.$type.''.$catid.'&id='. $slug);

ENGLISH:

所以我迈出了一步,我可以带来一些准确性:

显然这不是“路由器”问题,我对“com_content”路由器提出了质疑,包括参考信息($ vars数组)。

在这种情况下,“com_content”的“route”返回的$ vars数组由索引“view”(字符串),索引“id”(int)和索引“catid”(int)组成如果有的话。所以我确保我的组件中的“路由器”返回相同的东西,并且这种情况因为如果我在登录页面上执行了$ vars的var_dump,我返回了出现的数据,但加载的数据是“com_content”的数据,这确实是一个延伸问题! Joomla没有加载正确的扩展名,它不会读取正确的表...所以可能会出现什么?商品ID ??菜单链接??

如果有必要,我把JRoute的代码:

// Not Working   
    $link = JRoute::_('index.php?view='.$type.''.$catid.'&id='. $slug);
    // also try this but Not Working to   
    $link = JRoute::_('index.php?option=com_vernitheque&view='.$type.''.$catid.'&id='. $slug);

非常感谢你的帮助!! Merci beaucoup pour votre aide !!

答案 1 :(得分:0)

您当前的SEF网址由两部分组成:

vernitheque / revendeurs / 指向该组件,

<强> 2-春天-haussmann.html

标识文章/项目。

Joomla根据菜单项别名创建第一部分,而不是组件名称! (除非你的组件没有关联的菜单项,在这种情况下你会看到/ component / content)

所以检查你的菜单,/ vernitheque应该是第一级菜单项的别名,并且可能revendeurs是某些com_content视图的第二级。

因此,创建一个指向组件中视图的菜单项,并为其指定一个有意义的别名。

您的SEF网址现在应该有新别名作为前缀,路由应该重新开始工作。

但是,如果生成的别名仍然指向Joomla com_content,这将非常奇怪:Joomla只允许使用唯一的顶级别名。

我没有深入研究你的代码,但从你描述的行为来看,这个问题似乎超出了它的范围(它调用了错误的组件,没有传递错误的参数)