问题
I am trying to attack this problem from a completely different angle, because it doesn't look like I can achieve my goal that way.
I want to loop over the item stack in the HeadScript View Helper, and make modifications to it. The documentation for this and some of the other view helpers makes this statement:
HeadScript overrides each of append(), offsetSet(), prepend(), and set() to enforce usage of the special methods as listed above. Internally, it stores each item as a stdClass token, which it later serializes using the itemToString() method. This allows you to perform checks on the items in the stack, and optionally modify these items by simply modifying the object returned.
So, where is this "object returned"? I am missing a piece of the puzzle here.
Thanks for your help!
回答1:
In the toString()
method of Zend_View_Helper_HeadScript
I noticed a foreach()
loop on $this
, so I tried that and it worked. Here's a HeadScript extension I wrote that illustrates the solution:
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);
}
}
In Bootstrap.php
the following lines to point to my helpers:
$this->bootstrap('view');
$view = $this->getResource('view');
$view->addHelperPath('My/View/Helper', 'My_View_Helper');
In my layout, I have this line:
<?php echo $this->headScript(); ?>
If my solution is unclear in any way, let me know and I'll update it to clarify.
来源:https://stackoverflow.com/questions/2269306/modify-stack-in-the-zend-headscript-view-helper