Изменить стек в помощнике по 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(); ?>

Если мое решение неясно каким-либо образом, дайте мне знать, и я обновлю его, чтобы уточнить.

Другие вопросы по тегам