Ajax в magento (блок просмотра продукта загрузки)

Что я хочу достичь: нажав на ссылку или изображение продукта (по крайней мере в определенных областях), чтобы открыть всплывающее окно с полной информацией о продукте (в основном все содержимое страницы просмотра продукта).

То, что я делал / пытался:

  • создал все вещи за пределами PHP-кода ajax (модуль, ссылки, шаблоны, переписывает)
  • создал контроллер ajax (к которому можно получить доступ по ссылке, подобной: http://test.com/index.php/ajaxproductview/ajax/index/id/2 ).
  • чтобы следовать различным учебникам (например, тому или иному ) – это помогло мне зайти так далеко. Но я не хочу загружать свой пользовательский блок, мне нужен блок (ы) представления продукта по умолчанию.
  • попытался добавить код в indexAction (). Он попадает туда, но код не работает. Я не получаю никаких ошибок / уведомлений / отчетов, просто то, что кажется бесконечным циклом, который убивает мой процессор.

     $body = $this ->getLayout() ->createBlock('product.info') // taken from catalog.xml ->toHtml(); $this->getResponse()->setBody($body); 

Все остальные страницы работают отлично, и это свежее пурпурно с только магнито и мой модуль установлен и активирован.

Моя функция AJAX просто получает этот ответ HTML, помещает его в div и открывает всплывающее окно.

Мой вопрос (ы) есть (есть) – как я могу установить идентификатор продукта, поэтому блок знает, какой продукт загрузить, и как я могу правильно загрузить этот блок. Я также попробовал нечто подобное:

Спасибо.

PS: Я тоже пробовал:

  $layout = $this->getLayout(); $update = $layout->getUpdate(); $update->load('catalog_product_view'); $layout->generateXml(); $layout->generateBlocks(); $output = $layout->getOutput(); // $output is an empty string 

Контроллер продукта использует помощник для установки активного продукта. Вы должны быть в состоянии сделать то же самое в своем контроллере!

Попробуйте это, прежде чем выполнять макет:

 $productId = (int) $this->getRequest()->getParam('id'); Mage::helper('catalog/product')->initProduct($productId, $this); 

Еще одна вещь, о которой нужно знать: если вы добавите блок, например блок product.info. Он нуждается в дополнительных дочерних блоках, если он вызывает их в своем файле шаблона.

Было бы проще использовать собственный XML-файл макета. Затем вы можете добавить конкретный макет для своего дескриптора действия (ваш дескриптор действия состоит из вашего узла маршрутизаторов в файле etc / config.xml вашего модуля в разделе <frontend><routers> <Yourmodule> , например, узел <Yourmodule> , обязательно <Yourmodule> его! то с подчеркиванием добавьте имя контроллера и имя действия, в вашем случае index_index) следующим образом:

 <yourmodule_index_index> <remove name="right"/> <remove name="left"/> <block type="catalog/product_view" name="root" output="toHtml" template="catalog/product/view.phtml"> <!-- Add all the child blocks you need --> </block> </yourmodule_index_index> 

Это делает view.phtml корневым блоком, который делает себя с помощью метода toHtml. Поэтому в действии вашего контроллера все, что вам нужно, это мои две строки выше, а затем:

 $this->loadLayout(); $this->renderLayout();