博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
joomla mvc架构 原理
阅读量:5987 次
发布时间:2019-06-20

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

hot3.png

component基本结构与访问方式


如访问:http://example.com/index.php?option=com_helloworld

Joomla将定位到:/components/com_helloworld,并且加载里面的helloworld.php

helloworld.php的工作就是加载相应的controller,继而调用相应的view

010238_Yo8u_2426875.jpg

含view, task的访问方式

如访问:http://domain.com/index.php?option=com_helloworld&view=helloworld&task=display&layout=default

joomla将定位到:看下面标红的,其实是先定位到helloworld.php,然后调实例化HelloWorldController,并调用指定的task方法,此处为display,在display里再去实例化HelloWorldViewHelloWorld类,继而调用其display方法。所以此处可以说直接定位到components/com_helloworld/views/helloworld/view.html.php

注意这里的view和task不是必须的,但按以下默认规则:

task    默认值:display

           通过HelloWorldController里display方法调用到view.html.php里display方法.

view   默认值:component's name

           此处component名称为helloworld,故默认的view helloworld将被调用

layout 默认值:default

           layout指调用相应view下哪个模板,此处为components/com_helloworld/views/helloworld/tmpl/default.php

           如layout指定值,则调用相应的<layout>.php

           注意:要使用layout参数,在view类里必须调用 'parent::display($tpl);'此处$tpl极值 

010340_qfGU_2426875.png

上图说明:

HelloWorldController为空类,但其继承了JControllerLegacy,其父类里有display方法,里面将实例化给定view,并调用view下display方法,见下

$view->display();

相应view的获取方式为:components/com_helloworld/views/helloworld/view.html.php

default.php里$this指HelloWorldViewHelloWorld对象,故$this->msg可直接使用

返回json,xml等格式


joomla还有个format参数,默认值是html,将调用view.html.php来输出,如想返回json,xml等,则增加以下php

010506_WlcP_2426875.png

举个返回xml的例子 view.xml.php:

  
How to create a Joomla Component  
create-component
";        }}

则访问

http://example.com/index.php?option=com_helloworld&format=xml

返回

010612_Jh50_2426875.png

component里model访问方式


MVC结构还少了M,此处给出解释

model定义在components/com_helloworld/models里,名称为helloworld.php

model类名为HelloWorldModelHelloWorld,里面方法名都是setget打头的。

在view里通过$this->get('组件名')调用相应的model下的代码,见下

010654_vhYb_2426875.jpg

可见,调用model的方式

viewview调用

$this->get('Msg');model...接下来model里对应的function将会被调用
getMsg()

总结下:


以下绿色是固定的,红色是变化的

<Name>表示组件名

controller

controller的命名方式:<Name>Controller

class 
Controller extends JControllerLegacy{}

controller的调用方式:

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

view

view不指定的话即为组件名,即为<Name>

view的命名方式:<Name>View<Viewname>

class 
View
 extends JViewLegacy{  function display($tpl=null)  {    // Prepare the data    $data1 = ....    $data2 = ....    $moredata[] = array....     // Inject the data    $this->variablename = $data1;    $this->variablename2 = $data2;    $this->variablename3 = $moredata;     // Call the layout template. If no tpl value is set Joomla! will look for a default.php file    $tpl = 'myTemplate';    parent::display($tpl); //此处指定$tpl的话,则调用相应的tmpl下<$tpl>.php,默认值为default  }}

model

model的命名方式:<Name>Model<Modelname>

class 
Model
 extends JModelLegacy{}

所有get开头的函数在view里的调用方式为$this->get('xxx');

转载于:https://my.oschina.net/fdstudio/blog/600500

你可能感兴趣的文章
oracle查分区表的一些注意事项
查看>>
p4 add 目录
查看>>
网上找的模拟POST提交上传图片类
查看>>
SqlHelper
查看>>
AUTOCAD自学教程一
查看>>
VC多线程编程
查看>>
Configuring log4net with VS2010 and .Net 4.0
查看>>
html is for what
查看>>
JavaScript 获得鼠标坐标
查看>>
目录文件Oracle11g彻底删除
查看>>
删除androidAndroid递归方式删除某文件夹下的所有文件
查看>>
CSS overflow 属性
查看>>
第10次实验任务
查看>>
java中的设计模式一 装饰模式
查看>>
作用域及可见性
查看>>
PL/pgSQL学习笔记之五
查看>>
Android 经验: 5555 端口会被 adb 误认为 emulator
查看>>
Android手机便携式wifi的使用及无线数据传输(主要针对XP系统)
查看>>
MFC控件(8):command button与syslink control
查看>>
Java生成唯一GUID
查看>>