W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
joomla中的路由系統(tǒng)的可以創(chuàng)建SEF(搜索引擎友好)的URL。從 1.5 版開始,Joomla!能夠創(chuàng)建和解析任何格式的URL,包括 SEF URL.這不依賴于 Web 服務(wù)器 URL 重寫功能,只要PHP開始mod_rewrite模塊,即使服務(wù)器類型不是Apache也是可以。SEF URL 遵循一定的固定模式,但用戶可以為 URL 的每個段定義一個簡短的描述性文本(別名)。
一般,SEF URL 的本地部分(域名之后的部分)稱為路由(route)。創(chuàng)建和處理 SEF URL 稱為路由(routing),相關(guān)代碼稱為路由器(router)。
在Joomla中,每一個組件負責(zé)處理自己的SEF URL,如果你是組件開發(fā)者,為了支持SEF URL,你就需要創(chuàng)建自己組件的router.
假設(shè)您遵循標(biāo)準(zhǔn)開發(fā)實踐,你的組件現(xiàn)在使用的是系統(tǒng)的URL模式,類似于
|
現(xiàn)在你的目標(biāo)是將這個URL轉(zhuǎn)換為下面的形式:
|
為了實現(xiàn)這個目標(biāo),作為開發(fā)人員,你現(xiàn)在需要做兩件事:
1,告訴系統(tǒng)你當(dāng)前需要轉(zhuǎn)換的URL鏈接
2,告訴系統(tǒng)如何轉(zhuǎn)換
如何告訴系統(tǒng)當(dāng)前需要轉(zhuǎn)換的URL.
在實際上是非常困難并且低效的讓joomla系統(tǒng)自主計算哪些文本是URL。為此,開發(fā)者在生成URL的時候需要手動的調(diào)用 \Joomla\CMS\Router\Route::_()方法。示例如下:
|
為了方便,開發(fā)者可以省略掉option和Itemid這兩個參數(shù)。option參數(shù)默認為當(dāng)前正在被執(zhí)行組件的名稱,Itemid參數(shù)默認為菜單項的ID.省略后如下:
|
一般來說,您應(yīng)該只將其應(yīng)用于用戶和/或搜索引擎能夠看到的 URL中,對于系統(tǒng)使用的URL是不需要轉(zhuǎn)換的,比如重定向的URL。
如果用戶在后臺的全局射中關(guān)閉了啟用SEF URLS的選項,\Joomla\CMS\Router\Route::_() 將不會進行轉(zhuǎn)換,直接輸出原始的URL.
下一步,你需要做的就是寫一個路由器。路由器的寫法如下;
1,在組件的根目錄下創(chuàng)建一個router.php的文件。如:/components/com_yourcomponent/router.php
2,編輯router.php文件,在里面定義一個類,類的名稱為[組件的名稱]Router。如(com_content組件則類名為 ContentRouter),并且這個類必須繼承 Joomla\CMS\Component\Router\RouterInterface 。
3,在類中需要實現(xiàn)3個方法,分別是build(&$query),parse($segments),preprocess($query)。
build(&$query) 的功能是 將 URL 參數(shù)數(shù)組轉(zhuǎn)換為將生成 SEF URL 的segment段數(shù)組。轉(zhuǎn)換的工作流程如下:
\Joomla\CMS\Router\Route::_
, 【生成】$query = array('view' => 'article', 'id' => 1, 'catid' => 20)
[componentname]Router::build
【生成】$segments = array(20, 1);
parse($segments) 的功能是 將 segment(段)數(shù)組參數(shù)數(shù)組轉(zhuǎn)換URL參數(shù) 。轉(zhuǎn)換的工作流程如下:
【生成】$segments = array(20, 1);
[componentname]Router::parse
【生成】$query = array('view' => 'article', 'id' => 1, 'catid' => 20)
|
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: