Я пытаюсь использовать ajax-вызов с Magento. Когда я вызываю блок-страницу через Ajax, я получаю все HTML, включая head, css, javascript и body. Как получить только часть тела?
Magento Ajax - Как получить только часть тела?
Ответ 1
Если вы можете предоставить немного больше информации о том, какая "блочная страница", которую вы вызываете, может быть проще распознать проблему. По умолчанию Magento включает тег <default>
макета для всех страниц, что даст вам верхние и нижние колонтитулы страниц даже при вызовах AJAX.
Чтобы отправить страницу без дополнительной информации, у вас есть несколько вариантов. Во-первых, вы можете просто установить выход вручную самостоятельно, полностью избегая системы компоновки. Magento делает это для одностраничной проверки:
$result = array( 'foo' => 'foo', 'bar' => 'bar', );
$this->getResponse()->setBody(Zend_Json::encode($result));
Вы также можете изменить этот метод, чтобы использовать собственный обработчик макета, например:
protected function loadPage() {
$layout = $this->getLayout();
$update = $layout->getUpdate();
$update->load('your_custom_handle');
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput();
$result = array( 'outputHtml' => $output, 'otherVar' => 'foo', );
$this->getResponse()->setBody(Zend_Json::encode($result));
}
И в вашем файле макета:
<your_custom_handle>
<remove name="right"/>
<remove name="left"/>
<block type="module/block" name="root" output="toHtml" template="module/template.phtml"/>
</your_custom_handle>
Второй вариант, если вы хотите использовать макеты, заключается в определении альтернативного макета по умолчанию. Когда вы вызываете $this->loadLayout();
в контроллерах Magento, вы можете фактически указать дескриптор, отличный от <default>
, чтобы спуститься. Примером контроллера продукта Magento может быть:
$this->loadLayout('popup');
Этот макет определяется по умолчанию в файле макета main.xml
и отображает шаблон popup.phtml
и может быть подходящим для вашего использования.
Если у вас все еще есть проблемы, сообщите мне, и мы можем попробовать другие вещи. Надеюсь, что это поможет.
Спасибо, Джо