1

我想将我的标题包含到使用smarty 模板的脚本中。通过搜索这个网站,我部分在那里,但不完全是:

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

这成功地将图像包含在标题中,但两个都不包含标题包含。其中一个是 php 文件,另一个是 html(我的引导导航栏)。从我的搜索中,我似乎需要制作一个插件,根据一篇文章,这很“容易”,但我找不到如何完成此任务的示例?


基于codefreaks的说明,这就是我所做的。我确定说明是正确的,我只是没有正确解释它们,因为这没有显示任何内容。

这是三个文件,它们的路径与 public_html 目录相关,以及我添加到其中的内容。一切都如我所说:这里没有任何文字是占位符。

文件 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

我不认为你可以在 smarty 中包含你的 php 文件。

由于 samrty 是一个模板引擎,

PHP 页面首先执行,然后将数据发送到您的 smarty 页面。

解决方案:将所有需要的数据从 php 页面传递给 smarty,并包含 html 页面,并带有 smarty 变量。

于 2013-02-28T13:10:47.127 回答
0

我正在尝试做一件非常相似的事情,除了我想要的只是一些全局 PHP 常量,这些常量是我使用 define 在独立的constants.php文件中定义的。

我希望在我的 smarty 模板中使用相同的常量,所以我一直在尝试在 smarty 模板中包含constants.php,但这是更好的方法:

常量.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。

就是这样:

从您的 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上的说明正确安装。正确设置后我的最终目录结构如下所示:

在此处输入图像描述

正确设置后,这是我在文件中使用的代码:

索引.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 回答