0

共通の管理パネル (単純化するためにテーマが異なるページ) を持ついくつかの異なるサイトに対応するアプリケーションを準備しています。

これらの「テーマ」にはそれぞれ異なるニーズがあります。たとえば、それらはすべてサービスのリストを表示しますが、一部のサービスには関連する画像も表示されます。そうでない人のために、それらをフェッチするためのDB呼び出しを避けたいと思います(ページをレンダリングするための異なるロジック)。

Laravel (PHP フレームワーク) では、これはビュー コンポーザーにとって完璧な使い方です。

そのようなシステムの設計はどのようなものになるでしょうか?

特定のテンプレートのデータをフェッチして追加する関数を実行するために各テーマを登録できる、ある種の「フック」を考えていました。それを行うためのより良い方法はありますか?

4

1 に答える 1

2

サービス オブジェクトのリストをテンプレートに渡すと、テンプレート内で何を表示するかを簡単に決めることができます。サービスの画像を表示する場合は、 を呼び出すことができますServiceObject.ImageURL()(これにより、データベース呼び出しが行われます)。この関数を呼び出さない場合、データベース クエリは発行されません。

pongo2テンプレート エンジンを使用したサンプル:

{% for service in services %}
    {% if page.theme == "simple" %}
        <p>We don't show any image in the simple theme.</p>
    {% else %}
        {# This would lead to a database call and return the image path #}
        <img src="{{ service.ImageURL() }}" />
    {% endif %}
{% endfor %}

もう 1 つのアイデアは、テーマごとに個別のテンプレートを作成することです (共通の基本テンプレートを拡張します)。その場合、テンプレート内のテーマを確認する必要はありません。

于 2014-08-16T14:02:26.363 に答える