• 1.5 组件开发基础


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

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

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

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

    通过网站http://www.component-creator.com/zh_cn/component/combuilder/components

    可以定制自己的组件。定制完成之后生成一个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代码如下

    <?php  
    
    defined('_JEXEC') or die; 
    
    //包含依赖 
    
    jimport(' joomla.application.compinent.controller'); 
    
    //执行task(url参数之一) 
    
    $controller = JControllerLegacy::getInstance('Followed');//得到一个实例 
    
    $controller->execute(JFactory::getApplication()->input()->get('task')); 
    
    $controller->redirect();

    controller.php代码如下

    <?php 
    
    defined('_JEXEC') or die; 
    
    jimporr('joomla.application.component.controller'); 
    
    class FollowedController externds JControllerLegacy{ 
    
    public fufnction display($cachable=false,$urlparams=false){ 
    
        require_once JPATH_COMPONENT . '/helpers/followed.php'; 
    
        $view = JFactory::getApplication()->input->getCmd('view',''); 
    
        JFactory::getApplication()->input->set('view',$view); 
    
        parent::display($cachable,$urlparams); 
    
        return $this; 
    
    } 
    
    }
  • 相关阅读:
    selenium等待
    selenium断言
    monkey随机测试
    selenium操作元素(键盘和鼠标事件)
    windows10用WMware安装Linux虚拟机详细步骤
    第一个WebDriver脚本
    中文版测试报告
    python3写冒泡排序
    Fiddler设置显式IP地址
    selenium webdriver 常用断言
  • 原文地址:https://www.cnblogs.com/codergma/p/4764799.html
Copyright © 2020-2023  润新知