一些magento函数不在magento外部工作(ajax页面)

时间:2011-09-17 07:56:47

标签: magento

我正在尝试使用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()

问题是什么。我怎样才能让它发挥作用

由于

1 个答案:

答案 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范例。