国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Joomla中的Task 和view 深入學(xué)習(xí)

2019-11-15 02:15:02
字體:
供稿:網(wǎng)友
Joomla中的Task 和view 深入學(xué)習(xí)

[本文轉(zhuǎn)自:夢溪筆記]

622762d0f703918f057e8039503d269758eec492

Joomla是一個(gè)優(yōu)秀的CMS系統(tǒng),她可以讓你快速的完成一個(gè)網(wǎng)站的建設(shè),她提供組件,模塊,模板能夠滿足你大部分的網(wǎng)站需求。而組件在其中舉足輕重。

一、基本知識

組件(component ) 用于顯示頁面的主要數(shù)據(jù)。Joomla的組件采用的是MVC架構(gòu)設(shè)計(jì)。 在一個(gè)頁面請求產(chǎn)生時(shí),其URL中可能包括task, view, layout等信息。我在這里就是要討論這個(gè)task和view. 一般URL中如果含有task就不會(huì)含有view, 這里因?yàn)閖oomla認(rèn)為task就完成一個(gè)特定的任務(wù),比如說數(shù)據(jù)庫操作,有效性驗(yàn)證等, 而view是負(fù)責(zé)顯示數(shù)據(jù)。通常的設(shè)計(jì)是task里完成任務(wù)處理后,會(huì)調(diào)用setRedirect方法引導(dǎo)向一個(gè)view來顯示數(shù)據(jù)。其實(shí)在joomla里,如果URL中沒有指定task的話,會(huì)默認(rèn)task為display。

二、問題

在項(xiàng)目中,需要在頁面的meta數(shù)據(jù)里包含Open graphic PRotocol數(shù)據(jù)。Open graphic protocol 用于給社交網(wǎng)絡(luò)提供要分享的數(shù)據(jù)描述。 如果你的頁面是通過task來完成的,然后 在task里通過setRedirect根據(jù)數(shù)據(jù)跳轉(zhuǎn)到不同的view進(jìn)行授權(quán)驗(yàn)證, 然后驗(yàn)證通過后顯示數(shù)據(jù)頁面的話,你可能會(huì)遇到這種問題:你需要分享這個(gè)頁面,你在這個(gè)頁面的meta數(shù)據(jù)里添加了Open graphic protocol 數(shù)據(jù),你希望分享到facebook, google+等社交網(wǎng)站時(shí),你會(huì)發(fā)現(xiàn)在分享頁面顯示的數(shù)據(jù)和圖片并不是你想要顯示頁面的數(shù)據(jù)。

三、解決方案

上面的問題是因?yàn)镺pen graphic protocol 數(shù)據(jù)獲取并不支持跳轉(zhuǎn),如果遇到跳轉(zhuǎn),一般都會(huì)去網(wǎng)站首頁拾取數(shù)據(jù),而這并不是我們想要的。引起這個(gè)問題就是setRedirect。 setRedirect的原理是發(fā)送給瀏覽里的HTML頭中包含了跳轉(zhuǎn)指令。而解決上面的問題的方法是不使用setRedirect, 而是使用display. 每一個(gè)JControllerLegacy都有一個(gè)display方法,你只要設(shè)置input里的view, layout, 以及其他你要傳遞過去的數(shù)據(jù),然后調(diào)用display方法就可。

下面是示例代碼:

    /**     * 內(nèi)部跳轉(zhuǎn),用于代替setRedirect. 為什么要這樣子做呢?     * 因?yàn)?setRedirect他會(huì)發(fā)送一個(gè)http頭到瀏覽器,讓瀏覽     * 進(jìn)行跳轉(zhuǎn),這樣一來就多了一個(gè)網(wǎng)絡(luò)請問, 這是其一。最     * 為主要的是setRedirect在某些不支持瀏覽器redirect的情況     * 下達(dá)不到效果,例如:open graphic protocal     *      * @param type $view 要顯示的view     * @param type $layout 要顯示的layout, 默認(rèn)為NULL     */    protected function internalRedirect($view, $layout=null){        $this->input->set("view", $view);        $this->input->set("layout", $layout);        return $this->display();    }        public function checkAvailable(){        //其他的業(yè)務(wù)代碼        $this->input->set('tmpl', 'doexam');        return $this->internalRedirect("doexam", $layout);    }

上面的代碼是寫在你的Controller里的。函數(shù)internalRedirect通過設(shè)置$input(這個(gè)input是指url的輸入?yún)?shù)) 中的view, layout,然后直接調(diào)用JControllerLegecy的display方法來顯示頁面。

在checkAvailable方法中,在調(diào)用internalRedirect之前,還設(shè)置了其他 view需要的參數(shù)。

夢溪的一個(gè)朋友說他在做他的一個(gè)網(wǎng)站時(shí)遇到了這樣的問題,我們討論并分析了Joomla的實(shí)現(xiàn)代碼,發(fā)現(xiàn)其實(shí)這個(gè)解決挺容易, 只要你熟悉Joomla組件開發(fā)。如果你有問題,可以找我一起交流

希望本文能夠解決你所遇到的問題。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临西县| 双峰县| 尤溪县| 南澳县| 南昌县| 积石山| 洪泽县| 镇宁| 休宁县| 佳木斯市| 中宁县| 江源县| 彭水| 瑞安市| 乡城县| 中西区| 乌拉特前旗| 安新县| 秀山| 莱州市| 铜山县| 镇平县| 冀州市| 习水县| 微山县| 隆化县| 洞头县| 唐河县| 阳东县| 贵南县| 印江| 西贡区| 富平县| 滦南县| 德清县| 昔阳县| 保靖县| 隆尧县| 浦江县| 商城县| 西昌市|