Изменить стек в помощнике по Zend HeadScript View
Я пытаюсь решить эту проблему с совершенно другой точки зрения, потому что не похоже, что я смогу достичь своей цели таким образом.
Я хочу перебрать стек элементов в помощнике вида HeadScript и внести в него изменения. Документация для этого и некоторых других помощников представления делает это утверждение:
HeadScript переопределяет каждый из методов append(), offsetSet(), prepend() и set(), чтобы обеспечить использование специальных методов, перечисленных выше. Внутренне он сохраняет каждый элемент как токен stdClass, который впоследствии сериализует с помощью метода itemToString(). Это позволяет выполнять проверки элементов в стеке и, при необходимости, изменять эти элементы, просто изменяя возвращаемый объект.
Итак, где же этот "возвращаемый объект"? Я скучаю по части головоломки здесь.
Спасибо за вашу помощь!
1 ответ
В toString()
метод Zend_View_Helper_HeadScript
Я заметил foreach()
цикл на $this
Я попробовал это, и это сработало. Вот расширение HeadScript, которое я написал, которое иллюстрирует решение:
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);
}
}
В Bootstrap.php
следующие строки указывают на моих помощников:
$this->bootstrap('view');
$view = $this->getResource('view');
$view->addHelperPath('My/View/Helper', 'My_View_Helper');
В моем макете у меня есть эта строка:
<?php echo $this->headScript(); ?>
Если мое решение неясно каким-либо образом, дайте мне знать, и я обновлю его, чтобы уточнить.