0

必要に応じて JavaScript ファイルを追加するビュー ヘルパーがいくつかあります (たとえば、フォームのみが CKEditor などを使用するようにします)。私のディレクトリ構造(関連ファイルのみを含めるように簡略化)は次のとおりです。

application
    --forms
        --Project
            AddIssue.php
    --modules
        --default
            --views
                --helpers
                    JQueryUI.php
                    Wysiwyg.php
        --project
            --controllers
                ProjectController.php
            --views
                --scripts
                    --project
                        version.phtml
                        issueadd.phtml

私がしたいこと:

  1. ビューにCKEditorを含めるproject/project/issueadd
  2. jQuery UI を含めるproject/project/version

ビュー スクリプト内にいるときは<?php $this->jQueryUI(); ?>、ヘルパーがデフォルト モジュールのヘルパー ディレクトリにあるにもかかわらず、呼び出しは魅力的に機能します。ただし、コントローラーとフォームについては同じではありません。

コントローラーProjectController.phpで、versionAction()、私は呼び出そうとしました:

$this->view->jQueryUI();

そして効果は例外でした:

メッセージ: 'JQueryUI' という名前のプラグインがレジストリに見つかりませんでした。使用したパス: Project_View_Helper_: C:/xampp/htdocs/bugraid/application/modules/project/views\helpers/ Zend_View_Helper_: Zend/View/Helper/

同様に、AddIssue.phpフォームでは、これを試しました:

$this->getView()->wysiwyg();

そして再び例外がありました:

メッセージ: 'Wysiwyg' という名前のプラグインがレジストリに見つかりませんでした。使用したパス: Project_View_Helper_: C:/xampp/htdocs/bugraid/application/modules/project/views\helpers/ Zend_View_Helper_: Zend/View/Helper/

明らかに、ビューヘルパーが呼び出されているモジュール/コントローラーのヘルパーディレクトリにある場合、両方とも機能しますが、多くのモジュールで使用されるため、デフォルトモジュールのビューヘルパーディレクトリに配置したいと思います.

だから、私の質問は次のとおりです。

  1. コントローラーとフォーム内からこれらのビュー ヘルパーにアクセスするにはどうすればよいですか?
  2. これを回避する簡単な方法はありますか (単にすべての JavaScript ファイルをレイアウトに含める以外に)? プラグインやアクション ヘルパーの作成が好きですか? (私は以前にこれらのことをしたことがないので、本当にわかりません。私は ZF で冒険を始めたばかりです)。
4

3 に答える 3

3

Q1について(コメントによる)。通常の方法でヘルパーにアクセスできるはずです。ただし、機能しないため、ビューリソースをブートストラップする方法や、ヘルパーの具体的な登録を実行する方法、またはヘルパーパスを追加する方法に問題があると思います。Bootsrap.phpにヘルパーパスを追加する例を貼り付けます。

<?php
#file: APPLICATION_PATH/Bootstrapt.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    public function _initViewHelperPath() {

        $this->bootstrap('view');
        $view = $this->getResource('view');

          $view->addHelperPath(
                APPLICATION_PATH . '/modules/default/views/helpers',
                'My_View_Helper' // <- this should be your helper class prefix.
        );
    }

}
?>

このオフコースは通常、ZFのモジュラーセットアップで機能するはずです。

Q2について:headScriptビューヘルパーを使用しheadて、レイアウトのタグにロードするスクリプトを管理できます。このヘルパーを使用すると、アクションからそれを行うことができます。

例えば。layout.phpにある場合、次のようになります。

<head>
    <?php echo $this->headScript(); ?>
</head>

次に、たとえばindexActionで、次のようにJSファイルを追加できます。

$this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js'));
于 2011-02-13T02:14:58.490 に答える
3

私自身の質問に答えるのが嫌いなのと同じくらい、Marcin が彼の回答で提案したことに基づいて、私が思いついたもう 1 つの解決策があります。application.ini でも実行できます。

resources.view[] =
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"

この順序で行を表示する必要があることに注意してください。逆にすると、それ以前のresources.view[] =ものは無視されます。

于 2011-02-13T11:05:49.873 に答える
0

JQueryUI.php を取り除き、ZendX を使用したいと思います。そんな感じ:

コントローラーで:

    ZendX_JQuery::enableView ($this->view);
    $this->view->jQuery ()->enable ()->setRenderMode (ZendX_JQuery::RENDER_ALL);

レイアウト:

<?php echo $this->jQuery () ?>
于 2011-02-13T02:23:17.373 に答える