Esta es una de esas áreas donde no hay una buena respuesta. Magento no proporciona un método/API explícito para esta información, por lo que con cualquier solución necesitará examinar el entorno e inferir cosas.
que estaba usando
Mage::app()->getStore()->isAdmin()
por un tiempo, pero resulta que hay ciertas páginas de administración (el gerente Magento Conectar el paquete) que esto no es cierto. Por alguna razón, esta página establece explícitamente que el ID de la tienda sea 1, lo que hace que isAdmin
devuelva como 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');
}
Puede haber otras páginas con este comportamiento,
Otra buena apuesta es comprobar la propiedad "zona" del paquete de diseño.
Parece menos probable que se anule esta opción para una página que está en el administrador, ya que el área afecta la ruta a las plantillas de diseño de áreas de administración y los archivos XML de diseño.
Independientemente de lo que decida deducir del medio ambiente, crear un nuevo módulo de Magento, y añadir una clase de ayuda a que
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;
}
}
y luego cada vez que es necesario comprobar si estás en la administración, uso este helper
if(Mage::helper('modulename/isadmin')->isAdmin())
{
//do the thing about the admin thing
}
esta manera, cuando/si se descubre agujeros en la lógica de la comprobación de administración, se puede corregir todo en un lugar centralizado.
Gracias por la información Alan! De hecho, estoy usando esto para personalizar [su solución IE9] (http://alanstorm.com/ie9_fix_for_magento), ya que estaba causando algunos problemas en la interfaz para nuestros diseñadores. Funciona perfectamente en el área de administración, así que gracias por encontrar esa solución también :) –
¡Pequeño mundo! Además, la respuesta de la lógica de pitido a continuación es probablemente su mejor opción ** si ** cumple con su solución. (es decir, si solo desea activar su evento en el lado de administrador). Si tiene un solo observador que hace cosas tanto en la interfaz como en el servidor, entonces lo anterior es un buen comienzo. –
Bueno, eso no comprueba si un script se ejecuta en el back-end, pero si hay un administrador conectado ... – feeela