[英]Advance url sef for joomla custom component
嗨,我用谷歌搜索房子,但没有解决方案...
我在joomla3上开发了一个组件
使用joomla sef,组件的地址是这样的:
orginal address: domain.com/index.php?option=com_bahaedini&keyword=22&year=2005&month=1&day=4
使用菜单: domain.com/menu_name/view_name/keyword/2005/1/4
不带菜单: domain.com/component/bahaedini/view_name/keyword/2005/1/4
我最喜欢的域名是: domain.com/keyword/2005/1/4
但是至少如何删除URL中的“ view_name”或“ component / bahaedini”?
我可以通过hatccess删除它,但无法将参数发送给组件...
我希望至少具有以下格式:
domain.com/keyword/2005/1/4
domain.com/menu_name/keyword/2005/1/4
要么
domain.com/view_name/keyword/2005/1/4
domain.com/bahaedini/keyword/2005/1/4
<?php
defined('_JEXEC') or die ;
//http://127.0.0.1/archives?option=com_bahaedini&view=items&date=2014-12-9
function BahaediniBuildRoute(&$query)
{
$segments = array();
if(isset($query['view']))
{
$segments[] = $query['view'];
unset( $query['view'] );
}
if(isset($query['keyword']))
{
$segments[] = $query['keyword'];
unset( $query['keyword'] );
}
if(isset($query['year']))
{
$segments[] = $query['year'];
unset( $query['year'] );
}
if(isset($query['month']))
{
$segments[] = $query['month'];
unset( $query['month'] );
}
if(isset($query['day']))
{
$segments[] = $query['day'];
unset( $query['day'] );
}
return $segments;
}
//http://127.0.0.1/archives?option=com_bahaedini&view=items&date=2014-12-9
function BahaediniParseRoute($segments)
{
$vars = array();
switch($segments[0])
{
case 'items':
$vars['view'] = 'items';
if(isset($segments[2]))
{
$year = explode( ':', $segments[2] );
$vars['year'] = (int)$year[0];
}
if(isset($segments[3]))
{
$month = explode( ':', $segments[3] );
$vars['month'] = (int)$month[0];
}
if(isset($segments[4]))
{
$day = explode( ':', $segments[4] );
$vars['day'] = (int)$day[0];
}
if(isset($segments[1]))
{
$search = explode( ':', $segments[1] );
$vars['keyword'] = (int)$search[0];
}
break;
}
return $vars;
}?>
设置为$segments
都会显示在网址中。 因此,此$segments[] = $query['view'];
将视图添加到URL。 由于解析器会自动设置视图,因此仍要在构建函数中取消设置视图,但不要将其压入$segments
:
function BahaediniBuildRoute(&$query)
{
$segments = array();
if(isset($query['view']))
{
unset( $query['view'] );
}
...
自然,您可能必须调整解析器,因为现在段的数量将有所不同,因此您将需要不同的索引值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.