1

我试图了解如何在 joomla 2.5 中开发自定义组件,并且在第一步我被卡住了,我想知道 assignRef() 函数的用途是什么,有关更多信息,请单击此处

<?php
/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
 * @license    GNU/GPL
*/

// no direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the HelloWorld Component
 *
 * @package    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $greeting = "Hello World!";
        $this->assignRef( 'greeting', $greeting );

        parent::display($tpl);
    }
}

在 assignRef() 函数中,第一个参数充当变量而不是值,因为如果我将其值更改为其他值,则它无法显示 $greeting 的值:-

http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1 * @license GNU/GPL */

// no direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the HelloWorld Component
 *
 * @package    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $greeting = "Hello World!";
        $this->assignRef( 'greeting123', $greeting );

        parent::display($tpl);
    }
}

然后在 site/views/hello/tmpl/default.php 中,如果我这样写,那么它向我展示了正确的答案:-

<?php

// No direct access

defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting123; ?></h1>

那么结果将是:---- Hello world

我知道这对你来说是一个简单或幼稚的问题,但对我来说,这是我自己的发展领域新时代的开始......任何事情都会受到赞赏......

4

2 回答 2

3

assign()在 Joomla 1.5 中,有两个函数assignRef()用于将数据从视图传递到布局中。但从 Joomla 1.6 及更高版本开始,只需将数据添加到视图对象即可。因为Joomla 1.6/2.5至少需要PHP 5.2,它具有更好的内存管理,这是引入这两种方法的主要原因。这两种方法是通过引用而不是按值分配变量。PHP4 默认使用按值分配,而PHP5(使用对象时)使用按引用分配。

如果您使用的是 Joomla 最新版本,您可以通过放置

$this->variable = $something;

在你的view.html.php,它将在布局中可用。

于 2013-02-13T14:31:40.053 回答
1

assignRef()函数将变量添加到视图。所以它可以在视图类中访问。来源:这里

但是,我可以建议您在此处遵循 Joomla 2.5 的扩展创建教程,而不是您正在使用的 1.5 教程,这样您就不会使用已弃用的函数。例如,在 Joomla 2.5 中不再需要 assignRef()。模型从表中检索数据,所需要的只是

$this->items = $items;
于 2013-02-13T14:27:21.800 回答