首頁 後端開發 php教程 Joomla中的Task 和view 深入學習

Joomla中的Task 和view 深入學習

Aug 08, 2016 am 09:23 AM
joomla task view

[本文轉自:夢溪筆記]

Joomla 是一個優秀的CMS系統,她可以讓你快速的完成一個網站的建設,她提供組件,模組,模板能夠滿足你大部分的網站需求。而組件在其中舉足輕重。

一、基本知識

元件(component ) 用來顯示頁面的主要資料。 Joomla的元件採用的是MVC架構設計。 當一個頁面請求產生時,其URL中可能包括task, view, layout等資訊。我在這裡就是要討論這個task和view. 一般URL中如果含有task就不會含有view, 這裡因為joomla認為task就完成一個特定的任務,比如說資料庫操作,有效性驗證等, 而view是負責顯示數據。通常的設計是task裡完成工作處理後,會呼叫setRedirect方法引導向一個view來顯示資料。其實在joomla裡,如果URL中沒有指定task的話,會預設task為display。

二、問題

在專案中,需要在頁面的meta資料裡包含Open graphic protocol 資料。 Open graphic protocol 用於提供社交網路要分享的資料描述。 如果你的頁面是透過task來完成的,然後在task裡透過setRedirect根據資料跳到不同的view進行授權驗證, 然後驗證透過後顯示資料頁面的話,你可能會遇到這種問題:你需要分享這個頁面,你在這個頁面的meta數據裡添加了Open graphic protocol 數據,你希望分享到facebook, google+等社交網站時,你會發現在分享頁面顯示的數據和圖片並不是你想要顯示頁面的數據。

三、解決方案

上面的問題是因為Open graphic protocol 數據獲取並不支持跳轉,如果遇到跳轉,一般都會去網站首頁拾取數據,而這並不是我們想要的。引起這個問題就是setRedirect。 setRedirect的原則是傳送給瀏覽裡的HTML頭中包含了跳躍指令。而解決上面的問題的方法是不使用setRedirect, 而是使用display. 每個JControllerLegacy都有一個display方法,你只要設定input裡的view, layout, 以及其他你要傳遞過去的數據,然後調用display方法就可。

下面是範例程式碼:

    /**
     * 内部跳转,用于代替setRedirect. 为什么要这样子做呢?
     * 因为 setRedirect他会发送一个http头到浏览器,让浏览
     * 进行跳转,这样一来就多了一个网络请问, 这是其一。最
     * 为主要的是setRedirect在某些不支持浏览器redirect的情况
     * 下达不到效果,例如:open graphic protocal
     * 
     * @param type $view 要显示的view
     * @param type $layout 要显示的layout, 默认为NULL
     */
    protected function internalRedirect($view, $layout=null){
        $this->input->set("view", $view);
        $this->input->set("layout", $layout);
        return $this->display();
    }
    
    public function checkAvailable(){
        //其他的业务代码
        $this->input->set('tmpl', 'doexam');
        return $this->internalRedirect("doexam", $layout);
    }
登入後複製

上面的程式碼是寫在你的Controller裡的。函數internalRedirect透過設定$input(這個input是指url的輸入參數) 中的view, layout,然後直接呼叫JControllerLegecy的display方法來顯示頁面。

在checkAvailable方法中,在呼叫internalRedirect之前,也設定了其他 view所需的參數。

夢溪的一個朋友說他在做他的一個網站 時遇到了這樣的問題,我們討論並分析了Joomla的實現代碼,發現其實這個解決方案挺容易, 只要你熟悉Joomla組件開發。如果你有問題,可以找我一起交流

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

以上就介紹了Joomla中的Task 和view 深入學習,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

windows11關機提示task host window任務宿主正在執行關閉任務的解決方法 windows11關機提示task host window任務宿主正在執行關閉任務的解決方法 Feb 12, 2024 pm 12:40 PM

windows11關機提示task host window任務宿主正在執行關閉任務的解決方法

Laravel開發:如何使用Laravel View產生視圖? Laravel開發:如何使用Laravel View產生視圖? Jun 14, 2023 pm 03:28 PM

Laravel開發:如何使用Laravel View產生視圖?

Golang學習之基於Joomla的網路應用程式開發 Golang學習之基於Joomla的網路應用程式開發 Jun 24, 2023 pm 12:15 PM

Golang學習之基於Joomla的網路應用程式開發

C#Task詳解 C#Task詳解 Mar 14, 2024 am 09:54 AM

C#Task詳解

寶塔面板:一鍵安裝WordPress、Joomla等CMS 寶塔面板:一鍵安裝WordPress、Joomla等CMS Jun 21, 2023 pm 04:18 PM

寶塔面板:一鍵安裝WordPress、Joomla等CMS

最流行的一些網站建站程序,你知道幾個? 最流行的一些網站建站程序,你知道幾個? Feb 13, 2024 pm 11:30 PM

最流行的一些網站建站程序,你知道幾個?

使用C#任務 使用C#任務 Feb 19, 2024 pm 12:16 PM

使用C#任務

深入了解C#中的任務 深入了解C#中的任務 Feb 18, 2024 pm 12:03 PM

深入了解C#中的任務

See all articles