【问题标题】:Joomla Developement :: Probleme with URL RewritingJoomla 开发 :: URL 重写问题
【发布时间】:2013-01-16 04:20:58
【问题描述】:

我正在完成 Joomla 组件的创建,但我遇到了 URL 重写问题。

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

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

对于以下网址 - http://lafoliedesvernis.com/vernitheque/revendeurs/2-printemps-haussmann.html - Joomla 将向我显示具有 ID = 2com_content 的文章,而不是显示具有 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
?>

【问题讨论】:

  • 能否显示调用JRoute::_()的代码

标签: php url joomla rewrite


【解决方案1】:

法语:

Bien j'ai un peu avancé ce qui me permet d'apporter une précision supplémentaire :

il ne s'agit apparemment pas d'un problème de "router", j'ai étudier celui du "com_content", notamment les infos qu'il renvoi (l'array $vars)。

En l'occurrence l'array $vars renvoyé par le "router" du "com_content" est composé de l'index "view" (string), de l'index "id" (int), et de l'索引 "catid" (int) si il y en a une。 J'ai donc fait en sorte que le "router" de mon composant renvoie la meme selected, et ce le cas car si je fais un var_dump de $vars sur la page de destination j'ai bien les données renvoyées qui s'affiche, mais les données chargées sont celles du "com_content", il s'agit bien d'un problème d'extension !! Joomla ne charge pas la bonne extension il ne va pas lire la bonne table... de quoi ca peut venir ?? de l'item ID ??留连菜单??

En cas de besoin je met 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);

英语:

所以我迈出一步,我可以带来一些精度:

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

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

如有必要,我将 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);

非常感谢您的帮助!!谢谢 beaucoup 为 votre 助手!

【讨论】:

    【解决方案2】:

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

    vernitheque/revendeurs/ 指向组件,

    2-printemps-haussmann.html

    标识文章/项目。

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

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

    所以在你的组件中创建一个指向视图的菜单项并给它一个有意义的别名。

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

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

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

    【讨论】:

    • Itemid 在两个页面之间不会丢失。我在出现 com_content 文章的页面中找到了好的“itemid”。
    猜你喜欢
    • 2013-09-28
    • 2013-03-09
    • 2018-04-17
    • 2014-05-14
    • 2013-08-21
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多