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.