質問

Zend Frameworkでは、レイアウトにプロパティを提供し、ビューで消費されます。この例は次のとおりです。

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

私は後で私の見解でエコーします。phtml:

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

しかし、私はMagentoを書くブロックメソッドに自分自身を見つけます。これは、オブジェクト全体をビューによって消費するように返すようにします - たとえば:

block/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 Two-Step/Composite Viewレイアウトパラダイムはハッキングがはるかに速いようです。

編集

ブロックメソッドを使用するのと同じ方法でブロックプロパティを利用することが可能である可能性があることがわかりました。 $this->username ここで、これはタイプのオブジェクトかもしれません Mymodule_User_Block_User;これがMagentoで理解されている、または受け入れられている慣行であるかどうかはわかりませんが、これはあまり頻繁に見たことがありません。

役に立ちましたか?

解決

いつもあります assign() 前述のゲッターとセッターを介して 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ファイルが含まれているため、ブロックのコンテキストにあります。ブロックまたはMagento環境が提供するすべてのことを行うことができます。

使用 $this->username ベストプラクティスではありません。 GETメソッドを使用すると、データアレイでコアロジックを変更せずに、後で何かを変更できると思います。 Varien_Object. 。チェックを追加し、標準をオーバーライドします __get()getUsername() データアレイなど以外のものを返します。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top