2011-04-28 21 views
9

Estoy tratando de actualizar el parámetro "tipo" de un bloque existente en mis XML de diseño de tema. En el ejemplo, me gustaría usar el bloque "catalog/rewrite_navigation" en lugar de "catalog/navigation" para el nombre de referencia "catalog.topnav".Bloque de actualización Escriba en las actualizaciones XML de diseño

He probado de varias maneras leyendo archivos PHP básicos para el diseño, bloques, actualizaciones, etc., pero no tuve éxito. Me encantaría evitar usar unsetChild y luego volver a crear un bloque.

La forma "normal" sería:

<reference name="top.menu"> 
     <action method="unsetChild"><name>catalog.topnav</name></action> 
     <block type="catalog/rewrite_navigation" name="catalog.topnav" template="catalog/navigation/top.phtml"/> 
    </reference> 

Pero ¿Ustedes tienen una pista para hacer algo como esto en su lugar:

<reference name="catalog.topnav"> 
     <action method="setType"><name>catalog/rewrite_navigation</name></action> 
    </reference> 

Con dicha actualización del tipo de bloque del catálogo .topnav se actualizará de "catálogo/navegación" a "catálogo/reescritura_navegación".

¡Muchas gracias por sus ideas!

Respuesta

7

Nunca he visto una sintaxis como esta, y sé que Magento crea el objeto antes de ejecutar acciones en él (porque necesita tener una instancia antes de poder ejecutar métodos en esa instancia). Eso me lleva a creer que no hay forma de hacer esto usando acciones.

También tenga cuidado de intentar hacerlo desarmando el bloque y volviéndolo a agregar. Cuando se ejecuta el diseño, es posible que otros bloques ya hayan agregado elementos secundarios a ese bloque, y simplemente se caerán cuando elimine el bloque.

La forma canónica de hacerlo es simplemente anulando el bloque catalog/navigation real, de modo que devuelve la clase que se propone. Si, por alguna razón, esto no funciona para usted (por ejemplo, alguien más ya anuló el bloqueo), es posible que deba modificar el archivo XML para reflejar su nuevo identificador de clase.

Espero que ayude!

+0

Sí, eso es lo que terminé con: volver a escribir la clase de bloque orignal. Siempre valió la pena preguntar. Gracias Joseph. –

Cuestiones relacionadas