2 votes

Remplacement du contrôleur dans Magento

Bonjour, j'ai besoin d'un contrôleur de base pour Magento.

Je veux remplacer un Mage\ImportExport\controllers\Adminhtml\ExportController.php

Dans mon community\compnyname\modulename\controllers\Adminhtml

c'est mon config.xml in \compnyname\modulename\etc

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <company_module>
            <version>1.0</version>
        </company_module>
    </modules>
    <global>
        <rewrite>
            <company_module>
                <from><![CDATA[#^/controller/adminhtml/#]]></from>
                <to>/controller/adminhtml/</to>
            </company_module>
        </rewrite>
    </global>
</config>

Voici le code de mon contrôleur dans \compnyname\modulename\controllers\Adminhtml\ExportController.php

<?php
require_once('/Mage/ImportExport/controllers/Adminhtml/ExportController.php');
class company_module_ImportExport_Controller_Adminhtml_ExportController extends Mage_ImportExport_Adminhtml_ExportController
{
    function indexAction()
    {
        echo "i am called";die;
    }
}
?>

S'il vous plaît aidez-moi dans le remplacement d'un contrôleur

Où est le problème dans mon code ?

9voto

hesselbom Points 1747

Une telle réécriture est obsolète depuis Magento 1.3 (2009). Vous pouvez en savoir plus à ce sujet ici .

Ce que vous voudriez faire à la place ressemble à ce qui suit :

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <companyname_exportproduct before="Mage_ImportExport_Adminhtml">Companyname_ExportProduct_Adminhtml</companyname_exportproduct>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

Votre nom de classe et votre exigence ont l'air un peu faux aussi. Et c'est une bonne pratique de ne pas terminer les fichiers de classe php avec une balise php end, car cela pourrait accidentellement inclure un espace qui perturberait l'ordre des en-têtes envoyés.

Ceci étant dit, je changerais votre fichier de classe en :

<?php
require_once('Mage/ImportExport/controllers/Adminhtml/ExportController.php');
class Companyname_ExportProduct_Adminhtml_ExportController extends Mage_ImportExport_Adminhtml_ExportController
{
    function indexAction()
    {
        echo "i am called";die;
    }
}

Et juste au cas où vous auriez oublié, j'ai inclus le fichier que vous devriez avoir dans app/etc/modules pour rendre votre module actif :

<config>
    <modules>
        <Companyname_ExportProduct>
            <active>true</active>
            <codePool>community</codePool>
        </Companyname_ExportProduct>
    </modules>
</config>

2voto

Nikhil_K_R Points 1171

Consultez les liens ci-dessous.
Lien 1
Lien 2

J'espère que cela pourra vous aider.

2voto

ADynaMic Points 369

Il s'agit d'une petite notification sur le chemin d'inclusion du contrôleur.

Ce chemin d'inclusion peut provoquer des erreurs si le Mode compilateur Magento est activé.

require_once 'Mage/ImportExport/controllers/Adminhtml/ExportController.php';

Au lieu de cela, c'est bon à utiliser

require_once Mage::getModuleDir('controllers', 'Mage_ImportExport').DS.'Adminhtml_ExportController.php';

Ce sera plus sûr. J'espère que cela vous aidera

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