質問: $this->translate('com_babelu_products_dl_not_authorised'); $this->setredirect('index.php?itemid=101', $msg, 'warning'); return false; } しかし、それはうまくいきませんでした。ルートにアイテムidを追加したhttp://mysite.com/previous-menu-item-alias?itemid=101 これは、id 101のメニュー項目に関連付けられたビューもロードしませんでした。ルート全体を指定する必要がありますか? i.e. #__menusテーブルからリンクを検索し、その値でjrouteを呼び出しますか?誰かがこれで経験を持っているなら、私は本当にどんな情報にも感謝します。----編集---これを行う前に、#__ menusテーブルを直接クエリしてリンク値を取得し、それをjrouteにプッシュしました。ただし、直接的な依存関係を作成するため、テーブルに直接クエリを実行するという考えは好きではありません。私が本当に知りたいのは、#__ menusテーブルに触れずにリンク値を取得する方法、またはitemidだけを使用してメニュー項目に移動する方法があるかどうかです。
回答: はい。答えを見つけました。まず、#__menusテーブルをクエリせずにアイテム情報を取得するには、次のコードを使用します。$app = jfactory::getapplication(); $menu = $app->getmenu(); $item = $menu->getitem($itemid); 適切なルートを使用したいので、リダイレクトは少し難しいですが、ルートをjrouteに送信しただけでは、jrouteが現在のアクティブなアイテムにurlコンテンツを追加するだけなので、エラーになります。以下の例はコントローラーから呼び出されています。例: //current url = http://mysite.com/product //$item->route = my-page $this->setredirect(jroute::_($item->route)); $this->redirect(); //resulting url = http://mysite.com/product/my-page もちろん、このルートが存在しないため、これは404をスローします。 「製品」は私のコンポーネントの一部です「マイページ」はcom_content記事アイテムです。ただし、uriを追加することでこれを回避できます。$route = $item->route; if((int)$item->home === 1)// its the home menu item, so clear the route { $route = ''; } $this->setredirect(juri::base().$route); $this->redirect(); // resulting url = http://mysite.com/my-page これを$item->linkと$item->routeでテストしたところ、同じように機能するようです。サイトが検索エンジン向けのurlを使用していない場合に備えて、おそらくリンクを使用する方が良いでしょう。これが役に立てば幸いです!