web-dev-qa-db-ja.com

Joomla! 3.6.4カスタムコンポーネントのrouter.php

Joomlaのカスタムコンポーネントを開発しています。初めて、私はrouter.phpの作成に行き詰まっています。私はすでに Joomla!のドキュメント を読みましたが、何をすべきかを明確に理解していません。

実際、私のコンポーネントの単一のビューへのリンクは次のとおりです。

index.php?option = com_layadvisory&view = layadvisory&id = {$ dataItem-> id}

しかし、ユーザーにORを表示してほしい:

www.mysite.com/Lay-Advisory/1

または:

www.mysite.com/Lay-Advisory/person/1

1は選択した人物のIDです。 build(&$ query)関数とparse($ segments)関数を作成する必要があることはわかっていますが、方法がわかりません。私を正しい道に導くことができる人はいますか?ありがとうございました。

追伸$ dataItem-> idは、(foreachループを介して)$ this-> dataから取得されます。

UPDATE:

私はこの結果をどうにかして得ました:

www.mysite.com/Lay-Advisory/id-Name-of-the-person

しかし、コンポーネントの詳細/単一ページに移動すると、この通知が表示されます。

注意:未定義のインデックス:components\com_layadvisory\router.phpの名前

私のrouter.php

 * @copyright 2016 RCPSG 
 * @license GNU General Public License version 2以降; LICENSE.txtを参照
 */
 //直接アクセスなし
 defined( '_ JEXEC')またはdie; 
 
 JLoader :: registerPrefix( 'Layadvisory'、JPATH_SITE。 '/ components/com_layadvisory /') ; 
 
/** 
 *クラスLayadvisoryRouter 
 * 
 * @以降3.3 
 */
クラスLayadvisoryRouterはJComponentRouterBase 
 {
 /**
を拡張します* URLのビルドメソッド
 *このメソッドはクエリパラメータをより人間に変換することを目的としています
 *読み取り可能なフォーム。SEFモードがオンになっている場合にのみ実行されます。
 * 
 * @param array&$ query URL引数の配列
 * 
 * @return配列後続のURLの組み立てに使用するURL引数。
 * 
 * @since 3.3 
 */
 public function build(&$ query) 
 {
 $ segments = array(); 
 
 if(isset($ query ['view'])){
 // $ segments [] = $ query ['view']; 
 unset($ query ['view']); 
 
} 
 
 if(isset($ query ['id']))
 {
 $ segments [] = $ query ['id']。 "-"。$ query ['name']; 
 unset($ query ['id']); 
 unset($ query ['name']); 
} 
 return $ segments; 
} 
 
 /**
 * URLの解析メソッド
 *このメソッドは、人間が読めるURLを
 *クエリパラメータに変換するためのものです。 SEFモードがオンになっている場合にのみ実行されます。
 * 
 * @param array&$ segments解析するURLのセグメント。
 * 
 * @戻り配列アプリケーションが使用するURL属性。
 * 
 * @since 3.3 
 */
 public function parse(&$ segments)
 {
 $ vars = array(); 
 $ vars ['view'] = "layadvisory"; 
 $ aux = explode( ":"、$ segments [0]); 
 $ vars ['id'] = $ aux [0]; 
 return $ vars; 
 
} 
}

JRouteリンクは:

$ link = JRoute :: _( "index.php?option = com_layadvisory&view = layadvisory&id = {$ dataItem-> id}&name = {$ dataItem-> name}");
1
OlafGizursson

使用する前にパラメータ名の存在をチェックしていません。したがって、PHPは通知メッセージを表示します。コードを

if(isset($query['id']) && isset($query['name']))                               
{
  $segments[] = $query['id']."-".$query['name'];
  unset($query['id']);
  unset($query['name']);  
}
else if(isset($query['id']))                               
{
  $segments[] = $query['id'];
  unset($query['id']);
}

elseブロックは、要件と設計に基づいてオプションです。

1
Nagarjun