Надішліть дані з контролера до 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файл?
Мохаммед Файсал

Ви $this->myvar
отримаєте

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, для швидкого перегляду продуктів.
Shathish

@Shathish. Це вже інше питання. Ви можете надіслати відповідь як JSON і використовувати значення в обробнику відповідей AJAX.
Маріус

Так, я використовую JSON, щоб повернути вміст блоку (something.phtml) та оновити div з цими деталями на сторінці списку, як я можу передати змінну від мого контролера до something.phtml? насправді я роблю це в даний час, використовуючи метод $ block-> призначити (), який я вважаю, що це не правильний шлях (так як це щільна зв'язка - виправте мене, якщо я помиляюся) або я опублікую це як питання?
Шатіш

@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.
Фабіан Блешшмідт

-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каталозі модуля.
Фабіан Шменглер

-4

це дуже просто надсилати дані з контролера до файлу phtml.

Крок 1: - Спочатку створіть клас 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();

Крок 3: - Відкрийте файл phtml і поставте код.

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

Вихід: - 'gaurav';

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.