0

我试图弄清楚 Magento 的调度系统是如何工作的。

我想从应用程序目录之外分派布局的某个部分(例如正文)。

到目前为止我所拥有的;

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

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

$request->setRequestUri($myRequestUri);

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

调度顺利,但我需要把它剥离到身体或某个块。此外,应该返回生成的 HTML,而不是直接输出(最好不要使用输出缓冲)。

// 罗兰

编辑:我已经添加了我取得的进展,但仍然给我留下了一些问题。

4

2 回答 2

1

我还没有尝试过,但你可以打破惯例,将你自己的 URL 粉碎到 $_SERVER['REQUEST_URI'] 中。它被认为是糟糕的形式,但我会在破解核心之前这样做。

编辑:根据您的编辑,很高兴您得到一些回应。所以现在的问题是你有一个页面上返回的所有 HTML 吗?对于某些页面,去除 HTML 可能没有意义。我们实际上试图检索什么信息。

所以,如果你真的需要剥离一个页面,你需要做的就是修改页面的布局。此信息存储在布局 xml 文件中。这将需要进行一些修改,但想法是添加一个检查命令行操作的模块(isset($_SERVER['argc']) 可以工作),然后加载一个自定义句柄$this->getLayout()->getUpdate()->addHandle('my_custom_handle');( phtml 文件回显标题信息。在不破解核心文件的情况下可靠地执行这将是有问题的,所以我建议在默认情况下查看创建一个不包含信息的新页面。

希望有帮助,乔

于 2010-02-26T12:46:48.170 回答
0

感谢乔帮助我,与此同时,我再次取得了很大的进步,但还没有;-)

我真正想要实现的是可以发送任何magento页面。例如,对 /customer/account/login 的有效 http post 请求仍应让我登录。

除了渲染响应的主体。我不希望布局默认呈现,而是我想以编程方式获取一个块(在相应的请求布局 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();
?>

最好在本地代码池中处理这个问题,但是我不确定扩展(如果可能的话)前端控制器是一个好主意。

我不知道布局更新句柄.. 布局可以更新吗?他们是什么意思...

于 2010-03-02T19:47:30.443 回答