joomla 自定义组件的高级 url sef
Posted
技术标签:
【中文标题】joomla 自定义组件的高级 url sef【英文标题】:Advance url sef for joomla custom component 【发布时间】:2014-04-02 17:00:02 【问题描述】:您好,我搜索了房子,但没有解决方案...
我在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;
?>
【问题讨论】:
您必须拥有组件,因为您无法控制关键字或 bahaedini 是用作菜单别名还是其他组件中的别名,因此组件是一个保留字,可防止出现两个通过制作组件/bahaedini 具有相同 url 的页面。您应该做的是创建一个菜单项,并为您的组件编写一个自定义路由器,这样您就没有视图名称。 感谢您的回答。可以给我更多信息吗?...我用 router.php 代码编辑了我的问题...如何更改它以隐藏视图名称? 【参考方案1】:任何设置为$segments
的内容都会出现在网址中。所以这个$segments[] = $query['view'];
将视图添加到 url。由于你的解析器会自动设置视图,所以仍然在构建函数中取消设置视图,但不要将其推送到$segments
:
function BahaediniBuildRoute(&$query)
$segments = array();
if(isset($query['view']))
unset( $query['view'] );
...
当然,你可能需要调整你的解析器,因为现在段的数量会不同,所以你需要不同的索引值。
【讨论】:
太棒了...谢谢....我理解 $segments 规则,并且通过 ParseRoute 函数的一些更改,我可以解决我的问题...:)以上是关于joomla 自定义组件的高级 url sef的主要内容,如果未能解决你的问题,请参考以下文章