Magento Ajax - Как получить только часть тела? - PullRequest
15 голосов
/ 19 января 2010

Я пытаюсь использовать вызов ajax с Magento. Когда я вызываю страницу блока через Ajax, я получаю весь HTML, включая head, css, javascript и body. Как мне получить только часть тела?

1 Ответ

32 голосов
/ 19 января 2010

Если вы можете предоставить немного больше информации о том, на какую «блочную страницу» вы звоните, проще разобраться в проблеме.По умолчанию 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 и может подойти для вашего использования.

Если у вас все еще есть проблемы, дайте мне знать, и мы можем попробовать другие вещи.Надеюсь, это поможет.

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...