Что я хочу достичь: нажав на ссылку или изображение продукта (по крайней мере в определенных областях), чтобы открыть всплывающее окно с полной информацией о продукте (в основном все содержимое страницы просмотра продукта).
То, что я делал / пытался:
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();