教程栏目

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章 页面构造器

第17章 joomla升级

第18章 其他系统迁移

第19章 流量翻倍计划