0

私の質問が何であるかを説明するのは少し難しいですが、試してみます:)

Smarty を使用しているカスタム プロジェクトでは、URL 処理などのすべての基本設定が配置されている index.php ファイルがあります。

例えば:

// Get information for the "about us" page

if($_GET['qs']=='about_us'){
  $data['text'] = 'Lorem Ipsum...';
  $data['other_stuff'] = 'dolor sit amet';

  // Required template file
  $data['tpl_Name'] = 'about.tpl';
}

このファイルの最後に、正しいテンプレートを取得して master_site テンプレートに送信するコードが少しあります。

例えば:

if (isset($data['tpl_Name'])){
  $this->smarty->assign('content', $this->smarty->fetch($data['tpl_Name'])); 
  $this->smarty->view('master_site.tpl');
}

master_site.tpl では、{$content} を使用して about.tpl にアクセスできます。この {$content} 変数は、ページごとに変更されます。私のアプリケーション。

質問: 上記のようなものを作成できるように、すべてのページで使用できる CodeIgniter のファイルはありますか? 現在、コントローラーのすべての関数でこのコード (2 番目の例) を使用する必要がありますが、これは非効率的です。

もちろん、すべての関数で $data['tpl_Name'] を設定する必要がありますが、それは問題ありません。

ありがとう。

4

1 に答える 1

1

テンプレート ライブラリを CodeIgniter に統合する方法はいくつかありますが、その多くは、テンプレートをどのように結び付けたいかによって異なります。以下はあなたにぴったりかもしれませんし、単に正しい方向に向けているだけかもしれません。テンプレートに対する Smarty/CI ソリューションはこれだけではありませんが、私がよく知っているソリューションです。

Smarty を CI に統合するコードをいくつか書きました。ビューをロードする標準的な方法を使用できます -- $this->load->view('view', $data)-- しかし、ファイル内で Smarty の構文を使用できます。

「マスター」テンプレートを処理する方法は、Smarty {extends}(テンプレート継承ドキュメント) を使用することです。私が読み込む個々のビューはすべて、メイン テンプレート、またはメイン テンプレートにつながる他の階層のいずれかを拡張します。

main_template.php:

<html>
<head>
    <meta>
    <meta>
    <title>{$title|default:"Default Title"}</title>
</head>
<body>

<header>
    <h1>My Website</h1>
</header>

<nav>
    <ul>
        <li>Page Link</li>
        <li>Page Link</li>
        <li>Page Link</li>
        <li>Page Link</li>
    </ul>
</nav>

<section class="main-content">

{block name=content}{/block}

</section>

<footer>
    &copy; 2013 Me!
</footer>

</body>
</html>

page.php:

{extends "main_template.php"}

{block "content"}

<h2>My Content Page</h2>

<p>Lorem ipsum and stuff...</p>

{/block}

変数は通常の$titleようにビュー データに追加され、標準の構文でページをロードします。

$data['title'] = 'My page';

$this->load->view('page', $data);

より詳細な情報を得るために Smarty のドキュメントを調査させていただきますが、それは私が以前に行ったことです。:)

于 2013-03-14T03:12:34.707 に答える