2

Zend Framework Webサイトを作成しましたが、ユーザーがモバイルデバイスを使用しているかどうかに応じて、レイアウトファイルを切り替えるように更新しています。

検出を処理するクラスを作成しましたが、このチェックをどこに配置し、使用されているレイアウトファイルをトリガーするのが最適かわかりません。

コード:

include(APPLICATION_PATH . "/classes/MobileDetection.php");
$detect = new MobileDetect();

if ($detect->isMobile()) {
    $layout = $layout->setLayout('mobile');
} 

ブートストラップ関数からレイアウトをトリガーできます_initViewHelpers()が、上記のインクルード行を追加するとすぐに500エラーが発生します。

これをどこにどのように配置するかについての推奨事項はありますか?私はもともとチェックを処理するヘルパーを持っていますが、それはレイアウトファイル全体をスワップアウトできるようにするのではなく、レイアウト自体で使用されました。

4

3 に答える 3

2

あなたはプラグインを使うことができます、それは私がすることです:

<?php

class Mobile_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout
{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        switch ($request->getModuleName()) {
            case 'mobile': $this->_moduleChange('mobile');
        }
    }

    protected function _moduleChange($moduleName) {
        $this->getLayout()->setLayoutPath(
            dirname(dirname(
                $this->getLayout()->getLayoutPath()
            ))
            . DIRECTORY_SEPARATOR . 'layouts/scripts/' . $moduleName
        );
        $this->getLayout()->setLayout($moduleName);
    }

}

に保管しlibrary/ProjectName/Layout/Controller/Plugin/Layout.phpます。

Bootsrapには、次のようなものを組み込む必要があります。

Zend_Layout::startMvc(
    array(
        'layoutPath' => self::$root . '/application/views/layouts/scripts',
        'layout' => 'layout',
        'pluginClass' => 'Mobile_Layout_Controller_Plugin_Layout'
    )
);

実際、これを理解するのに少し時間がかかりましたが、一度それを実行すると、とても幸せになります。お役に立てば幸いです:)

于 2011-01-07T00:19:18.693 に答える
0

実際に実際に起こっているのは、「mobile」と呼ばれる新しい個別のモジュールが1つあり、レイアウトプラグインヘルパーが実際にpreDispatch()メソッドを実行して、これが呼び出されたモジュールであるかどうかを確認していることです。その後、メソッドはレイアウトを変更します。かなり複雑です。実際にモバイルバージョンのベースコントローラーを作成し、そのinit()メソッドで$ this-> _ helper-> layout-> changeLayout()を使用してレイアウトを変更できると思います。

于 2011-01-10T15:53:45.830 に答える
0

www.example.comがあり、モバイルデバイスでこのページにアクセスすると、mobile.example.comにリダイレクトされると想像してください。

wwwがモジュールであり、モバイルがさまざまなレイアウトのアプリケーションのモジュールであることを知っている

モバイルデバイスの検出方法に関する次のページを見つけましたhttp://framework.zend.com/manual/de/zend.http.user-agent.html#zend.http.user-agent.quick-start

リダイレクトする方法と場所は?

よろしく

于 2011-02-09T21:45:04.783 に答える