Magento отправки за пределами приложения - PullRequest
0 голосов
/ 26 февраля 2010

Я пытаюсь выяснить, как именно работает диспетчерская система Magento.

Я хочу отправить определенную часть макета (например, тело) извне каталога приложения.

Что у меня до сих пор;

<?php
$app          = Mage::app();
$myRequestUri = '/checkout/cart';

$front        = $app->getFrontController();
$request      = $front->getRequest();

$request->setRequestUri($myRequestUri);

// dispatch everything
$front->dispatch();
?>

Диспетчеризация идет нормально, но мне нужно раздеть это до тела или определенного блока. Также сгенерированный HTML должен быть возвращен вместо непосредственного вывода (лучше не использовать буферизацию вывода).

// Роланд

Edit: Я добавил достигнутый прогресс, но у меня остались вопросы.

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

Я не пробовал этого, но вы можете нарушить соглашение и просто разбить свой собственный URL в $ _SERVER ['REQUEST_URI']. Это считается плохой формой, но я бы сделал это, прежде чем взломать ядро.

EDIT: Основываясь на ваших изменениях, рад, что вы получили ответ. Итак, теперь проблема в том, что у вас есть весь HTML, возвращаемый на странице? Для некоторых страниц может не иметь смысла удалять HTML. Какую информацию мы на самом деле пытаемся получить.

Итак, если вам действительно нужно раздеть страницу, вам нужно изменить макет страницы. Эта информация хранится в файлах макета XML. Это повлечет за собой значительные изменения, но идея состоит в том, чтобы добавить модуль, который проверяет работу командной строки (isset ($ _ SERVER ['argc']) может работать), а затем загружает пользовательский дескриптор ($this->getLayout()->getUpdate()->addHandle('my_custom_handle');), который сбрасывает все файлы phtml, которые отображают информацию заголовка. Это будет проблематично сделать надежно и без взлома основных файлов, поэтому я бы посоветовал взглянуть на создание новой страницы без информации по умолчанию.

Надеюсь, это поможет, Джо

0 голосов
/ 02 марта 2010

Спасибо, что помогли мне, Джо, тем временем я снова добился большого прогресса, но пока еще не достиг; -)

Чего я на самом деле хочу достичь, так это того, что любая страница magento может быть отправлена. Например, действительный http-запрос к / customer / account / login должен по-прежнему входить в систему.

За исключением визуализации тела ответа. Я не хочу, чтобы макет отображался по умолчанию, вместо этого я хочу получить блок (определенный в соответствующем запрашиваемом XML-макете) программным способом.

Пример короткого кода, как я его вижу.

<?php
// code from previous post
// - load, set request uri, dispatch

$someBlock = getABlock('breadcrumbs'); // e.g. name attribute value in the xml
echo $someBlock->toHtml();
?>

Лучше всего будет обрабатывать это в локальном пуле кода, однако я не уверен, что это хорошая идея - расширить (если это вообще возможно) фронт-контроллер.

Я не знал о ручках обновления макета. Макет может обновляться? Что они имеют в виду под этим ...

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