题
我需要一个空白页面来接收ajax帖子并返回json。
如果我在后端的任何页面下方运行代码,该链接将打开一个空白页面,该页面在我的控制器和路由器上设置。
<?php echo Mage::helper('adminhtml')->getUrl('installments/adminhtml_ajax/'); ?>
但是,如果我遇到前端的任何页面,URL 的键都不一样,我会被定向到仪表板。
我不知道如何获取前端的正确 URL,有人会有一个可行的想法吗?
例子:
Backend = installments/adminhtml_ajax/index/key/000085c50c4882df8a9cae52c8392227/
Frontend = installments/adminhtml_ajax/index/key/99edadac5bc5bb1e2421d3be38db525e/
路由器
<frontend>
<routers>
<installments>
<use>admin</use>
<args>
<module>Dexxtz_Installments</module>
<frontName>installments</frontName>
</args>
</installments>
</routers>
</frontend>
<admin>
<routers>
<installments>
<use>admin</use>
<args>
<module>Dexxtz_Installments</module>
<frontName>installments</frontName>
</args>
</installments>
</routers>
</admin>
已经改变了标准的前端,但没有任何改变。
解决方案
这 key
url 中的内容是根据管理会话生成的。
而且您无法共享管理和前端会话,这就是为什么从前端进行调用时您会得到不同的会话密钥。
无论如何,从前端调用后端操作并不是一个好的做法。
您应该有 2 个独立的控制器,一个用于后端,一个用于前端。
为了不重复代码,您可以将所有内容放入助手的方法中,然后在两个控制器中调用该方法。
其他提示
您的前台和管理员 <routers>
(<frontName>installments</frontName>
) 不应该相同。
它们是配置管理模块的两种方法
1)给它一个不同的正面名称
<admin>
<routers>
<installments>
<use>admin</use>
<args>
<module>Dexxtz_Installments</module>
<frontName>admin_installments</frontName>
2) 将模块放在 adminhtml 之前/之后
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Company_Adminhtml before="Mage_Adminhtml">Company_Adminhtml</Company_Adminhtml>