Joomla中的Task 跟view 深入学习
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组件开发。如果你有问题,可以找我一起交流
希望本文能够解决你所遇到的问题。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

近期不少的win11用戶們反映關機的時候提示taskhostwindow任務宿主正在執行關閉任務,那麼這是怎麼回事?使用者可以進入到本機登錄編輯程式下的Desktop資料夾,然後在右邊的視窗中選擇AutoEndTasks來進行設定就可以了。以下就讓本站來為用戶們來仔細的介紹一下關機出現這個問題的解決方法吧。 windows11關機提示taskhostwindow任務宿主正在執行關閉任務的解決方法1、使用組合鍵win鍵+r鍵,輸入“regedit”,回車,如下圖所示。 2、尋找[HKEY

Laravel是目前最受歡迎的PHP框架之一,其強大的視圖生成能力是令人印象深刻的一點。視圖是Web應用程式中展示給使用者的頁面或視覺元素,其中包含HTML、CSS和JavaScript等程式碼。 LaravelView允許開發者使用結構化的模板語言來建立網頁,同時透過控制器和路由產生相應的視圖。在本文中,我們將探討如何使用LaravelView產生視圖。一、什

Golang是一種並發性高、可靠性強的程式語言,近年來在網路開發中備受關注。 Joomla是一種開源的內容管理系統,具有良好的模組化、易用性等特性。本文以Golang為主要開發語言,以Joomla為基礎框架,介紹了一種基於Joomla的Web應用程式開發方法。一、Joomla簡介Joomla是一種基於PHP開發的開源CMS系統,具有許多優點,例如易用性、靈活

寶塔面板是一款基於Web的伺服器管理軟體,可協助使用者在Linux伺服器上快速部署網站,應用程式和資料庫。其中,寶塔面板的一項關鍵功能是一鍵安裝各種開源CMS,包括WordPress、Joomla、Drupal等。對於一個不熟悉伺服器管理的網站管理員來說,手動部署CMS是一項繁瑣的任務。包括下載軟體,解壓縮、設定資料庫,並將檔案上傳至伺服器的過程。這些步驟都

Task在C#中是用來表示非同步操作的對象,它位於System.Threading.Tasks命名空間。 Task提供了用於處理並發、非同步操作的高階API,從而可以更輕鬆地在.NET應用程式中編寫非同步程式碼。

C#Task用法,需要具體程式碼範例概述:Task是C#中一個非常常用的類型,它代表了一個可執行的操作,可以非同步地執行並傳回結果。在處理非同步操作、並行處理和提高應用程式效能方面,Task發揮著重要的作用。本文將介紹Task的基本用法,並提供一些具體的程式碼範例。建立並使用一個Task在C#中,可以使用Task類別來建立和使用一個非同步任務。下面是一個創建並使用Ta

C#Task詳解,需要具體程式碼範例引言:在C#多執行緒程式設計中,Task是一種常用的程式設計模型,用於實現非同步操作。 Task提供了一種簡單的方式來處理並發任務,可以在多個執行緒上並行執行非同步操作,並且可以方便地處理異常和返回值。本文將詳細介紹C#Task的使用方法,並提供一些具體的程式碼範例。一、Task的創建和運行創建Task物件的方法C#中創建Task物件有多種

你們都曉得假如要自己全新開發程式來建立一個網站,成本是相當大的,並非所有個人和小微型企業都能負擔。還好現今網路上有好多開源免費的網站建立程序,直接下載安裝才能使用。這種開源程式既減少了建站門檻,也直接省去了一大截網站建置成本。為便捷初學建站者初步了解,明天益吾庫就來簡略介紹下最受歡迎的一些網站建站程序。 1、WordPress[下載]WordPress免費開源程序,WordPress可以建立一個功能強悍的網路資訊發布平台,但更多的是應用於個人化的部落格。 WordPress不僅做個人部落格外,可以做企業站、入口網站、商
