Joomla MVC组件开发-创建视图
在Joomla 1.6框架中,第三方开发者们分别在以下3种模式进行开发:
- 模型(M):用于管理数据
- 控制器(C):用来执行任务,获取和设置模型和控制视图显示。
- 视图(V):通过控制器获取内容(error, feed, html, json, raw, xml)。
设置控制器
在Joomal 核心中,有一个类能管理控制器: JController , 这个类用来扩展我们的组件。在 site/helloworld.php (Hello World 组件)文件中输入下面的代码:
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import joomla controller library jimport('joomla.application.component.controller'); // Get an instance of the controller prefixed by HelloWorld $controller = JController::getInstance('HelloWorld'); // Perform the Request task $controller->execute(JRequest::getCmd('task')); // Redirect if set by the controller $controller->redirect();
JController 类中的 getInstance 静态方法用于创建一个控制器。上面的代码中是一个对象类名为 HelloWorldController 的控制器,Joomla 会在controller.php (默认行为)的类里寻找一个声明。
现在controller.php 需要创建,HelloWorldController 需要声明和定义。 所以我们现在创建一个site/controller.php,将以下代码填充进去:
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla controller library jimport('joomla.application.component.controller'); /** * Hello World Component Controller */ class HelloWorldController extends JController { }
当没有任务执行变量时,默认任务将被执行。JController 类有这个任务,在我们例子中它显示 HelloWorld.
设置视图
JController 想要显示视图,需创建 component/com_[component_name]/views/[name of view]/ 文件夹
文件夹名称及视图应该和组件名称一致,在这个例子中我们是 component/com_helloworld/views/helloworld/.
这个文件夹还应包含视图文件view.[view_mode].php. 默认视图模式,也可能是唯一的组件视图模式,所以应该驾驶 html ,所以我们命名为 view.html.php .
创建 site/views/helloworld/view.html.php ,并包含以下代码:
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla view library jimport('joomla.application.component.view'); /** * HTML View class for the HelloWorld Component */ class HelloWorldViewHelloWorld extends JView { // Overwriting JView display method function display($tpl = null) { // Assign data to the view $this->msg = 'Hello World'; // Display the view parent::display($tpl); }
}
Jview查看类调用JController类执行显示任务。在我们的例子中,这个方法加载 tmpl/default.php 显示数据。我们来创建一个 site/views/helloworld/tmpl/default.php 文件,并输入以下代码:
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); ?> <h1><?php echo $this->msg; ?></h1>
这个模板包含了 JView 类。因此,这里的 $this 引用了 HelloWorldViewHelloWorld 类。
创建压缩包或者下载 安装到Joomla 1.6 上,你可以通过 index.php?option=com_helloworld访问测试。
helloworld.xml 文件代码
<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="1.6.0" method="upgrade"> <name>Hello World!</name> <!-- The following elements are optional and free of formatting constraints --> <creationDate>November 2009</creationDate> <author>John Doe</author> <authorEmail>john.doe@example.org</authorEmail> <authorUrl>http://www.example.org</authorUrl> <copyright>Copyright Info</copyright> <license>License Info</license> <!-- The version string is recorded in the components table --> <version>0.0.2</version> <!-- The description is optional and defaults to the name --> <description>Description of the Hello World component ...</description> <update> <!-- Runs on update; New in 1.6 --> <schemas> <schemapath type="mysql">sql/updates/mysql</schemapath> </schemas> </update> <!-- Site Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder to copy FROM in the package to install therefore files copied in this section are copied from /site/ in the package --> <files folder="site"> <filename>index.html</filename> <filename>helloworld.php</filename> <filename>controller.php</filename> <folder>views</folder> </files> <administration> <!-- Administration Menu Section --> <menu>Hello World!</menu> <!-- Administration Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder to copy FROM in the package to install therefore files copied in this section are copied from /admin/ in the package --> <files folder="admin"> <!-- Admin Main File Copy Section --> <filename>index.html</filename> <filename>helloworld.php</filename> <!-- SQL files section --> <folder>sql</folder> </files> </administration> </extension>
你可以查看到 view.html.php 文件里的 $this->msg 的变量信息。