2

この問題をまったく別の角度から攻撃しようとしているのは、その方法で目標を達成できるようには見えないからです。

HeadScript View Helperの項目スタックをループして、変更を加えたいと思います。 これと他のいくつかのビュー ヘルパーのドキュメントでは、次のように述べられています。

HeadScript は、append()、offsetSet()、prepend()、および set() のそれぞれをオーバーライドして、上記の特別なメソッドの使用を強制します。内部的には、各アイテムを stdClass トークンとして保存し、後で itemToString() メソッドを使用してシリアル化します。これにより、スタック内のアイテムのチェックを実行し、必要に応じて、返されたオブジェクトを変更するだけでこれらのアイテムを変更できます。

では、この「返されたオブジェクト」はどこにあるのでしょうか。ここでパズルのピースが欠けています。

ご協力いただきありがとうございます!

4

1 に答える 1

4

toString()方法でのループZend_View_Helper_HeadScriptに気づいたので、それを試してみたところうまくいきました。以下は、私が作成した HeadScript 拡張機能で、解決策を示しています。foreach()$this

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(); ?>

私の解決策が何らかの形で不明な場合はお知らせください。明確にするために更新します。

于 2010-02-15T23:25:27.930 に答える