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}");
使用する前にパラメータ名の存在をチェックしていません。したがって、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ブロックは、要件と設計に基づいてオプションです。