php zend-framework zend-view

php - Modificar pila en Zend HeadScript View Helper



zend-framework zend-view (1)

En el método toString() de Zend_View_Helper_HeadScript noté un bucle foreach() en $this , así que lo intenté y funcionó. Aquí hay una extensión de HeadScript que escribí que ilustra la solución:

class My_View_Helper_HeadScript extends Zend_View_Helper_HeadScript { public function toString($indent = null) { $files = array(); foreach ($this as $key => $item) { if (!empty($item->attributes) && array_key_exists(''src'', $item->attributes) && (''scripts'' == substr($item->attributes[''src''], 1, 7))) { $files[] = $item->attributes[''src'']; unset($this[$key]); } } if (0 < count($files)) { $this->prependFile(''/combo.php?type=scripts&files='' . implode('','', $files)); } return parent::toString($indent); } }

En Bootstrap.php las siguientes líneas apuntan a mis ayudantes:

$this->bootstrap(''view''); $view = $this->getResource(''view''); $view->addHelperPath(''My/View/Helper'', ''My_View_Helper'');

En mi diseño, tengo esta línea:

<?php echo $this->headScript(); ?>

Si mi solución no está clara de ninguna manera, avíseme y la actualizaré para aclararla.

Intento atacar este problema desde un ángulo completamente diferente, porque no parece que pueda alcanzar mi objetivo de esa manera.

Quiero recorrer la pila de elementos en HeadScript View Helper y hacer modificaciones en ella. La documentación para este y algunos de los otros ayudantes de vista hace esta afirmación:

HeadScript anula cada uno de los parámetros append (), offsetSet (), prepend () y set () para imponer el uso de los métodos especiales como se indica anteriormente. Internamente, almacena cada elemento como un token stdClass, que luego serializa utilizando el método itemToString (). Esto le permite realizar comprobaciones en los elementos en la pila, y opcionalmente modificar estos elementos simplemente modificando el objeto devuelto.

Entonces, ¿dónde se devuelve este "objeto"? Me falta una pieza del rompecabezas aquí.

¡Gracias por tu ayuda!