Php 将分层导航和工具栏置于Magento之外
我试图从magento之外的php获取类别链接的分层导航 我可以创建所有类别的html,但问题是分层链接是使用frontcontroller的参数创建的(与工具栏链接的方式相同) 如果我选择了一个过滤器,那么分层链接的创建就不会考虑它,而且分层链接也没有类别url 我试图在我的php浏览器上重新创建magento中类别页面的frontcontroller,但我没有成功。。。即使我重新创建$\u服务器,但控制器似乎找不到路由器 在php中,如果我使用mage::run,它会正确地执行calcule操作,但是mage::run会做出响应,而我不需要,因为我只需要分层导航的xml输出 如果我使用mage::app,我可以得到类别html,但是控制器的计算不正确,尽管它是相同的$\u服务器[request\u uri],并且没有正确的链接。前控制器没有动作 在frontcontroller请求中,我看到了两个区别:在magento中dispathed为true,但在php中为no,在magento中de request_uri被重写为catalog/category/view/id/7?color=99,而在php中不是hombre.html?color=99 我遗漏了什么,我需要初始化前控制器吗?o重新初始化Php 将分层导航和工具栏置于Magento之外,php,html,magento,Php,Html,Magento,我试图从magento之外的php获取类别链接的分层导航 我可以创建所有类别的html,但问题是分层链接是使用frontcontroller的参数创建的(与工具栏链接的方式相同) 如果我选择了一个过滤器,那么分层链接的创建就不会考虑它,而且分层链接也没有类别url 我试图在我的php浏览器上重新创建magento中类别页面的frontcontroller,但我没有成功。。。即使我重新创建$\u服务器,但控制器似乎找不到路由器 在php中,如果我使用mage::run,它会正确地执行calcule
或者有一种不同的方式从magento外部获得分层导航???我发现了问题和解决方案 在启动magento时,它调用重写URL,目的是在路由URL上获得转换后的友好URL html?color=99在catalog/category/view/id/7?color=99上转换 因此,第一个是调用
Mage::getModel('core/url_rewrite')->rewrite()现在,我们的frontcontroller请求已正确转换URL
在此之前,frontendcontroller被初始化,在其所有路由器中执行函数匹配,以尝试查找控制器和操作
$frCont = Mage::app()->getFrontController();
foreach ($frCont->getRouters() as $router) {
if ($router->match($frCont->getRequest())) {
break;
}
}
通过这两个步骤,我初始化了frontcontroller,就像我访问url“hombre.html?color=99”一样,但事实上我在我的服务文件夹中的另一个php上
但是match函数在初始化frontcontroller并获取路由器、操作和路由后,默认情况下会分派操作,因此它会生成所有html输出,并且无法处理布局。。。因此,我创建了Mage_Core_Controller_Varien_Router_标准类的本地副本,并更新了功能匹配:
public function match(Zend_Controller_Request_Http $request){
.
.
.
$controllerInstance->dispatch($action);
return true;
}
为了这个
public function match(Zend_Controller_Request_Http $request, $dispatchAction = true){
.
.
.
if($dispatchAction==true){
$controllerInstance->dispatch($action);
}
return true;
}
因此,在我的php服务中,我有以下代码:
Mage::getModel('core/url_rewrite')->rewrite();
$frCont = Mage::app()->getFrontController();
foreach ($frCont->getRouters() as $router) {
if ($router->match($frCont->getRequest(),false)) {
break;
}
}
我初始化了frontcontroller,并分配了操作、路由器、参数等,就像我从目录URL访问,但没有调度操作一样,然后我可以用布局对象写入我想要的对象
希望它能帮助任何人