Некоторые функции magento не работают за пределами magento (страница ajax) - PullRequest
2 голосов
/ 17 сентября 2011

Я пытаюсь использовать ajax для размещения списка товаров из определенного атрибута (производителя).

На моей странице ajax я пытаюсь использовать

$this->__('hi'); //not working

ошибка

Неустранимая ошибка: использование $ this, когда не в контексте объекта в /home/shared/nftn/NFTN/js/ajax/ajax_designer.php в строке 24

mage:__('hi'); //not working

ошибка

Неустранимая ошибка: вызов неопределенного метода Mage :: __ () в /home/shared/nftn/NFTN/js/ajax/ajax_designer.php в строке 23

я добавляю необходимые файлы вверху страницы

require "../../app/Mage.php";
umask(0);
Mage::app('default');
$layout = Mage::getSingleton('core/layout');

Даже эти функции тоже не работают

Mage::stripTags()

Mage::getLayout()

В чем проблема. Как я могу заставить ее работать

Спасибо

1 Ответ

3 голосов
/ 17 сентября 2011

Очевидно, что $this не имеет смысла, потому что вы не используете его изнутри объекта.У всех помощников есть эти функции, здесь я использую 'core', потому что он наиболее общий, но если вы пишете для своего собственного модуля, тогда используйте помощник вашего модуля - это помогает с переводом.

Mage::helper('core')->__('hello');
Mage::helper('core')->stripTags('world');

getLayout() не может работать из внешнего файла, потому что с этой страницей не связан ни один маршрутизатор / контроллер / действие, следовательно, нет используемого макета.


Более длинный, но немного более правильный способ - работа с контроллерами Magento.а не внешние файлы.Скажем, ваш модуль My_Module, а URL AJAX - www.example.com/mymodule/ajax/ ...

app / code / local / My / Module / etc / config.xml

<config>
    <frontend>
        <routers>
            <mymodule>
                <use>standard</use>
                <args>
                    <module>My_Module</module>
                    <frontName>mymodule</frontName>
                </args>
            </mymodule>
        </routers>
    </frontend>
</config>

app / code / local / My / Module / controllers / 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...