1

わかりました。Yiiにコントローラークラスがあり、デフォルトのビューフォルダーを使用する以外に別のビューフォルダーを使用したいと思います。

自然な動作は$this->render("<view file>");、プロジェクト内のビューファイルをナビゲートするために以下を使用する場合です...

「//」はプロジェクトのデフォルトのビューフォルダをナビゲートします

「/」は現在のテーマビューフォルダをナビゲートします

または、コントローラーのデフォルトのビューフォルダーでビューを自動的に選択するために何も使用しないでください

しかし、私の問題は、ビューファイルではなく、特定のビューフォルダーのフォルダーにある静的ページをレンダリングしていることです。/pagesナビゲートしたい静的ページは、現在のテーマフォルダービューにある静的ページですが、デフォルトでは、コントローラーが/protected/viewフォルダー内の静的ページをナビゲートします。

このオーバーライドも試して、コントローラーのビューフォルダーを変更しました。テーマフォルダーに静的ページをレンダリングしたいこのコードをコントローラーに配置します

public function init(){
    $this->layout = "//layouts/script";
    $this->viewPath = "/js";
}

ただし、問題はviewPathがreadOnly変数であるということです。

今私の質問は、現在のテーマのビューフォルダにある静的ページをどのようにレンダリングできるかということです。

注:私の質問を理解できない場合は、反対票を投じないでください。私はできる限りあなたのために私の問題を変えて説明することを開いています

4

3 に答える 3

4

actionsのメソッドをオーバーライドする場合はSiteController、どういうわけか、CViewActionbasePathプロパティを変更する必要があります。ドキュメントに記載されているように、デフォルトではページになっています。

このようなことを試していただけませんか?

 public function actions()
 {
     return array(
        'page'=>array(
            'class'=>'CViewAction',
            'basePath'=>'path/to/your/theme/folder'
        ),
     );
 }
于 2012-05-31T06:43:42.947 に答える
1

自分用のヘルパークラスを作成し、このメソッドを宣言します(ファイルパスなどを変更します)。

public static function renderInternal($_viewFile_, $_data_ = null, $_return_ = false) {
        // we use special variable names here to avoid conflict when extracting data
        if (is_array($_data_)) {
            extract($_data_, EXTR_PREFIX_SAME, 'data');
        } else {
            $data = $_data_;
        }

        $viewsDir = '/protected/views/internals/';

        if ($_return_) {
            ob_start();
            ob_implicit_flush(false);
            require(getcwd() . $viewsDir . $_viewFile_ . '.php');
            return ob_get_clean();
        } else {
            require(getcwd() . $viewsDir . $_viewFile_ . '.php');
        }
    }

それを使用する/それを呼び出す:

MyHelperClass::renderInternal( 'myviewfile', array( /* YOUR DATA */ ), /* RETURN CONTENTS OR NOT */ )

$viewsDir目的のディレクトリに移動します。

于 2012-05-31T04:09:03.410 に答える
1

任意のサイトコントローラーまたは任意のコントローラーでこれを試してください。

 public function actions()
    {
        return array(
            'page'=>array(
                'class'=>'CViewAction',
            ),
        );
    }

またはこのリンクを参照してください...

http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/
于 2012-05-31T05:19:17.973 に答える