Question

J'ai besoin d'une page vierge pour recevoir un message ajax et renvoyer json.

Si j'exécute le code sous n'importe quelle page du backend, le lien ouvre une page vierge, configurée sur mon contrôleur et mon routeur.

<?php echo Mage::helper('adminhtml')->getUrl('installments/adminhtml_ajax/'); ?>

Mais si je tombe sur n’importe quelle page du frontend, la clé de l’url n’est pas la même et je suis dirigé vers le tableau de bord.

Je ne sais pas comment obtenir la bonne URL pour le frontend, quelqu'un aurait-il une idée qui fonctionne ?

Exemples:

Backend  = installments/adminhtml_ajax/index/key/000085c50c4882df8a9cae52c8392227/
Frontend = installments/adminhtml_ajax/index/key/99edadac5bc5bb1e2421d3be38db525e/

Routeurs

<frontend>
    <routers>
        <installments>
            <use>admin</use>
            <args>
                <module>Dexxtz_Installments</module>
                <frontName>installments</frontName>
            </args>
        </installments>         
    </routers>
</frontend>
<admin>
    <routers>
        <installments>
            <use>admin</use>
            <args>
                <module>Dexxtz_Installments</module>
                <frontName>installments</frontName>
            </args>
        </installments>
    </routers>
</admin>

J'ai déjà changé l'interface pour le standard et rien n'a changé.

Était-ce utile?

La solution

Le key dans l'URL est généré en fonction de la session d'administration.
Et vous ne pouvez pas partager les sessions d'administration et du frontend, c'est pourquoi lorsque vous passez un appel depuis le frontend, vous obtenez une clé de session différente.

Quoi qu'il en soit, ce n'est pas une bonne pratique d'appeler des actions backend depuis le frontend.
Vous devriez avoir 2 contrôleurs distincts, un pour le backend et un pour le frontend.
Afin de ne pas dupliquer le code, vous pouvez tout mettre dans une méthode dans un assistant et simplement appeler cette méthode dans les deux contrôleurs.

Autres conseils

Votre front et votre administrateur <routers> (<frontName>installments</frontName>) ne devrait pas être le même.

Il existe deux façons de configurer les modules d'administration

1) Lui donner un nom de façade différent

  <admin>
    <routers>
        <installments>
            <use>admin</use>
            <args>
                <module>Dexxtz_Installments</module>
                <frontName>admin_installments</frontName>

2) Mettez votre module avant/après adminhtml

<admin>
      <routers>
        <adminhtml>
            <args>
                <modules>
                    <Company_Adminhtml before="Mage_Adminhtml">Company_Adminhtml</Company_Adminhtml>
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top