コントローラーからphtmlにデータを送信します


22

私はこのコントローラーを持っています:

...
public function insertAction() {
    $something = 'testcase';
    $this->loadLayout();
    $this->_title($this->__("the title"));
    $this->renderLayout();
}
...

$something.phtmlドキュメントでアクセスしたいのですが、どうすればよいですか?(または別の言い方をすれば:$something.phtmlファイルでどのようにアクセスできますか)

回答:


21

これを行うにはいくつかの方法があります。

ブロックに直接割り当てる:

$block->assign($var);

または

$block->assign(array('myvar'=>'value','anothervar'=>true));

次に、phtmlファイルで次のようにアクセスできます。

$this->myvar

Mageレジストリを使用します。

Mage::register('custom_var', $var);

そして次のように使用します:

$var = Mage::registry('custom_var');

2
あなたは使用しました$block->assign($var)が、どのようにphtmlファイルに取得されますか?
モハンマドファイサル14年

あなたは経由でアクセスし$this->myvarたテンプレートファイル内から
philwinkle

1
そうだと思うMage::register($key, $value, ...)。だからMage::register('custom_var', $var)
musicliftsme

4
あるべき$block->assign('myvar',$var);ですよね?
-fritzmg

@philwinkle Mage::register('custom_var', $var); セッションで値を書き込みますが、これは現在のアクションテンプレート以外の他のテンプレートファイルからもアクセスできますか?
バタフライ

18

phtmlはブロックでレンダリングする必要があります。ブロックのレイアウトに名前が必要です。
あなたは電話した後にこれを行うことができます$this->loadLayout();

$block = Mage::app()->getLayout()->getBlock('block_name_here')
if ($block){//check if block actually exists
   $block->setSomething($something);
}

次に、phtmlファイル内の値を取得できます

$value = $this->getSomething();
//or 
$value = $this->getData('something');

これは私にはうまくいきません:(、製品のクイックビューのために、AJAXを介して製品IDを返すコントローラーがあります
。– Shathish

@Shathish。これは別の問題です。応答をJSONとして取得し、AJAX応答ハンドラーで値を使用できます。
マリウス

はい、JSONを使用してブロック(something.phtml)コンテンツを返し、リストページでこれらの詳細を使用してdivを更新しています。変数をコントローラーからsomething.phtmlに渡すにはどうすればよいですか。実際に私は現在$ block-> assign()メソッドを使用してこれを行いますが、これは正しい方法ではないと感じています(密結合なので、間違っている場合は修正してください)または質問として投稿する必要がありますか?
シャシッシュ

@shathish他の質問をして、重複としてマークされないことを願うかもしれません。
マリウス

3

あなたが人々が逃した場合に備えて、これを達成するもう一つの方法があります

セッションを使用する

Mage::getSingleton('core/session')->setSomeSessionVar($data);// In the Controller
$data = Mage::getSingleton('core/session')->getSomeSessionVar(); // In the View;

ソース


後で使用するセッションにデータがある場合でも、$block->setSomething()またはを使用することをお勧めします$block->assign()。これは「コードが多すぎる」ように感じられるため、できるだけ多くのPHPを避ける必要があります。
ファビアンBlechschmidt

-1

ブロックコントローラー内にいる場合。

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

次に、.phtmlファイルで

   <?php 
        $variable = $this->_var;
        echo $variable; // prints "something"

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>

「ブロックコントローラー」と呼ぶものは、Magentoでは単に「ブロック」と呼ばれます。問題はcontrollers、モジュールのディレクトリで見つかったコントローラーアクションに関するものでした。
ファビアンシュメングラー16

-4

これは、コントローラーからphtmlファイルにデータを送信するのが非常に簡単です。

Step1:-最初にModelクラスを作成し、Varien_Objectから拡張します

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

step2:-contollerfileを開き、関数にコードを配置します。

$name='gaurav';
$this->loadLayout();
Mage::getSingleton('Modulename/Modelfilename')->setData('name',$name);
$this->renderLayout();

Step3:-phtmlファイルを開き、コードを配置します。

echo $name=Mage::getSingleton('Modulename/Modelfilename')->getData('name');

出力:-'gaurav';

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.