会员登录

联系我们

电话:18921289006

传真:0510-88804819

EMAIL: 这个 E-mail 受所垃圾邮件程序保护,您需要启用 JavaScript 才能查看。

开发手记

joomla组件开发之四--管理后台

打印 Email

建立后台界面:
在之前的三个部分,我们已经开发了一个MVC模式的组件,并从数据库里取得数据.现在,还是没法添加数据到数据库里除非手动添加,现在将介绍如何开发一个管理单元来管理数据.
建立一个基本的框架
管理面板的基本框架类似于前台的部分.该组件的后台的主入口文件是hello.php.该文件的作用跟前台一样,默认的控制器也叫controller.php,与前台的也一样.
hello.php文件的示例代码:

<?php
/**
* @package Joomla.Tutorials
* @subpackage Components
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4
* @license GNU/GPL
*/
// No direct access defined( '_JEXEC' ) or die( 'Restricted access' ); // Require the base controller require_once( JPATH_COMPONENT.DS.'controller.php' ); // Require specific controller if requested if($controller = JRequest::getWord('controller')) { $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php'; if (file_exists($path)) { require_once $path; } else { $controller = ''; } } // Create the controller $classname = 'HellosController'.$controller; $controller = new $classname( ); // Perform the Request task $controller->execute( JRequest::getVar( 'task' ) ); // Redirect if set by the controller $controller->redirect();



hellos 模型
这个hello的模型非常简单,仅是从数据库取得数据即可,用方法getData()来实现这个效果,JModel类已经建了一个受保护的方法_getList().这个方法使了从数据库取得数据变得简单.我们仅仅是需要传递一个查询语句,一组纪录就从数据库返回.
也许我想将查询在另一个内部方法里得到应用,我们建立一个私有方法_buildQuery(),就是将查询语句传递给_getList(),这样利于将来修改.
于是我们这个类里需要两个方法getData() 和 _buildQuery().
_buildQuery()示例代码:

/**
* Returns the query
* @return string The query to be used to retrieve the rows from the database
*/
function _buildQuery() { $query = ' SELECT * ' . ' FROM #__hello ' ; return $query; }

getData()将获得查询语句然后从数据库检索得到数据,有可能在载入一页面同样的数据检索要发生两次,这将产生重复的数据库查询的操作,于是我们将忆检索的数据存入_data以防止出现重复的查询.
getData()的示例代码:

**
* Retrieves the hello data
* @return array Array of objects containing the data from the database
*/
function getData() { // Lets load the data if it doesn't already exist if (empty( $this->_data )) { $query = $this->_buildQuery(); $this->_data = $this->_getList( $query ); } return $this->_data; }



完整的模型示例:

<?php
/**
* Hellos Model for Hello World Component
*
* @package Joomla.Tutorials
* @subpackage Components
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4
* @license GNU/GPL
*/
// Check to ensure this file is included in Joomla! defined('_JEXEC') or die(); jimport( 'joomla.application.component.model' ); /**
* Hello Model
*
* @package Joomla.Tutorials
* @subpackage Components
*/
class HellosModelHellos extends JModel { /**
* Hellos data array
*
* @var array
*/
var $_data; /**
* Returns the query
* @return string The query to be used to retrieve the rows from the database
*/
function _buildQuery() { $query = ' SELECT * ' . ' FROM #__hello ' ; return $query; } /**
* Retrieves the hello data
* @return array Array of objects containing the data from the database
*/
function getData() { // Lets load the data if it doesn't already exist if (empty( $this->_data )) { $query = $this->_buildQuery(); $this->_data = $this->_getList( $query ); } return $this->_data; } }




文件存储路径为models/hellos.php

hello的视图

现在有了从数据库检索数据,现在还差个视图,这个视图也类似于前台的视图,像前台一样我们的模型已自动实例化,后台也是如此.使用JView类的get()方法来获得我们的模型.我们的视图有三行:一个从模型取得数据,一个将数据传送给模板,第三个调用显示方法来显示输出.

<?php
/**
* Hellos View for Hello World Component
*
* @package Joomla.Tutorials
* @subpackage Components
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4
* @license GNU/GPL
*/
// Check to ensure this file is included in Joomla! defined('_JEXEC') or die(); jimport( 'joomla.application.component.view' ); /**
* Hellos View
*
* @package Joomla.Tutorials
* @subpackage Components
*/
class HellosViewHellos extends JView { /**
* Hellos view display method
* @return void
**/
function display($tpl = null) { JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' ); JToolBarHelper::deleteList(); JToolBarHelper::editListX(); JToolBarHelper::addNewX(); // Get data from the model $items =& $this->get( 'Data'); $this->assignRef( 'items', $items ); parent::display($tpl); } }



上面这段代码存储为/hellos/view.html.php;