我正在尝试使用ajax来放置特定属性(制造商)的产品列表。
在我的ajax页面中,我尝试使用
$this->__('hi'); //not working
错误
致命错误:在第24行的/home/shared/nftn/NFTN/js/ajax/ajax_designer.php中不在对象上下文中时使用$ this
mage:__('hi'); //not working
错误
致命错误:在第23行的/home/shared/nftn/NFTN/js/ajax/ajax_designer.php中调用未定义的方法Mage :: __()
我在页面顶部添加了所需的文件
require "../../app/Mage.php";
umask(0);
Mage::app('default');
$layout = Mage::getSingleton('core/layout');
即使这些功能也无效
Mage::stripTags()
Mage::getLayout()
问题是什么。我怎样才能让它发挥作用
由于
答案 0 :(得分:3)
显然$this
没有任何意义,因为你没有在对象中使用它。所有助手都有这些功能,在这里我使用'core'
,因为它是最通用的,但是如果你正在为自己的模块编写,那么使用模块的助手 - 它有助于翻译。
Mage::helper('core')->__('hello');
Mage::helper('core')->stripTags('world');
getLayout()
无法在外部文件中运行,因为没有与页面关联的路由器/控制器/操作,因此无法使用布局。
更长但更正确的方法是使用Magento的控制器而不是外部文件。假设您的模块为My_Module
,AJAX网址为www.example.com/mymodule/ajax/
...
应用/代码/本地/我/模块的/ etc / config.xml中强>
<config>
<frontend>
<routers>
<mymodule>
<use>standard</use>
<args>
<module>My_Module</module>
<frontName>mymodule</frontName>
</args>
</mymodule>
</routers>
</frontend>
</config>
应用/代码/本地/我/模块/控制器/ AjaxController.php 强>
<?php
class My_Module_AjaxController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->getResponse()->setBody($this->__('hi'));
}
}
对于更复杂的示例,请参阅Mage_CatalogSearch_AjaxController
中的app/code/core/Mage/CatalogSearch/controllers/AjaxController.php
,它使用块作为输出,更好地遵循MVC范例。