为Magento中的视图提供属性
-
16-10-2019 - |
题
在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()
并返回数据数组中的其他内容,等等。