2 votes

Certaines fonctions de Magento ne fonctionnent pas en dehors de Magento (page ajax).

J'essaie d'utiliser l'ajax pour placer la liste des produits à partir d'un attribut particulier (fabricant).

Dans ma page ajax, j'essaie d'utiliser

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

erreur

Erreur fatale : Using $this when not in object context in /home/shared/nftn/NFTN/js/ajax/ajax_designer.php on line 24

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

erreur

Erreur fatale : Appel à une méthode non définie Mage::__() in /home/shared/nftn/NFTN/js/ajax/ajax_designer.php on line 23

J'ajoute les fichiers requis en haut de la page.

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

Même ces fonctions ne fonctionnent pas non plus

Mage::stripTags()

Mage::getLayout()

Quel était le problème ? Comment puis-je le faire fonctionner ?

Merci

3voto

clockworkgeek Points 25923

Évidemment $this n'a pas de sens car vous ne l'utilisez pas à l'intérieur d'un objet. Tous les helpers ont ces fonctions, ici j'utilise 'core' parce qu'il est le plus générique, mais si vous écrivez pour votre propre module, utilisez l'aide de votre module - elle facilite la traduction.

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

getLayout() ne peut pas travailler à partir d'un fichier externe car il n'y a pas de routeur/contrôleur/action associé à la page, donc pas de mise en page à utiliser.


La méthode la plus longue mais légèrement plus correcte consiste à travailler avec les contrôleurs de Magento plutôt qu'avec des fichiers externes. Disons que votre module est My_Module et l'URL AJAX est www.example.com/mymodule/ajax/ ...

app/code/local/Mon-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/Mon/Module/controllers/AjaxController.php

<?php

class My_Module_AjaxController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->getResponse()->setBody($this->__('hi'));
    }
}

Pour un exemple plus complexe, voir Mage_CatalogSearch_AjaxController en app/code/core/Mage/CatalogSearch/controllers/AjaxController.php Il utilise des blocs comme sortie, ce qui correspond mieux au paradigme MVC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X