かなり長い間、私はさまざまなエンジン、フレームワーク、およびPHP
DrupalやJoomlaなどの怪物を掘り下げて、はい、開発されたAPIの豊富さと多数のモジュールの存在により、ほとんどすべての複雑なサイトを作成する際にそのようなエンジンが不可欠であることがわかりました(本質的に、後者はHMVCの概念に従います)、地上から地上へのロケットでナットを割るのは必ずしも便利ではなく、コードを処理するだけでなく、サイト自体の作業も「解決する」と簡単に理解できるようになりました。
現時点では、MVC(正確にはHMVC)Kohanaフレームワーク、特にバージョン3.0および3.1のブランチに取り組んでおり、適切なサイト標準化のための最も完全でエレガントなソリューションを見つけようとしていて、グーグルのスキルは道徳的に時代遅れであるか、実際に結果は失敗しましたが、私のタスクの明確な客観的なリーダーはいません。
私の考えやアイデアをいくつか集めたので、それらを便利で直感的なテンプレートシステムにまとめることにしました。
すぐに、すべてのコードを提供するわけではないことをお伝えします。これは、かなりの数行を占めるため、コントローラーの説明だけでなく、いくつかの表現も含まれているため、テンプレートエンジンの一般的な原則を小さな例で説明します。
template.phpコントローラーは、 APPPATH.classes / controller /に配置する必要があるテンプレートの基礎です
制御コントローラ自体は次のように説明されています。
abstract class Controller_Template extends Controller
したがって、コントローラーがテンプレート機能を使用できるようにするには、マネージャーから継承する必要があります。次に例を示します。
class Controller_Welcome extends Controller_Template
テンプレートエンジンの一般的な機能
- メタ、スクリプト、スタイル-メタタグ、jsスクリプトおよびcssファイルへのリンクを追加するための関数。
- ヘッダー-ページのタイトルを設定します。
- パンくずリスト-途中ですでに作成されたものに基づいてナビゲーションのパンくずリストのチェーンを構築できます。
- コンテンツ-ページのメインコンテンツであるキー変数$ contentを埋める「ブロック」。
- 領域-ヘッダー、フッターなど、ページ上のさまざまな場所のコンテンツ変数を埋める「ブロック」。
- ページャー-現在のページの数と要素の総数に基づいて、ページ上のリンクの行を簡単に生成します。
- リクエストに応じて3種類のコンテンツを返します(HMVC、AJAX、または通常)。
関数の数は特に印象的ではないように見えますが、phptemplateまたは他のより大きくて包括的なレベルでこの機能から作成するという目標を(少なくとも初めて)設定しませんでした。 上記の機能は、サイト標準化の中央システムを決定するのに十分であり、もう苦しむことはありません。これは私の前に立っていた主なタスクです。
さらに、コントローラーで発生する不正行為について簡単に説明します。
コントローラー操作
誓うのではなく、テンプレートを有効にするコントローラーのために、テンプレートエンジンを初期化するために、そのbefore関数で親の行:: before()を指定する必要があります。
テンプレートエンジンの開始中、およびそれに応じてそのbefore関数の自動実行中に、次のアクションが発生します。
-テンプレート設定の読み込み
- ページ引数が渡された場合、ページャーを確認してインストールします
-「空の」ビューの作成とテンプレート変数のゼロ化
これらの手順が完了すると、テンプレートはすでに使用できる状態になっており、パラメーターを設定しなくてもテンプレートを起動できます。 起動自体は、 render()などの関数を呼び出さずに自動的に実行されるため、コンテンツの生成プロセスを監視する必要がありません。
しかし、反対に、私たちの目標は、テンプレートを簡単に管理できるようにすることでしたか?
ページを変更するには、コントローラー機能のどこでも次の構成を使用できます。
機能リスト
- target($ path) -テンプレートエンジンが動作するメインビューファイルのパスを設定します。 パスが設定されていない場合、標準のパスはビューのテンプレートフォルダーから取得されます。
- meta_name($ title、$ content) - \ <meta name = 'name' content = 'content' \>という形式のメタタグを設定します。
- meta_equiv($ title、$ content) - \ <meta http-equiv = 'name' content = 'content' \>という形式のメタタグを設定します。
- パンくずリスト($リンク、$タイトル、$厳密= false) - パンくずリストを既存のパスに設定します。 $ strictパラメーターを使用すると、デフォルトで新しいパスは既存のパスに固定され、そうでない場合は絶対リンクが作成されます。
- title($ title) -ページのタイトルを設定します。
- content($ html、$ clear = false) -ブロックをページのコンテンツ変数に追加します。 デフォルトでは、VIEWクラス対応オブジェクトが関数に渡されますが、 $ clearフラグが設定されている場合、コンテンツは純粋なhtmlとして認識されます。
- region($ region、$ html、$ clear = false) -ページの地域変数の1つにブロックを追加します。 コンテンツ機能と同様に機能し、リージョンの名前を指定するだけで済みます。
- alias($ region、$ alias = '') -すでに作成されているページの領域のエイリアスを作成します。 デフォルトでは、すべてのリージョンは$ region配列に格納されます。この関数を使用すると、 $ alias形式の直接変数を設定できます
- add_style($ path)-cssファイルを追加します。 パスは、テンプレート構成で指定されたメディアパスに関連して取得されます。
- add_script($ path)-jsファイルを追加します。 パスは、テンプレート構成で指定されたメディアパスに関連して取得されます。
- pager($ all) -要素の総数に基づいてページャーの行を作成します。 ページが指定されておらず、関数が呼び出されると、テンプレートエンジンは最初のページのルーラーを生成します。
軽微な発言
上記の関数は任意の順序で機能し、ユーザーのアクション後にコンパイルおよびレンダリングされる情報のストレージデバイスとして機能するため、テンプレート生成の正しいシーケンスに従う必要はありません。
パンくずリスト、ページャー、コンテンツブロック、およびリージョンを生成するための関数。それぞれ、 パンくずリスト 、 ページャー 、 ブロックのパス上のテンプレートビューフォルダーに保存されているビューを使用します 。
このアクションまたはそのアクションが呼び出されるリクエストのタイプに応じて、テンプレートエンジンは異なるコンテンツを返します。 HMVCリクエストの場合、これはページのコンパイルおよびレンダリングされたコンテンツ変数のみです。AJAXリクエストの場合、同じ変数ですが、 json_encodeでラップされ、通常のリクエストはページ全体を完全にレンダリングします。
合計
要約すると、テンプレートエンジンはKohanaの最高のテーマエンジンであると主張するのではなく、ページビューをより簡単に制御するための便利なアイデアの集まりにすぎません。 成長する余地があることに注意してください。たとえば、htmlまたはxhtmlでレンダリングする機能を追加し、cssスタイルとjsスクリプトを対応するスタイルとスクリプトタグにアンロードするメカニズムをねじ込んで、結果としてAJAXケースへのリンクではなくテキストとして表示しますまたはHMVCのリクエスト、および他の多くのおいしいお菓子ですが、これは必要に応じて行われます。
すぐにこのスレッドがgitにアップロードされるので、機能が拡張されたときに誰もが簡単にファイルをダウンロードおよび更新できますが、今のところ、 ファイルへのリンクをおaびします 。 変更および修正は大歓迎です。
このテンプレートエンジンが誰かを助け、不必要な問題を排除することを願っています。
ご清聴ありがとうございました。建設的な批判や提案を聞いてうれしいです!