最初に、コンポーネントフォルダー(/components/com_catalog/router.php)にrouter.phpを作成する必要があります。
URLを生成する関数を追加します:
function catalogBuildRoute(&$query) { $segments = array(); if (isset($query['view'])) { $segments[] = $query['view']; unset($query['view']); } if (isset($query['id'])) { $segments[] = $query['id']; unset($query['id']); }; return $segments; }
2番目の関数は、URLをそのコンポーネント部分に解析します。
function catalogParseRoute($segments) { $vars = array(); switch($segments[0]) { case 'catalog': $vars['view'] = 'catalog'; break; case 'item': $vars['view'] = 'item'; $id = explode(':', $segments[1]); $vars['id'] = (int) $id[0]; break; } return $vars; }
コンポーネントでURLを生成する:
JRoute :: _( 'index.php?View = item&id ='。$ Row-> id);
これで、コンポーネントはフォーム/カタログ/アイテム/ 1のリンクを理解します
これはドキュメントの例です。 より興味深いタスクのために変更します。
ユーザーが指定したURLに置き換える必要があります。
このURLはディレクトリテーブルに保存されます。
要素をプルする別の関数を追加します。
function getCatalogItemByRow($row, $value){ $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id, url'); $query->from($db->quoteName('#__catalog')); $query->where($db->quoteName($row)." = ".$db->quote($value)); $db->setQuery($query); return $db->loadRow(); }
したがって、解析関数は次のようになります。
function catalogParseRoute($segments) { $vars = array(); $vars['view'] = 'catalog'; if($segments[0]!="catalog"){ $item = getCatalogItemByRow("url",$segments[0]); if(isset($item['1']) && $item['1']) { $vars['view'] = 'item'; $vars['id'] = (int) $item['0']; } } return $vars; }
リンク/カタログ/ test_aliasをクリックすると、目的のページが開きます。
URLを生成する関数は次のようになりました。
function catalogBuildRoute(&$query) { $segments = array(); unset($query['view']); if (isset($query['id'])) { $id = (int) $query['id']; if($id){ $item = getCatalogItemByRow("id",$id); $segments[] = $item['1']; unset($query['id']); } } return $segments; }
JRoute :: _( 'index.php?View = item&id = 1'); 必要なurl / catalog / test_aliasを提供します。
よろしくお願いします!