Отправить данные с контроллера на 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');
philwinkle
источник
2
вы использовали, $block->assign($var)но как будет восстановлен в phtmlфайле?
Мохаммед Фейсал
Вы получите доступ через $this->myvarчерез файл шаблона
philwinkle
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 с этими подробностями на странице списка, как я могу передать переменную из моего контроллера в нечто .phtml? на самом деле я делаю это в настоящее время, используя метод $ block-> assign (), который, по моему мнению, является неправильным (так как это тесная связь - поправьте меня, если я ошибаюсь), или я должен опубликовать это как вопрос?
Шатиш
@shathish Может быть, вы бы задали другой вопрос и надеялись, что он не будет помечен как дубликат.
Мариус
3

Если вы пропустили людей, есть еще один способ сделать это

используя сеансы

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

источник

epynic
источник
Даже если у вас есть данные в сеансе, чтобы использовать их позже, я рекомендую использовать $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>
Wolfgang
источник
То, что вы называете «контроллером блоков», просто называется «блоком» в Magento. Вопрос был о действиях контроллера, найденных в controllersкаталоге модуля.
Фабиан Шменглер
-4

это очень легко отправить данные из контроллера в файл phtml.

Шаг 1: - Сначала создайте класс Model и расширяйте его от Varien_Object.

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

Шаг 2: - Теперь откройте файл контроллера и поместите код в функцию.

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

Шаг 3: - Откройте файл phtml и введите код.

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

Вывод: - «гаурав»;

гаурав тяги
источник