コンポーネントと Joomla の SEF リンクに問題があります。JRequest::getVar
元の URL ( で指定JRoute::_
)から変数を取得するために使用しようとしています。
私のrouter.phpファイルは次のようになります。
function PortfolioBuildRoute(&$query)
{
$segments = array();
if (isset($query['category'])) {
$segments[] = $query['category'];
unset($query['category']);
}
if (isset($query['subcategory'])) {
$segments[] = $query['subcategory'];
unset($query['subcategory']);
}
return $segments;
}
function PortfolioParseRoute($segments)
{
$vars = array();
$count = count($segments);
if ($count) {
$count--;
$segment = array_shift($segments);
if (is_numeric($segment)) {
$vars['subcategory'] = $segment;
} else {
$vars['category'] = $segment;
}
}
if ($count) {
$count--;
$segment = array_shift($segments) ;
if (is_numeric($segment)) {
$vars['subcategory'] = $segment;
}
}
return $vars;
}
私がエンコードしている URL はもともと次のように見え
index.php?option=com_portfolio&category=x&subcategory=y
、JRoute::_
それを に変換し/portfolio/x/y
ます。今必要なのは、URL がエンコードされた後に変数xとyを取得する方法です。
- - 編集 - -
わかりましたので、router.php ファイルの ParseRoute 部分を次のように変更しました。
function PortfolioParseRoute($segments)
{
$vars = array();
$vars['category'] = str_replace(":", "-", $segments[0]);
$vars['subcategory'] = str_replace(":", "-", $segments[1]);
return $vars;
}
router.php ファイルの理解が少し深まったように感じます。JRoute が URL のハイフンをコロンに変換することがわかりました。なぜそれが貧弱なハイフンを選ぶのか、よくわかりません.JRouteのいじめっ子です。URL でアンダースコアを使用することもできますが、それは正常に機能しますが、ハイフンはアンダースコアよりも SEO に優れています。
これを整理するために、ParseRoute の各セグメントで str_replace を使用しました。
これが正しい標準的な方法であるかどうかはわかりませんが、私は Joomla と PHP の初心者なので、別の方法でアドバイスされるまで実行する必要があります。
少なくともそれは機能します!
:)