在Zend框架中,我们为布局提供了属性,然后在视图中消耗了这些属性。一个例子是:

$this->layout = new Zend_Layout();
$this->layout->username = 'John';
$this->layout->email = 'john@foofoobunnies.edu';

后来我会在我的View.phtml中回声:

<?= $this->username; ?>
<?= $this->email; ?>

但是,我发现自己是在洋红色编写的块方法中,这些方法返回整个对象被视图消耗的对象 - 例如:

块/user.php

public function getUser(){
    return Mage::getModel('mymodule/user')->load($this->getUserId());
}

在我的 user.phtml:

$user = $this->getUser();
echo $user->getUsername();
echo $this->getEmail();

有什么方法可以削减此步骤,必须编写块方法返回相关数据?我已经使用了这种方法2 - 3年了,所以我对此并不陌生,但是似乎Zend两步/复合视图布局范式范围更快。

编辑

我只是想到以与我使用块方法相同的方式使用块属性,例如 $this->username $ $这可能是类型的对象 Mymodule_User_Block_User;尽管我不知道这是Magento中的一种理解或接受的实践,因为我没有经常看到这一点。

有帮助吗?

解决方案

总是有 assign() 以及前面提到的Getters和Setters通过 Varien_Object::_call()

其他提示

您对问题的编辑几乎可以总结。

你用 $this 当然,当块是您要访问的实例时。一个块不会等同于所需的各个模型。

但是,就传递数据传递到块而言,您可以使用XML或PHP实现它。

在PHP中

$this->getLayout()->getBlock('block_name')->setData('user', Mage::getModel('mymodule/user')->load($this->getUserId())); 

或在XML中

<block type="mymodule/user" name="block_name">
  <action method="setUserId"><user_id>string_goes_here</user_id></action>
</block>

您可以制作自己的操作方法来设置用户对象本身(显然,我是一个粗糙的字符串,但是主架是)。

toHtml() mage_core_block_template中的方法包含或多或少包含phtml文件,因此您处于块的上下文中。您可以做所有块或洋红色环境为您提供的一切。

使用 $this->username 不是最好的练习。我认为,因为使用GET方法,您绝对可以自由地更改一些内容,而无需使用数据阵列更改核心逻辑,从 Varien_Object. 。添加支票,超越标准 __get()getUsername() 并返回数据数组中的其他内容,等等。

许可以下: CC-BY-SA归因
scroll top