我正在试图弄清楚Magento的调度系统是如何运作的。
我想从应用程序目录外部调度布局的某个部分(例如正文)。
到目前为止我有什么;
<?php
$app = Mage::app();
$myRequestUri = '/checkout/cart';
$front = $app->getFrontController();
$request = $front->getRequest();
$request->setRequestUri($myRequestUri);
// dispatch everything
$front->dispatch();
?>
调度运行正常,但我需要将其拆分为正文或某个块。 还应该返回生成的HTML而不是直接输出它(最好不要使用输出缓冲)。
//罗兰
编辑: 我已经添加了我所取得的进展,stil给我留下了一些问题。
答案 0 :(得分:1)
我没有试过这个,但你可以打破常规,只需将你自己的URL粉碎成$ _SERVER ['REQUEST_URI']。它被认为是糟糕的形式,但我会在破解核心之前做到这一点。
编辑: 根据您的编辑,很高兴您得到一些回复。所以现在的问题是你在页面上返回了所有HTML吗?对于某些页面,删除HTML可能没有意义。我们实际上试图检索哪些信息。
因此,如果您真的需要剥离页面,那么您需要做的是修改页面的布局。此信息存储在布局xml文件中。这需要进行相当多的修改,但想法是添加一个检查命令行操作的模块(isset($ _ SERVER ['argc'])可以工作),然后加载一个自定义句柄($this->getLayout()->getUpdate()->addHandle('my_custom_handle');
)它重置所有回显标题信息的phtml文件。如果没有黑客攻击核心文件,这将是有问题的,所以我建议默认情况下创建一个没有信息的新页面。
希望有所帮助, 乔
答案 1 :(得分:0)
感谢您帮助我,在此期间,我再次取得了很多进展,但仍然没有进展; - )
我真正希望实现的是可以调度任何magento页面。例如,对/ customer / account / login的有效http发布请求仍应登录。
除了呈现响应的正文外。我不希望默认情况下呈现布局,而是想以编程方式获取块(在相应的请求布局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();
?>
Best会在本地代码池中处理这个问题,但是我不确定扩展(如果它可能的话)前端控制器是个好主意。
我不知道布局更新句柄..布局可以更新吗?这对他们意味着什么......