我一直在安静地研究它是如何工作的——所以想在这里问这个问题。
我确实了解如何在 router.php 的帮助下在 Joomla 中自定义 URL - 至少我是这么认为的。创建这样的东西很简单
domain.com/country/id
例子:
domain.com/germany/12
但是,您不会知道 id 代表城市。所以在这个例子中,假设 id 为 12 的城市是柏林。
因此,对于我的自定义组件(名为:国家),我希望显示以下内容:
视图=国家(第一级)
domain.com/country
IE:
domain.com/germany
对于视图=城市(第 2 级)
domain.com/country/city-id
IE:
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; ?>">
如果有人可以提供帮助,那就太棒了!干杯