Questa è una di quelle aree in cui non c'è una buona risposta. Magento stesso non fornisce un metodo/API esplicito per queste informazioni, quindi con qualsiasi soluzione è necessario esaminare l'ambiente e dedurre le cose.
stavo usando
Mage::app()->getStore()->isAdmin()
per un po ', ma si scopre ci sono alcune pagine di amministrazione (il direttore Magento Connect Package), dove questo non è vero. Per qualche ragione questa pagina imposta esplicitamente l'ID del negozio come 1, il che rende isAdmin
restituito come falso.
#File: app/code/core/Mage/Connect/controllers/Adminhtml/Extension/CustomController.php
public function indexAction()
{
$this->_title($this->__('System'))
->_title($this->__('Magento Connect'))
->_title($this->__('Package Extensions'));
Mage::app()->getStore()->setStoreId(1);
$this->_forward('edit');
}
Ci possono essere altre pagine con questo comportamento,
Un'altra buona scommessa è quello di verificare la "area" di proprietà del pacchetto di progettazione.
Sembra meno probabile che venga sovrascritta una pagina nell'amministratore, poiché l'area influisce sul percorso dei modelli di progettazione delle aree di amministrazione e dei file XML di layout.
Indipendentemente da ciò che si sceglie di dedurre dal contesto, creare nuovo modulo Magento, e aggiungere una classe di supporto ad esso
class Namespace_Modulename_Helper_Isadmin extends Mage_Core_Helper_Abstract
{
public function isAdmin()
{
if(Mage::app()->getStore()->isAdmin())
{
return true;
}
if(Mage::getDesign()->getArea() == 'adminhtml')
{
return true;
}
return false;
}
}
e poi ogni volta che avete bisogno di controllare se siete in l'amministratore, l'uso questo helper
if(Mage::helper('modulename/isadmin')->isAdmin())
{
//do the thing about the admin thing
}
questo modo, quando/se si scopre buchi nel vostro amministratore logica controllo, è possibile correggere tutto in un unico luogo centralizzato.
Grazie per le informazioni Alan! In realtà sto usando questo per personalizzare [la tua correzione IE9] (http://alanstorm.com/ie9_fix_for_magento), in quanto causava alcuni problemi sul frontend per i nostri progettisti. Funziona perfettamente nell'area dell'amministratore, quindi grazie anche per aver trovato questa soluzione :) –
Piccolo mondo! Inoltre, la risposta logica di beep qui sotto è probabilmente la soluzione migliore ** se ** è valida per la soluzione. (Ad esempio, se vuoi licenziare il tuo evento solo dal lato amministrativo). Se hai un singolo osservatore che fa cose sia sul frontend che sul backend, allora quanto sopra è un buon inizio. –
Beh, questo non controlla se uno script viene eseguito nel back-end, ma se c'è un amministratore registrato ... – feeela