Kirim data dari pengontrol ke phtml

22

Saya memiliki pengontrol ini:

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

Saya ingin mengakses $somethingdokumen .phtml saya, bagaimana saya melakukan ini? (atau dengan kata lain: bagaimana saya bisa mengakses $somethingfile .phtml saya)

Bob van Luijt
sumber

Jawaban:

21

Ada banyak cara melakukan ini.

Tetapkan langsung ke Blok:

$block->assign($var);

atau

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

Kemudian Anda dapat mengaksesnya di file phtml seperti ini:

$this->myvar

Gunakan registri Mage:

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

dan kemudian gunakan seperti:

$var = Mage::registry('custom_var');
Philwinkle
sumber
2
Anda telah menggunakan $block->assign($var)tetapi bagaimana cara diambil dalam phtmlfile?
Mohammad Faisal
Anda akan mengakses via $this->myvardari dalam file templat
philwinkle
1
Saya percaya itu Mage::register($key, $value, ...). Jadi Mage::register('custom_var', $var),?
musicliftsme
4
Seharusnya begitu $block->assign('myvar',$var);, bukan?
fritzmg
@ philwinkle Apakah Mage::register('custom_var', $var); menulis nilai dalam sesi dan ini dapat diakses dari file template lain kecuali template tindakan saat ini juga?
Butterfly
18

Phtml Anda harus dirender oleh satu blok. Blokir harus memiliki nama dalam tata letak.
Anda dapat melakukan ini setelah menelepon$this->loadLayout();

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

Maka Anda bisa mendapatkan nilai dalam phtmlfile seperti

$value = $this->getSomething();
//or 
$value = $this->getData('something');
Marius
sumber
ini tidak berfungsi untuk saya :(, saya memiliki controller yang mengembalikan id produk melalui AJAX, untuk quickview produk.
Shathish
@ Shathish. Ini masalah yang berbeda. Anda bisa menjadikan respons sebagai JSON dan menggunakan nilai-nilai dalam penangan respons AJAX.
Marius
Ya saya menggunakan JSON untuk mengembalikan konten blok (something.phtml) dan memperbarui div dengan detail ini di halaman daftar, bagaimana saya bisa meneruskan variabel dari controller saya ke something.phtml? sebenarnya saya melakukan ini saat ini menggunakan metode $ block-> assign (), yang saya rasa bukan cara yang benar (karena kopling ketat - perbaiki saya jika saya salah) atau haruskah saya memposting ini sebagai pertanyaan?
Shathish
@shathish mungkin Anda akan mengajukan pertanyaan lain dan berharap itu tidak ditandai sebagai duplikat.
Marius
3

Jika Anda orang ketinggalan, ada satu lagi cara untuk menyelesaikan ini

menggunakan sesi

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

sumber

epinik
sumber
Bahkan jika Anda memiliki data di sesi untuk menggunakannya nanti, saya sarankan untuk menggunakan $block->setSomething()atau $block->assign(). Ini terasa seperti "terlalu banyak kode" dan seharusnya php sebanyak mungkin dihindari.
Fabian Blechschmidt
-1

Jika Anda berada dalam pengontrol blok Anda.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Kemudian di file .phtml Anda

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

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>
Wolfgang
sumber
Apa yang Anda sebut "block controller" hanya disebut "block" di Magento. Pertanyaannya adalah tentang tindakan pengontrol yang ditemukan di controllersdirektori modul.
Fabian Schmengler
-4

ini sangat mudah untuk mengirim data dari pengontrol ke file phtml.

Langkah1: - Pertama-tama buat kelas Model dan memanjang dari Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

step2: - Sekarang Buka contollerfile dan masukkan kode dalam fungsi.

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

Langkah 3: - Buka file phtml dan masukkan kodenya.

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

Output: - 'gaurav';

gaurav tyagi
sumber