0

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

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

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

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

2 回答 2

0

法语 :

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'index "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 助手!

于 2013-02-01T08:51:29.593 回答
0

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

vernitheque/revendeurs/ 指向组件,

2-printemps-haussmann.html

标识文章/项目。

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

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

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

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

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

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

于 2013-02-01T20:55:47.837 回答