Tengo un nuevo trabajo donde trabajo estrictamente en Magento todos los días ahora. No tengo experiencia previa con Magento, ¡así que ha sido un desafío decir lo menos hasta ahora!
Permítanme explicar brevemente la extensión que estamos construyendo.
Nos permitirá mostrar una ventana emergente / modal. El contenido HTML del Modal se almacenará en
unStatic Block
PÁGINA DE ADMINISTRADOR
Por lo tanto, el panel de administración consta de una nueva pestaña en System/Confuration/NUEVA PESTAÑA
El panel de administración le permite seleccionar en una lista desplegable en esa NUEVA PÁGINA DE PESTAÑAS el valor predeterminado Static Blockpara usar en estas secciones ...
HOME PAGEo HOME PAGE w/Items in Shopping Cart
ALL CATEGORY PAGESo ALL CATEGORY PAGES w/Items in Shopping Cart
ALL PRODUCTS PAGESo ALL PRODUCTS PAGES w/Items in Shopping Cart
ALL CMS PAGESo ALL CMS PAGES w/Items in Shopping Cart
SHOPPING CART PAGEo SHOPPING CART PAGE w/Items in Shopping Cart
VALORES POR DEFECTO
A continuación, las páginas reales de CMS , CATEGORÍA y PRODUCTO permiten la misma configuración que la página del Panel de administración, excepto que le permiten establecer STATIC BLOCKuna por elemento y anular la configuración predeterminada que teníamos en la configuración de administración anterior .
Hasta ahora tenemos el lado de administración de la extensión hecho. Tenemos todas las pestañas de administración para cada sección ... producto, categoría, CMS y página de configuración.
El siguiente paso será agregar a la misma extensión y hacer una Static Blockinserción en la página. Esto Static Blockserá responsable de ... Mostrar la correcta Static Blocken cada página según la configuración establecida en las áreas mencionadas ...
- Determinar la página en la que estamos y el tipo de página (cms, producto, inicio, categoría)
- Luego tendrá que leer todas las configuraciones personalizadas que se establecieron en las áreas mencionadas anteriormente.
- Si se determina que estamos en una
Categorypágina, tendremos que obtener la categoría específica real en la que estamos. Por ejemploCategory 3. Luego veremos si hay una configuración específica para esa categoría específica. ¡Si diceEnabledque buscaremos cuálStatic Blockestá guardado para esa categoría y lo mostraremos en nuestraStatic Blockpágina principal! - Si la categoría específica anterior se establece como
DisablednuestraModal Window, buscaremos más arriba en las configuraciones más globales para el modal y veremos si un modal está habilitado para todas las categorías. En caso afirmativo, veremos cuálStatic Blockestá configurado para mostrarse en todas las categorías. - Además de todo esto, realizará este proceso para cada uno de los tipos de página principal (producto, categorías, cms, inicio, carrito)
- También tendremos que verificar si el carrito de compras está vacío o no. SI no está vacío ... entonces tendremos que tenerlo en cuenta antes cuando comprobemos qué
Static Blockmostrar para esa página, ya que cada configuración permiteStatic Blockestablecer un carro vacío y 1 para el carro no vacío. (Sé que esta es una tarea enorme y difícil, pero tenemos el lado del administrador hecho principalmente. Solo necesito hacer la parte que tenga en cuenta a todos para determinar quéStatic Blockmostrar en qué página en particular.
Entonces, para llevarme en la dirección correcta, tengo un par de preguntas más pequeñas ...
- ¿Cómo puedo determinar dentro de mi
Static Blockcódigo (la parte PHP) en qué TIPO de PÁGINA estoy? Como mencioné, necesito saber si estoy en ... PÁGINA DE INICIO , PÁGINA DE CMS , PÁGINA DE CATEGORÍA , PÁGINA DE PRODUCTO o PÁGINA DE CARRITO . - Además del TIPO DE PÁGINA , necesito obtener la página real. Entonces, si estoy en la identificación del producto 1234, entonces necesito poder obtener la configuración (bloque estático establecido para esa página) para esa página en particular.
Sé que ha sido una publicación larga y posiblemente confusa. Si llegaste hasta aquí, gracias por tomarte tu tiempo para leer esto =)
Si puedes ayudarme con mi pregunta, cada pequeño trozo me acercará al objetivo final
A continuación hay un diagrama de flujo que hice sobre cómo necesitará trabajar mi módulo para determinar qué bloque estático insertar en la página

fuente

Mage_Widgetmódulo, ¿verdad?Mage_Widget? Necesito investigar eso tambiénRespuestas:
Además de lo que respondió @benmarks :
Aquí hay un pequeño código para verificar algunas de las condiciones que mencionó:
Para comprobar si el carrito está vacío o no usar
También preguntó si puede verificar la página actual dentro de un bloque CMS.
Probablemente no sea un buen enfoque (tendrías que incluir bloques personalizados, lo que anularía el propósito de usar bloques CMS en la primera página).
En cambio, es mejor verificar primero la página actual y luego elegir el bloque CMS para mostrar en función de eso.
EDITAR : corregido
Mage::app()->getRequest()->getFullActionName()para serMage::app()->getFrontController()->getAction()->getFullActionName()mencionado por @Joseph en los comentarios. ¡Gracias!fuente
Mage::app()->getRequest()->getFullActionName()de una plantilla de carrito da como resultado un error fatal o al menos lo hizo para mí en 1.7.0.2.$this->getAction()->getFullActionName()funcionó a la perfección!Muchos enfoques que podrías tomar. Recomiendo agregar su bloque a través del
<default>controlador de actualización de diseño, que lo haría disponible en todas las páginas. En el_prepareLayout()método de su bloque , puede determinar el alcance obteniendo el nombre completo de la acción actual del objeto de solicitud ($this->getRequest()->getFullActionName()) y usándolo para determinar el contexto.Los productos y categorías se registrarán en el registro. Su bloque también podría mirar los identificadores de actualización de diseño, que incluirán identificadores de ID de producto o de categoría.
fuente
Para detectar la página de inicio, debe utilizar la cadena de identificación (por ejemplo, "inicio") para que coincida con el valor de configuración, en lugar de la identificación numérica:
if ($ page-> getIdentifier () == Mage :: getStoreConfig ('web / default / cms_home_page')) { // Página de inicio }Aquí hay algunos otros:
$ fullActionName = Mage :: app () -> getFrontController () -> getAction () -> getFullActionName (); if ('checkout_onepage_index' == $ fullActionName) { // Revisa } if ('checkout_onepage_success' == $ fullActionName) { // Pago exitoso } if ('customer_account_login' == $ fullActionName) { // Iniciar sesión } if ('customer_account_logoutSuccess' == $ fullActionName) { // Cerrar sesión correctamente } if ('customer_account_create' == $ fullActionName) { // Crear cuenta de cliente } if (0 === strpos ($ fullActionName, 'catalogsearch_')) { // Buscar } if (0 === strpos ($ fullActionName, 'customer_account_') || 0 === strpos ($ fullActionName, 'customer_address_') || 0 === strpos ($ fullActionName, 'wishlist_') || 0 === strpos ($ fullActionName, 'newsletter_manage_') || 0 === strpos ($ fullActionName, 'review_customer_') || 0 === strpos ($ fullActionName, 'sales_order_') ) { // Página de la cuenta del cliente (probablemente hay otras) }Gracias por la útil información a todos!
fuente