博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.5 组件开发基础
阅读量:5138 次
发布时间:2019-06-13

本文共 3105 字,大约阅读时间需要 10 分钟。

本文讲述一个Joomla组件是如何工作的以及组件的结构(组织方式),实际我们在创建组件的时候都是通过zip包安装的,

zip包可以是通过第三方工具生成的,也可以是自己打包的,但是推荐使用第三方工具生成,既方便又不易出错。第六节

讲述了怎么自己打包一个组件。

 

1. 在此之前先添加一个组件

通过网站

可以定制自己的组件。定制完成之后生成一个zip包,在网站的后台安装就行,

安装完成之后在components目录和administrator/components下生成一个以组件名命名的目录。

2. How a Component Work

我上面安装的组件名字叫com_followed,在com_followed目录下会有一个文件followed.php,称之为

基本文件。

当我请求 url=/components/com_followed/followed.php时,MVC模型将会经过两步  :

MVC首先找这个文件,如果找到了就注册一个类,否则失败。

假如我没有使用工具创建组件,那么实际上要经过下面几个步骤.

首先创建目录com_followed

(1) 创建基本文件 com_followed/followed.php

(2) 创建控制器文件com_followed/controller.php

控制器文件controller.php可以放在任何地方,但是习惯性放在com_followed目录下,这样就与follow.php

在同一个目录下,方便包含文件。

在followed.php中  require_once(JPATH_COMPONENT.'/controller.php');  JPATH_COMPONENT是包含

基本文件followed.php文件的目录。

在controller.php中引用library:  jimport(' joomla.application.component.controller ');

创建控制器类, 随便你叫什么名字,但是习惯上是这样命名

class  FollowedController  extends  JControllerLegacy{

}

到现在为止,你拥有了两个文件base file 和 controller file。base file载入控制器,controller file定义了一个类。

下面的工作是创建这个类的对象并让他工作。

在base file(followed.php)中加入以下代码:

$controller = JControllerLegacy::getInstance('Followed');$controller->execute( JFactory::getApplication()->input->get('task'));$controller->redirect();

(3) 获取数据

controller->execute();试图完成一个请求,如果请求不包含task参数,将默认执行FollowedController的display()方法。

如果请求是这样的option=com_followed&task=jump,将执行FollowedController的jump()方法。

不同的task调用不同的方法。

(4)视图

当你构建一个这样的请求url="localhost:8085?option=com_followed&view=first[&task=mytask]"

(task部分可能不存在,这时候默认task=display).

根据上面的请求Joomla将会载入components/com_followed/views/first/view.html.php下的display方法。

3.  上面说的有点乱,下面总结一下

组件目录结构:

com_followed

------assets

------helpers

------controllers

------views

------models

------controller.php

------followed.php

------router.php

------index.html

controllers/models下存放对应控制器php文件

views  下存放对应视图的目录(first)

first     下新建目录tmpl存放布局文件,view.html.php 视图类

控制器说明:

控制器类文件  controller/控制器名.php

控制器类文件中基本代码

defined('_JEXEC') or die;jimport('joomla.application.component.controller');

控制器类命名 组件名+Controller+控制器名 

控制器类需要继承 JControllerLegacy

如果url没有task参数 默认调用display()方法。

视图说明:

视图类文件 views/视图名/view.html.php

视图类文件中基本代码

defined('_JEXEC') or die; jimport('joomla.application.component.view');

视图类命名     组件名+View+视图名

视图类需要继承 JViewLegacy   

如果url没有task参数 默认调用display()方法。

要显示布局文件需要调用paraent::display($tpl)方法。

布局文件:

布局文件  view/视图名/tmpl/随便什么文件名(如果url没有layout参数,默认访问default.php)

url说明:

option=com_followed  哪个组件

view= first                      哪个视图(views/first)

task = jump                    哪个方法()

如果有view参数则是视图中的方法;

如果没有view参数则是控制器中的方法,如果在task参数中没有指定哪个控制器,则指默认控制器(com_followed/controller.php/FollowedController类);

可以再task参数中指定调用哪个控制器中的方法 task=Followed.jump

如果没有指定task参数,默认是display方法

layout=default2            哪个布局(views/first/tmpl/default2.php  默认是default.php)

format=html/rss/...        请求的是哪个文件(比如省略的话是views/first/view.html.php, 如果format=rss,请求的就是 view.rss.php)

followed.php代码如下

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

controller.php代码如下

input->getCmd('view',''); JFactory::getApplication()->input->set('view',$view); parent::display($cachable,$urlparams); return $this; } }

转载于:https://www.cnblogs.com/codergma/p/4764799.html

你可能感兴趣的文章
求 能把1~n所有整数整除的最小的数
查看>>
列举不少于6条的IE与FF脚本兼容性问题,需要写出命令
查看>>
swoole深入学习 1. swoole初始
查看>>
字符串
查看>>
c# Log4net的结构
查看>>
一个【wchar_t】引发的学案
查看>>
P1229-神秘岛
查看>>
[网络编程] select/epoll分析
查看>>
极简 python virtualenv 教程
查看>>
http://my.oschina.net/u/719192/blog/506062?p={{page}}
查看>>
jQuery插件开发
查看>>
[jmeter]Jmeter+ant实现接口自动化
查看>>
OracleLinux安装说明
查看>>
Oracle OEM启动方法
查看>>
XML解析之dom解析(jaxp的dom解析)
查看>>
iOS数据库应用一:SQLite
查看>>
在iOS开发中,给项目添加新的.framework
查看>>
推荐18个基于 HTML5 Canvas 开发的图表库
查看>>
ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))
查看>>
ACM/ICPC 之 分治法入门(画图模拟:POJ 2083)
查看>>