Joomla入门 HEELOWORLD工作方式

helloworld.php
defined('_JEXEC') or die('Restricted access');
这是一个进入Joomla!平台的 安全入口点 JEXEC 包含一个详细的解释
$controller = JControllerLegacy::getInstance('HelloWorld');

jcontrollerlegacy是一个Joomla的基类!控制我们的网站使用的控制器,我们必须在组件扩展这个类。这个 getInstance的静态方法 jcontrollerlegacy类将创建一个控制器。在上面的代码中,将实例化一个类的控制器对象命名 HelloWorldController。Joomla会找这类声明
<path_to_joomla>/htdocs/components/com_helloworld/controller.php
$input  = JFactory :: getApplication ( ) -> input ;
$controller -> execute ( $input -> getCmd ( 'task' ) ) ;

创建控制器对象后,我们指示控制器来执行任务,在URL定义:
<yoursite>/joomla/index.php?option=com_helloworld&task=<task_name>。如果没有任务设置,默认的“显示”将承担任务。当显示器使用,“视图”变量将决定什么将被显示。其他常见的任务是保存、编辑、新、等。
$controller->redirect();

该控制器可以重定向页面,通常在一个任务像“拯救”已经完成。最后这句话需要照顾的实际重定向。

主要切入点,helloworld.php,本质上是将控制权传递给控制器,负责执行任务,被指定的要求。我们的特定组件的控制器不做任何事情比父类已经这样做了,这就是为什么我们的控制器类是空的。

controller.php

class HelloWorldController extends JControllerLegacy
{}

当没有任务请求中的变量,默认的任务将被执行。这是默认的显示任务。的jcontrollerlegacy类有这样一个任务。在我们的例子中,它会显示一个视图命名为HelloWorld。

view.html.php

class HelloWorldViewHelloWorld extends JViewLegacy
{
        function display($tpl = null)
        {
                // Assign data to the view
                $this->msg = 'Hello World';
 
                // Display the view
                parent::display($tpl);
        }}

视图设置输出的文本,然后调用基显示类。jviewlegacy是一个Joomla的基类!意见在我们的案例中,这种方法将使用说明书/ default.php文件显示数据。

default.php

<h1><?php echo $this->msg; ?></h1>

这个模板文件将由jviewlegacy类包括。因此,在这里,美元指helloworldviewhelloworld类。

helloworld.xml

<version>0.0.2</version>

更新的版本号

<filename>controller.php</filename><folder>views</folder>

告诉安装程序添加controller.php和观点/目录






component基本结构与访问方式

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

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

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

含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极值 

上图说明:

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

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

<?php// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view libraryjimport('joomla.application.component.view');
 
/**
 * XML View class for the HelloWorld Component
 */class HelloWorldViewHelloWorld extends JViewLegacy{
        // Overwriting JView display method
        function display($tpl = null) 
        {
            echo "<?xml version='1.0' encoding='UTF-8'?><article>
  <title>How to create a Joomla Component</title>
  <alias>create-component</alias></article>";
        }
}

则访问

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

返回

component里model访问方式


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

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

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

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

可见,调用model的方式

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

总结下:


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

<Name>表示组件名

controller

controller的命名方式:<Name>Controller

class <Name>Controller extends JControllerLegacy{}

controller的调用方式:

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

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

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

class <Name>View<Viewname> 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 <Name>Model<Viewname> extends JModelLegacy{}

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



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值