1

smarty templatesを使用するスクリプトにヘッダーを含めたいです。このサイトを検索した結果、私は部分的にそこにいますが、完全ではありません:

{include file='/home/username/public_html/header.php'}

これにより、ヘッダーに画像が正常に含まれますが、ヘッダーに含まれる2つのいずれも含まれません。インクルードの 1 つは php ファイルで、もう 1 つは html (私のブートストラップ ナビゲーション バー) です。ある投稿によると「簡単」なプラグインを作成する必要があるようですが、これを達成する方法の例が見つかりませんか?


codefreaksの指示に基づいて、これが私がしたことです。指示が正しいと確信していますが、何も表示されていないため、正しく解釈していません。

public_html ディレクトリに関連する 3 つのファイルと、それらに追加したファイルを次に示します。すべてが私が言ったとおりです。ここにある単語はプレースホルダーではありません。

ファイル 1 sitewide/myheader.php

<?
ob_start(); 
--- I didn't change the original content here --
$output = ob_get_contents();
ob_end_clean();  ?>

ファイル 2 newscript/includes/page_header.php

$smarty = new Smarty();
require "/home/username/public_html/sitewide/myheader.php";
$smarty->assign('myheader', $output);
$smarty->display('../themes/default/template/header.tpl');

ファイル 3 newscript/themes/default/template/header.tpl

{$myheader}
4

3 に答える 3

0

私が望むのは、defineを使用してスタンドアロンのconstants.phpファイルで定義したいくつかのグローバル PHP 定数だけであることを除いて、非常に似たようなことをしようとしています。

smarty テンプレートに同じ定数が必要なので、smarty テンプレートにconstants.phpを含めようとしましたが、これはこれを行うためのより良い方法です。

constants.php

  $_CONSTANT['TBL']                      = TRUE;  
  $_CONSTANT['FLD']                      = FALSE;
  $_CONSTANT['DB_READ_SUCCESS']          =     1;
  $_CONSTANT['DB_WRITE_SUCCESS']         =     1;
  $_CONSTANT['DB_WRITE_ERROR_UNKNOWN']   =  -100;    

  //*** Copy the $_CONSTANT array to PHP define() to make global PHP constants
  foreach($_CONSTANT as $key => $value) {
    define($key, $value);
  }

次に、スマートなセットアップ関数でこれを行います。

foreach ($_CONSTANT as $key => $value) {
  Smarty->assign($key, $value);
}

実際、変数 (または定数) の値は、ビュー レイヤーをモデルおよびコントローラー レイヤーから分離するために Smarty テンプレートで本当に必要なすべてであると思います。

ポストスクリプト:

実際、この手法を使用して、Smarty を使用して PHP 定数を JavaScript に渡すことができます。これにより、PHP、Smarty、および JavaScript の 3 つの異なる環境に対して 1 か所で定数を宣言できます。

方法は次のとおりです。

smarty セットアップ関数から以下を呼び出します。

  public function AssignJSConstants($values) {
    $js = '';
    foreach ($values as $key => $value) {
      if ($key != 'CR') {
        if (is_string($value)) {
          $js = $js.$key.' = "'.$value.'";';
        } else {
          $js = $js.$key.' = '.$value.';';
        }
        $js = $js.CR.'      ';
      }
    }
    $this->Smarty->assign('JavaScriptConstants', $js);
  }

次に、smarty テンプレートで次のように宣言します。

<script>
  //php constants that exported to JavaScript
  {$JavaScriptConstants}
</script>

これにより、HTMLでこれが得られます:

<script>
  //php constants that exported to JavaScript
  TBL = 1;
  FLD = 0;
  DB_READ_SUCCESS = 1;
  DB_READ_ERROR_UNKNOWN = -10;
  DB_WRITE_SUCCESS = 1;
  DB_WRITE_ERROR_UNKNOWN = -100;
</script>
于 2013-07-01T22:27:05.680 に答える
0

あなたからのフィードバックを得て自分自身をテストした後、私はあなたが smarty を適切に設定していない可能性があることを知りました。http://www.smarty.net/quick_installの指示に従って正しくインストールしてください。適切にセットアップした後の最終的なディレクトリ構造は次のようになります。

ここに画像の説明を入力

適切に設定したら、これはファイルで使用したコードです。

index.php

<?php
echo "hello";
require_once "libs/Smarty.class.php";
$smarty = new Smarty();
$smarty->setTemplateDir('smarty/templates');
$smarty->setCompileDir('smarty/templates_c');
$smarty->setCacheDir('smarty/cache');
$smarty->setConfigDir('smarty/configs');
require "header.php";

$smarty->assign('header', $output);
$smarty->testInstall();
$smarty->display('smarty.tpl');
echo "hello";
?>

header.php:

<?php
ob_start();
?>
hello honey bunny
<?php
$output = ob_get_contents();
ob_end_clean();
?>

テンプレートフォルダにsmarty.tplを入れてください!

{$header}hellos
于 2013-02-28T14:54:24.263 に答える
0

PHPファイルをsmartyに含めることはできないと思います。

samrty はテンプレートエンジンなので、

PHP ページが最初に実行され、次にデータが smarty ページに送信されます。

解決策: 必要なすべてのデータを php ページから smarty に渡し、smarty 変数を使用して html ページを含めます。

于 2013-02-28T13:10:47.127 に答える