教程栏目

joomla中文网出品的官方教程

在本节中,我们将会思考joomla应该怎样接收前台提交的数据,以及解决相关的问题。但是在解决问题之前,有必要再谈一下MVC.刚好在Joomla官网上看到一篇介绍MVC的文章,觉得非常的好,就在这里介绍一下这篇文章了。

 

在本节中,我们将会思考joomla应该怎样接收前台提交的数据,以及解决相关的问题。但是在解决问题之前,有必要再谈一下MVC.刚好在Joomla官网上看到一篇介绍MVC的文章,觉得非常的好,就在这里介绍一下这篇文章了。

 

进入Joomla平台

进入Joomla平台

        当我们在URL中输入index.php的时候,就进入了网站的入口。Joomla的设计主要是返回并输出组件处理的结果,也就是真正在后面完成人任务的 是组件。当我们请求下面的链接index.php?option=com_<name>(在Joomla中的所有URL都是这种形式,之所以 我们看到的是http://www.zmax99.com/menu-cn-module-develop/item/65-article-cn- module-develop-part05这种形式是因为,我们开启了搜索引擎友好的选项,可以在后台关闭这种选项)的时候。Joomla就会在查找 Componets/com_<name>/<name>.php这个文件,并且加载这个文件。举例来说,如果你的组件叫 com_guestbook.那么在Components目录下一定会有一个com_guestbook文件夹,并且在这个文件下面会有一个 guestbook.php的文件。在这个文件中我们可以决定使用旧的顺序开发模式还是使用新的MVC模式。我喜欢叫这个文件为组件的入口点文件。

MVC 模式的实现,主要依赖两个方面:文件和类。Joomla系统会自动寻找按照一定规则命名的文件,然后实例化这个文件中的类。如果没有找到文件或者 类,joomla就会执行失败。所以在joomla中命名是十分重要的。按照命名规范来给文件和类命名将会避免需要不必要的麻烦。

controller.php文件

controller.php文件

    组件最开执行的组件根目录下的一个控制器文件。这个控制器文件的命名按理来说随便的。但是通常情况下我们将它叫做controller.php。所以在入口点文件中我们通常会看到下面的代码:

require_once(JPATH_COMPONENT.'/controller.php');

通过上面的代码,我们可以放心,controller.php文件可以在组件的任何一个地方,只要我们在require_once函数中写对这个路径就可以了。不过一般情况下都是放在组件的更目录下,直接用一个JPATH_COMPONENT该多方便。

加载了controller.php文件,为了使用MVC,我们需要包含一下Joomla的controller库。一般的代码如下:

jimport('joomla.application.component.controller');

完成了上面的两个工作,我们还需要定义一个控制器类,这个类需要从JControllerLegacy类派生。理论上这个类的类名是任意的,但是我强烈要求按照下面的命名格式来命名(组件的命名+Controller)。这样会省去好多的麻烦。

class <name>Controller extends JControllerLegacy

{

}

到处我们写了两个文件一个是入口点文件,一个是控制器文件。由index.php文件来加载入口点文件,由入口点文件来加载控制器文件。

 下一步要做的就是创建一个对象,并且让这个对象开始工作。一般的你需要在你的入口点文件中加入下面的代码:

 
//通过控制器的名字(前缀)来实例化控制器对象

$controller = JControllerLegacy::getInstance('');

//执行请求的任务

$controller ->execute(JFactory::getApplication()->input->getCmd('task'));

//如果需要可以在下面执行重定向

$controller->redirect();

 

完成了这些,joomla系统就会自动加载相关的文件和类,所以一定要注意文件的命名。因为joomla的自动加载都是按照一定的命名规则来加载文件的。如果文件名命名不正确,就会出现奇怪的错误。

获得数据

 获得数据

  思考一个文件,joomla应该从什么地方获得数据并且处理和显示数据。答案是从Get请求和POST请求。刚才我们并没有在 URL(index.php?option=com_guestbook)中指明task变量,那么在入口点文件中到底执行什么任务呢?在joomla中 无论是有没有提出一个请求,Joomla都会用它默认的任务(display任务)来完成一个请求。(这里我有一些疑问?????)由于我们并没有指定任务。所以系统会自动自动display任务

class Controller extends JControllerLegacy
 
{
  function display()
  {
    echo 'displaying';
  }
}
 

也就是说如果你在URL中指定task=jump。那么控制器会执行控制器类中的jump函数。

class Controller extends JControllerLegacy
{
  function jump()
  {
    echo 'jumping';
  }
}

视图

 视图

 为了触发MVC中的V(视图工作),我们需要去实现JControlelrLegacy类的__construct()方法。最简单的实现方法如下,只需要简单的调用父类的构造函数就可以了。

 jimport(joomla.application.component.controller);
class Controller extends JControllerLegacy
{
  publice function __contruct($config=array())
  {
    parent::__construct($config);
  }
}
 

什么是视图?

  视图就是一个数据子集。和SQL的视图概念有点像(如果你知道SQL的视图的话)。你可以传递不同的数据到不同的视图中,显示出不同的页面。你可以有多个 视图。在joomla组件的根目录下joomla用views目录来存放视图文件。一般情况下,在views目录下我们只放视图文件。一个典型的视图文件 结构如下:

<name> 根目录文件夹
   controller.php
  <componet_name>.php
 'veiws'文件夹
    view1 第一个视图文件夹
   view2 第二个视图文件夹
  等等

在视图文件夹下必须有一个文件叫view.html.php(不一定是html)。你可以在你的请求中包含一个view变量,向MVC指定要加载的变量。如果你的视图文件夹下没有默认视图,那么你必须要执行这个变量,否则系统报错。

http://www.zmax99.com/index.php?option=com_guestbookJ&view=<myview>[&task=<mytask>]

上 面已经说过了,task部分是可以不要的。如果你忽略了task变量,那么默认执行的任务就是display.上面的请求告诉joomla应该导 入<www.zmax99.com>/componets/com_guestbook/views/myview /view.html.php文件。如果这个文件不存在,joomla就会出错。通过改变view的值,你可以显示不同的视图。

每一个视图 的请求你都指定了你需要的视图的格式。默认的格式是html.还有几种其他的格式。比喻说pdf rss 等等。你可以用format=<myformat>来指定你请求的格式。如果format变量没有设置,那么就会使用默认的 format=html.

html格式就是告诉joomla需要将当前使用的模版模块都加载进来,然后返回一个完整的页面。

正如前面提到的,你可以使用其他的格式,使得joomla仅仅返回数据而不包含模版。你甚至可以使用ajax格式去传递Ajax请求到前台。(我也不懂自己在说什么)

我 们需要写一些代码到view.<format>.php文件中。有了视图文件,现在我们还需要建立视图类。建立一个视图类,需要让我们自己的 类从JViewLegacy类派生。并且要严格按照命名规则来书写。因此,你的类名必须和组件的名称相关。格式如下:组件的名称+View+视图的名称。 举例来说,现在我们的组件的名称为guestbook。视图的名称为postMessage(option=com_guestbook& view=postMessage)那么视图类的名称为:

 
 // php对类名的大小写不敏感
 class GuestbookViewDetail extends JViewLegacy
{
   function display($tpl = null)
   {
     echo "www.zmax99.com";
   }
}

布局

 布局(layout)是视图展示数据的一种方式。使用布局,你可以非常方便的将相同的数据进行多方面的展示。 比喻文章的博客布局 列表布局。和以前一样。如果你没有指定layout变量。那么系统会自动加载default.php这个布局。为了使用布局。你需要在视图文件夹下创建一 个文件夹叫‘tmpl’.并且创建文件<mylayout>.php。如果你用默认的布局。那么这个文件就会是default.php。

可以通过layout变量来指定布局。也可注入。(不清楚什么意思)

为了使用布局。你在视图类中必须调用parent::display()方法。然后传递布局模版的名称作为参数。

代码如下:

 
 class View extends JViewLegacy
 {
    function display($tpl= null)
   {
     //准备数据
   $msg =
   //注入数据
   $this->assignRef('变量的名称',$msg);
  
  //调用布局文件。如果$tpl=null  joomla就会寻找default.php文件
  $tpl='myTemplate';
  parent::display($tpl);
   }
 }

写的乱七八糟的,以后再修改。

评论 (0)

  • 最新在前
  • 最佳在前

第1章 Joomla入门教程

第3章 C计划

第5章 E计划

第6章 H计划

第7章 G计划

第9章 运行环境

第11章 主从与集群

第12章 模块开发

第13章 插件开发

第14章 j2.x组件开发教程

第15章 页面定制教程

第16章 页面构造器