Joomla MVC组件开发-创建视图

在Joomla 1.6框架中,第三方开发者们分别在以下3种模式进行开发:

  • 模型(M):用于管理数据
  • 控制器(C):用来执行任务,获取和设置模型和控制视图显示。
  • 视图(V):通过控制器获取内容(errorfeedhtmljsonrawxml)。

设置控制器

在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 的变量信息。

发表评论

您的电子邮箱地址不会被公开。