0

コントローラ/アクション固有のJavaScriptをレイアウトに挿入するメソッドが必要です。そのjavascriptは<head>、通常のコンテンツが配置されている場所から遠く離れた、ドキュメントの内部に配置する必要があります。ページごとに複数のビューを使用できるインフラストラクチャがすでに整っており、すでに持っているZend_Layoutはこれを最大限に活用しています。

<?php
     $script = $this->layout()->script;
     if (!is_null($script)) : ?>
<script type="text/javascript"> // <![CDATA[
  <?php echo $script; ?>
// ]]>
</script>
<?php endif; ?>

ただし、通常のビューがデフォルトでレイアウトに自動的に配置されるのと同じように、スクリプト出力が自動的に選択されるようにしたいと思い$this->layout()->contentます。この機能はViewRendererクラスによって提供されることを理解しています。基本的に、私がやりたいのは、のインスタンスをチェックし、それが存在する場合は名前付き出力セグメント/VIEWPATH/scripts/CONTROLLER/ACTION.js.phpとしてレンダリングすることです。script

ディスパッチ後に自動的にそれを行うZend_Controller_Pluginを比較的簡単に作成できますが、その場合、コントローラーにはスクリプトのビューで値を設定する方法がありません。また、ViewRendererコントローラープラグインがコントローラーとアクションの名前をどのように活用しているかを複製する方法も必要になります。

理想的には、これをViewRendererヘルパーに追加するのが理想的ですが、そのようなことはサポートされていないようです。

私はこれについて完全に間違っていますか?フレームワークに組み込まれたページ固有のJavascriptを埋め込むためのメカニズムはありますか?(この問題を抱えているのは私だけではありません...)

ビリー3

4

3 に答える 3

1

組み込みのメカニズムはないと思います。Iamは次のような小さなコントローラープラグインを使用しています:

class My_Controller_Plugin_JavaScript extends Zend_Controller_Plugin_Abstract

{{

/**
 * preDispatch
 * Check controller name, and include javaScript library
 *
 * @param Zend_Controller_Request_Abstract $request
 * @return void
 */
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    $layout = Zend_Layout::getMvcInstance();
    $view = $layout->getView();
    $controller = $request->getControllerName();

    $jsFile = $controller . '-lib.js';
    $jsPath = $view->baseUrl() .
               '/js/' . $controller .
               '/';

    $sPath = PUBLIC_PATH . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR;
    $sPath .= $controller . DIRECTORY_SEPARATOR . $jsFile;

    if (file_exists($sPath)) { // load as last js (offset 100)
        $view->headScript()->offsetSetFile(
            100,
            $jsPath . $jsFile


           );
        }
    }
}

コントローラ名でjsファイルを追加します。それをエコーするレイアウトiam

<?= $this->headScript(); ?>

アクションを使用するように拡張できます。もっと良い方法があると思いますが、うまくいきます!

于 2010-09-23T05:12:51.963 に答える
1

Zend Frameworkには、javascriptファイル(最初のスニペット)+テキストjavascript(2番目のスニペット)を追加するためのビューヘルパーがあり、javascriptファイルを追加できます

<?php
    $this->headScript()->appendFile($this->baseUrl("js/jquery-1.4.2.min"))
        ->appendFile($this->baseUrl("js/jquery-ui-1.8.2.custom.min"));
    $this->headScript()->appendScript("js/dummy.js");
    echo $this->headScript();

?>

その後、他の場所で、追加することができます

    <?php $this->headScript()->captureStart() ?>
// start jquery functions 
    var action = '<?php echo $this->baseUrl ?>'; 
    $('foo_form').action = action;
// end jquery functions 
    <?php $this->headScript()->captureEnd() ?>

次の仮定が行われます。

スクリプトがスタックに追加されます。スタックを置き換えたり、最上位に追加したりする場合は、captureStart()の最初の引数としてそれぞれ「SET」または「PREPEND」を渡す必要があります。スクリプトのMIMEタイプは、「text/javascript」であると想定されています。別の型を指定する場合は、captureStart()の2番目の引数としてそれを渡す必要があります。タグに追加の属性を指定する場合は、captureStart()。tocaptureStart()の3番目の引数としてそれらを配列で渡します。

ソース: http: //framework.zend.com/manual/en/zend.view.helpers.html

于 2010-09-23T08:00:49.897 に答える
1

コメントを拡張する

これがあなたが探しているもののドキュメントです:

http://framework.zend.com/manual/1.12/en/zend.view.helpers.html#zend.view.helpers.initial.headscript

CaptureStart()を使用して、関連する各ビュー内でスクリプトを動的に作成できます。このアプローチでは、*。js.phpファイルを作成する必要はありません。

于 2010-09-24T17:17:29.457 に答える