2010-01-19 3 views

ответ

31

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

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

Спасибо, Джо

+0

Спасибо за это. Сохранял мне кучу времени. – Travis

+0

Обратите внимание, что если вы копируете и вставляете пример файла макета, обязательно измените 'type =" module/block "' на фактический тип блока пурпурного цвета, например 'type =" page/html "', или определенный тип блока для вас модуль. – zlovelady

+0

блестящий, простой, эффективный ... Мне это нравится. Спасибо Joe – OSdave

Смежные вопросы