MVC в Magento

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

10.07.2011 18:46

Я много раз слышал Magento рядом с Zend Framework. И теперь, стою в тупике, как же работать в magento с моделью MVC. В ZF были конкретные контролеры, действия контролеров и соответствующие скрипты вывода view. В magento в модуле так же имеется контролер, и мне нужно для действия index отобразить страницу в админке с некоторыми данными, которые рассчитываются в этом самом действии. Как я понял страницу можно формировать следующим образом
    public function indexAction(){
		
        $this->loadLayout();
		$this->_setActiveMenu('mynamespace/mymodule_menu_manager');
    	$block = $this->getLayout()->createBlock(
		    'Mage_Adminhtml_Block_Template',
		    'my_block_name_here',
			array('template' => 'mynamespace/mymodule/manager/header.phtml')
		);
	$this->getLayout()->getBlock('content')->append($block);
	
	$this->renderLayout();
    }

Удобно, можно собрать страницу из таких блоков, но, как в этих блоках выводить данные из контроллера. В ZF нужно было написать примерно следующее
$this->view->var = "То, что нужно вывести.";

и скрипт view знал, что это за переменная. Как это сделать в magento?

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

10.07.2011 18:49

Просто посмотрите программный код какого либо модуля.

#3 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

10.07.2011 20:02

Смотрим стандартный DashboardController из app\code\core\Mage\Adminhtml\controllers\
    public function indexAction()
    {
        $this->_title($this->__('Dashboard'));

        $this->loadLayout();
        $this->_setActiveMenu('dashboard');
        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Dashboard'), Mage::helper('adminhtml')->__('Dashboard'));
        $this->renderLayout();
    }

никаких блоков не создается, однако главная страница dashboard грузится именно из этого контролера, и также по файлу Dashboard.php из app\code\core\Mage\Adminhtml\Block\. Где связь между ними? И так везде, в контроллерах нет переменных для вывода, все делается в дочерних блоках на сколько я вижу.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

10.07.2011 20:23

Система сопоставляет каждой странице магазина (как витринной, так и административной) специальные дескрипторы (handles).
Вы можете увидеть их, используя модуль Layout Viewer.
Руководствуясь дескрипторами текущей страницы, система отбирает применимые к странице макетные правила.
Получить подробную информацию вы можете в книгах Magento 1.3 Theme Design и Magento 1.4 Theme Design, которые эксклюзивно переведены на русский язык и опубликованы на этом форуме.

Поделиться темой: