0

Joomla のコンポーネントの作成を最終段階にしていますが、URL の書き換えに問題があります。

コンポーネントのベース ファイルによって呼び出される "router.php" クラスを作成し、"JRoute" を使用して SEF でリンクを書き換えます。

問題は、Joomla がコンポーネント ルートターを無視し、ネイティブ コンポーネントのコンテンツをロードすることですcom_content

次の URL - http://lafoliedesvernis.com/vernitheque/revendeurs/2-printemps-haussmann.html - Joomla は、持っている私のコンポーネントの記録を表示するのではなく、com_content持っている人の記事を表示しますID = 2ID = 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

現在の SEF URL は、次の 2 つの部分で構成されています。

vernitheque/revendeur/ はコンポーネントを指し、

2-printemps-haussmann.html

記事/アイテムを識別します。

Joomla は、コンポーネント名ではなく、メニュー項目のエイリアスに基づいて最初の部分を作成します! (コンポーネントにメニュー項目が関連付けられていない場合を除きます。その場合、/component/content が表示されます)

メニューを確認してください。/vernitheque は第 1 レベルの menuitem のエイリアスである必要があり、おそらく revendeurs は一部の com_content ビューの第 2 レベルです。

したがって、コンポーネント内のビューを指すメニュー項目を作成し、それに意味のあるエイリアスを付けます。

SEF URL に新しいエイリアスがプレフィックスとして含まれるようになり、ルーティングが再び機能し始めるはずです。

しかし、生成されたエイリアスがまだ Joomla com_content を指している場合、これは非常に奇妙です: Joomla は一意のトップレベルのエイリアスのみを許可します。

私はあなたのコードを深く調べていませんが、あなたが説明した動作から、問題はその範囲外にあるようです (間違ったコンポーネントを呼び出しており、間違ったパラメーターを渡していません)。

于 2013-02-01T20:55:47.837 に答える
0

フランス語 :

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

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 y en a une. J'ai donc fait en sorte que le "router" de mon composant renvoie la même choose, 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);

英語 :

だから私はステップを取得し、いくつかの精度をもたらすことができます:

どうやらそれは「ルーター」の問題ではないようです。参照情報($ vars配列)を含め、「com_content」ルーターを調べました。

この場合、「com_content」の「route」によって返される $vars 配列は、インデックス「view」(文字列)、インデックス「id」(int)、およびインデックス「catid」(int)(存在する場合)で構成されます。 1。したがって、コンポーネントの「ルーター」が同じものを返すことを確認しました。これは、ランディング ページで $ 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 !!

于 2013-02-01T08:51:29.593 に答える