Wyślij dane z kontrolera do phtml


22

Mam ten kontroler:

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

Chciałbym uzyskać dostęp $somethingdo mojego pliku .phtml, jak to zrobić? (lub inaczej: jak mogę uzyskać dostęp $somethingdo mojego pliku .phtml)

Odpowiedzi:


21

Można to zrobić na kilka sposobów.

Przypisz bezpośrednio do bloku:

$block->assign($var);

lub

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

Następnie możesz uzyskać do niego dostęp w pliku phtml w następujący sposób:

$this->myvar

Użyj rejestru Mage:

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

a następnie użyj go w następujący sposób:

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

2
używałeś, $block->assign($var)ale w jaki sposób zostaną odzyskane w phtmlpliku?
Mohammad Faisal

Można uzyskać dostęp za pośrednictwem $this->myvarz pliku szablonu
philwinkle

1
Wierzę, że to Mage::register($key, $value, ...). A więc Mage::register('custom_var', $var)?
musicliftsme

4
Powinno być $block->assign('myvar',$var);, prawda?
fritzmg

@ philwinkle Czy Mage::register('custom_var', $var); zapisuje wartość w sesji i może ona być dostępna z innego pliku szablonu oprócz bieżącego szablonu akcji?
Butterfly

18

Twój phtml musi być renderowany przez blok. Blok musi mieć nazwę w układzie.
Możesz to zrobić po zadzwonieniu$this->loadLayout();

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

Następnie możesz pobrać wartość z phtmlpliku, np

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

to nie działa dla mnie :(, mam kontroler, który zwraca identyfikator produktu przez AJAX, do szybkiego podglądu produktów.
Shathish 16.09.13

@Shathish. To inny problem. Możesz renderować odpowiedź jako JSON i używać wartości w module obsługi odpowiedzi AJAX.
Marius

Tak, używam JSON, aby zwrócić zawartość bloku (coś.phtml) i zaktualizować div z tymi szczegółami na stronie listy, jak mogę przekazać zmienną z mojego kontrolera do pliku coś.phtml? faktycznie robię to obecnie za pomocą metody $ block-> assign (), co moim zdaniem nie jest właściwym sposobem (ponieważ jest to ścisłe sprzężenie - popraw mnie, jeśli się mylę), czy powinienem opublikować to jako pytanie?
Shathish,

@shathish może zadałbyś inne pytanie i mam nadzieję, że nie zostanie ono oznaczone jako duplikat.
Marius

3

W przypadku, gdy ludzie tęsknią, istnieje jeszcze jeden sposób, aby to zrobić

za pomocą sesji

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

źródło


Nawet jeśli masz dane w sesji, aby użyć ich później, zalecamy użycie $block->setSomething()lub $block->assign(). Wydaje się, że to „za dużo kodu” i powinno się unikać jak największej ilości php.
Fabian Blechschmidt

-1

Jeśli jesteś w swoim kontrolerze bloku.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Następnie w pliku .phtml

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

   ?>

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

To, co nazywacie „kontrolerem bloku”, w Magento nazywane jest po prostu „blokiem”. Pytanie dotyczyło akcji kontrolera znalezionych w controllerskatalogu modułu.
Fabian Schmengler,

-4

bardzo łatwo jest przesłać dane z kontrolera do pliku phtml.

Krok 1: - Najpierw utwórz klasę Model i rozciąga się od Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

krok 2: - Teraz otwórz plik contoller i wstaw kod do funkcji.

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

Krok 3: - Otwórz plik phtml i umieść kod.

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

Wyjście: - „gaurav”;

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.