私はこれがどのように機能するかを理解するためにしばらく静かに過ごしてきました.
router.php の助けを借りて Joomla で URL をカスタマイズする方法を理解しています - 少なくとも私はそう思いました。このようなものを作成するのは簡単です
domain.com/country/id
例:
domain.com/germany/12
ただし、id が都市を表していることはわかりません。したがって、この例では、ID 12 の都市がベルリンであると仮定します。
したがって、私のカスタム コンポーネント (名前: 国) では、次のように表示されることを望みます。
for view=countries (第 1 レベル)
domain.com/country
すなわち:
domain.com/germany
view=city (第 2 レベル) の場合
domain.com/country/city-id
すなわち:
domain.com/country/berlin-12
(または単に: domain.com/country/berlin - ただし、カスタム コンポーネントが機能するには ID が必要だと思います - ID を読み取って何をすべきかを知るページ上の関連モジュール)
私はこれまでに何を持っていますか:
function CountriesBuildRoute(&$query)
{
$segments = array();
//if(isset($query['view'])) {
// $segments[] = $query['view'];
// unset( $query['view'] );
//}
if (isset($query['task'])) {
$segments[] = implode('/',explode('.',$query['task']));
unset($query['task']);
}
if (isset($query['id'])) {
$segments[] = $query['id'];
unset($query['id']);
}
if (isset($query['name'])) {
$segments[] = $query['name'];
unset($query['name']);
}
unset( $query['view'] );
return $segments;
}
function CountriesParseRoute( $segments )
{
$vars = array();
$app =& JFactory::getApplication();
$menu =& $app->getMenu();
$item =& $menu->getActive();
// Count segments
$count = count( $segments );
//Handle View and Identifier
switch( $item->query['view'] )
{
case 'countries':
if($count == 1) {
$vars['view'] = 'city';
}
break;
case 'city':
$id = explode( ':', $segments[$count-2] );
$name = explode( ':', $segments[$count-1] );
$vars['id'] = $id[0].'-'.$name;
break;
}
return $vars;
}
ビューの国から都市ページを呼び出す方法は次のとおりです。
<a href="<?php echo JRoute::_('index.php?option=com_countries&view=city&id=' . (int)$item->id) .'&name='. $item->city_name; ?>">
誰かが助けることができれば素晴らしいだろう! 乾杯