Magento Demande - Frontend ou Backend?
Comment puis-je savoir si la requête courante est pour une interface ou interface de la page? Ce chèque sera fait à l'intérieur d'un observateur, j'ai donc accès à l'objet de la requête si cela aide.
J'ai considéré la vérification de Mage::getSingleton('admin/session')->getUser()
mais je ne pense pas que c'est une méthode très fiable. Je suis l'espoir d'une meilleure solution.
Vous devez vous connecter pour publier un commentaire.
C'est l'un de ces domaines où il n'y a pas de bonne réponse. Magento lui-même ne fournit pas une méthode explicite/API pour cette information, donc avec n'importe quelle solution vous aurez besoin d'examiner l'environnement et en déduire des choses.
J'ai été en utilisant
pendant un certain temps, mais il s'avère que certaines pages d'administration (le Magento Connect Package manager) où ce n'est pas vrai. Pour certaines raisons, cette page définit explicitement le magasin id à 1, ce qui rend
isAdmin
retour comme faux.Il y a peut être d'autres pages avec ce comportement,
Une autre bonne chose à faire est de vérifier la "zone" de la propriété de l'ensemble de conception.
Cela semble moins susceptible d'être remplacée pour une page dans l'admin, depuis la zone des impacts le chemin d'accès à la zone d'admin modèles de conception et de mise en page des fichiers XML.
Peu importe ce que vous choisissez de déduire de l'environnement, de créer un nouveau module Magento, et ajouter une classe d'assistance à
et puis à chaque fois que vous devez vérifier si vous êtes dans l'admin, utilisez cette fonction d'aide
De cette façon, quand/si vous découvrez des trous dans votre admin logique de la vérification, vous pouvez corriger le tout dans un seul endroit centralisé.
return (bool) Mage::getSingleton('admin/session')->getUser();
une bonne méthode?return Mage::app()->getStore()->isAdmin() || (bool) Mage::getSingleton('admin/session')->getUser();
une méthode infaillible?Si vous êtes en mesure d'utiliser un observateur, vous pouvez limiter la 'adminhtml événement de la zone.
Avoir un regard sur les méthodes à l'intérieur de
Mage/Core/Model/Store.php
que vous souhaitez utiliser:En conjonction avec
À agir comme un secours où le magasin ID n'est pas défini comme vous vous attendez (Magento connect, etc.)
J'aime bip logique de réponse - il de sens que dans le contexte d'observateurs. J'aime aussi Alan point qu'il n'y a aucun moyen de connaître l'état d'administration dans tous les contextes, qui est une fonction de "l'admin" un état, qui est entré après l'application et avant de contrôleur sont initialisés.
Magento administration de l'état est effectivement créée à partir du contrôle de l'envoi à un admin contrôleur d'action; voir
Mage_Adminhtml_Controller_Action::preDispatch()
. C'est la méthode qui déclenche l'adminhtml_controller_action_predispatch_start
événement, qui est consommé parMage_Adminhtml_Model_Observer::bindStore()
, qui est l'endroit où l'admin de la boutique est d'abord "set". En fait, l'observateur de configuration de zones (adminhtml vs frontend) "œuvres" en raison de l'action principale de la classe contrôleur - voirMage_Core_Controller_Varien_Action::preDispatch()
, spécifiquementMage::app()->loadArea($this->getLayout()->getArea());
- il suffit de noter que l'objet de mise en page a son information sur les alentours situé dans le adminhtml predispatch.Peu importe comment vous le trancher, l'admin comportement sur lesquelles nous nous appuyons dans de nombreux contextes - même quelque chose de plus haut niveau comme l'observateur d'événements système s'appuie sur la commande de la structure de contrôle.
Dans votre observateur définition:
tl;dr: Utilisation d'un observateur, même utiliser le même observateur modèle, mais passe dans le contexte en spécifiant un autre appel de méthode.
HTH.
modifier: ajout d'un exemple de code utilisant bip logique de config comme un point de départ
Si je me trompe ou pas (mais je l'ai testé), certains événements (comme controller_front_init_before) ne peut être écrasé à l'intérieur mondiale nœud. En conséquence, cette substitution affectera à la fois le frontend et backend.
Puis viennent d'Alan et benmark de la solution à la rescousse pour spécifier si vous souhaitez appliquer l'observateur sur le frontend seulement ou backend seulement.