Intereting Posts
Аутентификация, если существует учетная запись Facebook, – не хотите проходить через вход в FB PHP: обернуть все функции класса в подкласс как отображать последние последние сообщения на моей странице facebook на моем сайте Как управлять SQL-запросами PHP + XML – как переименовать и удалить элементы XML с помощью SimpleXML или DOMDocument? MySQL max_user_connections vs max_connections Можно ли восстановить PHP SESSION по его идентификатору? PHP Как определить jQuery для мобильных устройств? Проверка PHP, чтобы убедиться, что запрос является либо xmlhttp с моего сайта, либо обычным запросом из определенного домена Доступ к массиву JSON после json_decode / многомерного массива Есть ли способ отключить добавление свойств в класс из экземпляра класса? Задайте значение переменной в одной функции и используйте в других функциях при вызове непосредственно из ссылки в codeigniter получить метатег описания с помощью xpath Преобразование perl-ассоциативного массива в массив PHP PayPal Adaptive Payments – поле описания

Изменить стек в Zend HeadScript View Helper

Я пытаюсь атаковать эту проблему совершенно по-другому, потому что это не похоже на то, что я могу достичь своей цели.

Я хочу перебрать стек элемента в помощнике представления HeadScript и внести изменения в него. Документация для этого и некоторых других помощников в представлении делает следующее утверждение:

HeadScript переопределяет каждый из append (), offsetSet (), prepend () и set () для принудительного использования специальных методов, перечисленных выше. Внутренне он хранит каждый элемент в качестве токена stdClass, который позже сериализуется с использованием метода itemToString (). Это позволяет выполнять проверки элементов в стеке и, возможно, изменять эти элементы, просто изменяя возвращаемый объект.

Итак, где этот «объект возвращен»? Здесь я не вижу кусочка головоломки.

Спасибо за вашу помощь!

В методе 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); } } с 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(); ?> 

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