Kontrol cihazından phtml'ye veri gönderin


22

Bu denetleyiciye sahibim:

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

$something.Phtml dökümanıma erişmek istiyorum, bunu nasıl yaparım? (veya başka bir şekilde koymak için: $something.phtml dosyama nasıl erişebilirim )

Yanıtlar:


21

Bunu yapmak için bir çift yol var.

Doğrudan Bloğa Atama:

$block->assign($var);

veya

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

Ardından phtml dosyasında şöyle erişebilirsiniz:

$this->myvar

Mage kayıt defterini kullanın:

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

ve sonra gibi kullanın:

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

2
kullandınız $block->assign($var)ama nasıl phtmldosyaya alınmalı ?
Muhammed Faysal

$this->myvarŞablon dosyası içinden erişebilirsiniz
philwinkle

1
Buna inanıyorum Mage::register($key, $value, ...). Yani, Mage::register('custom_var', $var)?
musicliftsme,

4
Olmalı $block->assign('myvar',$var);, değil mi?
fritzmg

@ philwinkle Oturumdaki Mage::register('custom_var', $var); değeri yazıyor mu ve buna mevcut eylem şablonu dışındaki diğer şablon dosyalarından da erişilebilir mi?
Kelebek,

18

Phtml'niz bir blok tarafından oluşturulmalıdır. Blok, düzende bir isme sahip olmalıdır.
Aradıktan sonra bunu yapabilirsiniz.$this->loadLayout();

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

Sonra değeri phtmlgibi dosyada alabilirsiniz

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

bu benim için işe yaramaz :(, ürün kimliğini AJAX aracılığıyla ürün kimliğini döndüren bir denetleyiciye
sahibim

@Shathish. Bu farklı bir konudur. Yanıtı JSON olarak değerlendirebilir ve AJAX yanıt işleyicisindeki değerleri kullanabilirsiniz.
Marius

Evet. Blok (something.phtml) içeriğini döndürmek ve div'i liste sayfasında bu ayrıntılarla güncellemek için JSON kullanıyorum, değişkeni denetleyicimden bir şeye nasıl aktarabilirim? Aslında bunu şu anda $ block-> assign () yöntemini kullanarak yapıyorum, bu doğru yolun olmadığını düşünüyorum (sıkı birleşme olduğu için - yanlış olduğumda beni düzeltin) veya bunu bir soru olarak mı göndereyim?
Shathish

@shathish belki başka bir soru sorar ve bunun yinelenmiş olarak işaretlenmemesini umarsınız.
Marius

3

İnsanları kaçırmanız durumunda, bunu yapmanın bir yolu daha var.

oturumları kullanma

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

kaynak


Verileri daha sonra kullanmak üzere oturumda tutsanız bile, $block->setSomething()veya kullanmanızı öneririz $block->assign(). Bu "çok fazla kod" gibi geliyor ve mümkün olduğunca kaçınılması gereken php olmalı.
Fabian Blechschmidt 16:13

-1

Blok kontrolörün içindeyseniz.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Sonra .phtml dosyanızda

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

   ?>

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

"Blok kontrolör" dediğiniz şeye Magento'da "blok" denir. Soru, controllersbir modülün dizininde bulunan denetleyici eylemleriyle ilgiliydi .
Fabian Schmengler

-4

Bu, kontrol cihazından phtml dosyasına veri göndermek için çok kolaydır.

Adım 1: - Öncelikle Model sınıfını yaratın ve Varien_Object öğesinden uzanıyor

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

Adım 2: - Şimdi contoller dosyasını açın ve kodu fonksiyona koyun.

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

Adım 3: - Phtml dosyasını açın ve kodu koyun.

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

Çıktı: - 'gaurav';

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.