1

zf2とdoctrineormを使用してCMSを作成することを計画しています。

実際、私たちは、システムがいくつかのテンプレートで動作し、管理者を介してテーマ間で簡単に変更できるようにするために、cmsテンプレートについて懸念しています。

新しいテンプレートの作成は、エンドユーザーの開発者にとって簡単なはずです

次のようなテンプレートシステムを構築する方法について、アドバイスや提案が必要です。

コアモジュールと独自のphtmlを持つサブモジュールがたくさんあるので、theme1phtmlを保存する場所とtheme2phtmlを保存する場所...

提案やアドバイスはありがたいです

4

3 に答える 3

3

これまでに見た中で最高のテンプレートエンジンであるTwigをご覧になることをお勧めします:)Twigの構文を学ぶには少し時間がかかりますが、得られるものを見ると十分価値があります:)

まだコメントが書けないので、これをアンスウェアとして書きました。お役に立てれば。私を信じてください、小枝は行く方法です。使用方法の詳細については、彼のドキュメントをご覧ください。

編集:

あなたが解決しようとしている問題は、テンプレートエンジンとは何の関係もありません。これは、任意のテンプレートエンジンで実行できます。必要に応じて、プレーンPHPでも実行できます。

ユーザーが登録して独自のサブドメインを取得し、そこでWebページを構築できるWebアプリケーションを構築しました。テーマの変更、テキストの編集、ページの追加。シンプルなCMS機能。

これを行う最も簡単な方法は、次のようにテーマを保存するテーマフォルダを用意することです。

themes/
    - themeBlue
        - css/
        - images/
        - js/
        - html or views/

    - themeRose
        ...

これで、すべてのテーマを配置できます。すべてのテーマには、画像、css、jsファイルを含む独自のフォルダーがあります...

そして、ユーザーがいて、すべてのユーザーがテーマを選択して変更できるようになります。その情報はデータベースに保存されます。JackがthemeBlueを使用しているユーザーを保存する必要があります。あなたはあなたが望むようにそれをすることができます。これをuser_theme列のようなusersテーブルにイベント配置できます。

これで、誰かがサイトにアクセスしたときに、最初にデータベースにクエリを実行して、そのユーザーまたはWebの作成者が使用しているテーマを確認します。次に、現在のテーマフォルダからすべてのファイルをロードします。また、他のCMSと同様に、データベースに保存されているデータをhtmlファイルに入力します。

これは最も単純な実装です。たとえば、cssファイルとhtmlファイルをデータベースに保存できます:)

これがあなたの質問に答えることを願っています。それで幸運を祈ります、私は自分のシステムを構築することにほとんど気が狂いました:)私は自分の望むことを達成するために自分のPHPMVCフレームワークの馬上槍試合を書くことになりました。

于 2012-10-10T18:06:26.947 に答える
1

同じビューとレイアウト(同じフォルダー構造とファイル名)を持つapplication.config.phpで別のモジュールをアクティブ化すると、そのビュースクリプトとレイアウトは、コアモジュールの後にロードされたときに自動的に使用されます。

したがって、application.config.phpを動的にして、ビューフォルダーのみを含むアクティブなテンプレートモジュールをロードすることができます。これは、他のライブラリがない場合のシンプルで効果的なソリューションになります。

さらに、asseticのようなアセットマネージャーを使用して、(テンプレート-)モジュール内に画像やcssなどを提供することもできます。(zf2-assetic-moduleを見てください、私は自分のニーズに合うように資産に基づいて独自の資産化モジュールを作成しました...)

于 2012-10-10T21:47:00.707 に答える
1

シーナ、

これは、Application->Module.phponBootstrapで行います

    $ss = $serviceManager->get('application_settings_service');
    $settings = $ss->loadSettings();

    $serviceManager->get('translator');
    $templatePathResolver = $serviceManager->get('Zend\View\Resolver\TemplatePathStack'); 
    $templatePathResolver->setPaths(array(__DIR__ . '/view/'.$settings['theme'])); // here is your skin name 

    $viewModel = $application->getMvcEvent()->getViewModel();
    $viewModel->themeurl = 'theme/'.$settings['theme'].'/';

この状況では、ビューフォルダにこの構造があります

    view/
       default/
          application/
          error/
          layout/
          zfcuser/
       red/
          application/
          error/
          layout/
          zfcuser/

上記の$viewmodelは、public_htmlフォルダー/ theme /red/のthemeurlのレイアウトに変数を挿入します。すべてのアセットはredです。

layout.phtml-> themeurl;?>のviewscript layout()-> themeurl;?>にアクセスします。

私はまだダイナミックビューを作成しています。現在、BaseControllerがあり、すべてのActionControllerがそれを拡張しています。必要なビューを構築するrender()関数がありますが、プレースホルダーのアイデアを試すことを期待してスケーラブルになるかどうかはわかりません。

application_settings_serviceは、システムの呼び出しに使用されたドメインの設定を取得し、サイトのサービス対応部分を介してアクセス可能な配列を構築する設定サービスです。それはまったく別の投稿であり、MVCのぞき見を間違った方法でこする場合としない場合があります

私はあなたの質問が私が共有すると思っただけで答えられたとマークされていることを知っています

エリック

于 2012-10-18T02:10:00.797 に答える