使用 smarty 包含模板
include template using smarty
我正在为我的网站使用模板引擎 Smarty。
我尝试做的是将我的 navbar.tpl 包含到我的 homepage.tpl 中。
每个 tpl 文件都有一个 php 文件,用以下内容填充变量:
$smarty->assign('{the var name}', "{the value}");
如果我只打开我的主页但当我包含我的导航栏时它确实有效:
{include 'NavBar.tpl'}
它包括我的菜单,但是应该从我的 NavBar.php 文件中填充的变量在这里没有被填充是我的 navbar.php 文件:
<?php
include_once '../Models/DAO/Database.php';
include_once '../Models/category.php';
require_once '../smarty-3.1.29/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->template_dir = '../Views';
$smarty->compile_dir = '../tmp';
$categories = array();
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "select * from categories";
$result = $mysqli->query($sql_query);
while ($row = $result->fetch_object('category')){
array_push($categories, $row);
}
//assign vars
$smarty->assign('categories', $categories);
$smarty->display('NavBar.tpl');
?>
这是我的 navbar.tpl 文件:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="Home.php"><img class="logo" alt="Logo" src="../views/images/logo.png"></a>
</div>
<ul class="nav navbar-nav">
<li class="active"><a href="Home.php">Home</a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Producten
<span class="caret"></span></a>
<ul class="dropdown-menu">
{foreach from=$categories item=categorie}
<li><a href="product_list.php?categorie={$categorie->name}">{$categorie->name}</a></li>
{/foreach}
</ul>
</li>
<li><a href="About.php">About</a></li>
</ul>
</div>
</nav>
和 homepage.tpl 中的实际调用:
<div id="wrap">
{include '../views/NavBar.tpl'}
</div>
homepage.php 文件:
<?php
include_once '../Models/DAO/Database.php';
include_once '../Models/product.php';
require_once '../smarty-3.1.29/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->template_dir = '../Views';
$smarty->compile_dir = '../tmp';
//declare vars
$categorieName = "";
$products = array();
//load vars
if (isset($_GET['categorie'])){
$categorieName = $_GET['categorie'];
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "select * from products where categories_category_id = (Select category_id from categories where `name` =".'"'.$categorieName.'")';
$result = $mysqli->query($sql_query);
while ($row = $result->fetch_object('product')){
array_push($products, $row);
}
}
//assign vars
$smarty->assign('categorie', $categorieName);
$smarty->assign('products', $products);
$smarty->display('homepage.tpl');
?>
有谁知道如何强制 navbar.php 填充 navbar.tpl 中的变量,看起来 navbar.tpl 不知道 php 文件但是当我包含了 php 文件,它将文件显示为纯文本。
我认为您不了解 Smarty 模板的工作原理。模板不调用 PHP 文件。例如,您可以将 navbar.php 修改为下一个:
$categories = array();
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "select * from categories";
$result = $mysqli->query($sql_query);
while ($row = $result->fetch_object('category')){
array_push($categories, $row);
}
//assign vars
$smarty->assign('categories', $categories);
在此文件中,您只需为导航栏填充数组并为模板分配变量。
然后修改homepage.php。例如,在此文件中的 //declare vars
之前,只需包含 navbar.php。
在 homepage.php
中包含所有需要的文件,然后初始化 Smarty,然后包含 navbar.php 类别初始化,然后是此脚本的主要任务。
您应该将 navbar.php 添加到您要在模板中使用 navbar.tpl 的所有 php 文件中。
当您调用 $smarty->display('homepage.tpl');
时,Smarty 会显示模板 homepage.tpl 并将模板包含在导航栏中。但是您应该在 PHP.
中分配模板的变量
我正在为我的网站使用模板引擎 Smarty。
我尝试做的是将我的 navbar.tpl 包含到我的 homepage.tpl 中。 每个 tpl 文件都有一个 php 文件,用以下内容填充变量:
$smarty->assign('{the var name}', "{the value}");
如果我只打开我的主页但当我包含我的导航栏时它确实有效:
{include 'NavBar.tpl'}
它包括我的菜单,但是应该从我的 NavBar.php 文件中填充的变量在这里没有被填充是我的 navbar.php 文件:
<?php
include_once '../Models/DAO/Database.php';
include_once '../Models/category.php';
require_once '../smarty-3.1.29/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->template_dir = '../Views';
$smarty->compile_dir = '../tmp';
$categories = array();
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "select * from categories";
$result = $mysqli->query($sql_query);
while ($row = $result->fetch_object('category')){
array_push($categories, $row);
}
//assign vars
$smarty->assign('categories', $categories);
$smarty->display('NavBar.tpl');
?>
这是我的 navbar.tpl 文件:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="Home.php"><img class="logo" alt="Logo" src="../views/images/logo.png"></a>
</div>
<ul class="nav navbar-nav">
<li class="active"><a href="Home.php">Home</a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Producten
<span class="caret"></span></a>
<ul class="dropdown-menu">
{foreach from=$categories item=categorie}
<li><a href="product_list.php?categorie={$categorie->name}">{$categorie->name}</a></li>
{/foreach}
</ul>
</li>
<li><a href="About.php">About</a></li>
</ul>
</div>
</nav>
和 homepage.tpl 中的实际调用:
<div id="wrap">
{include '../views/NavBar.tpl'}
</div>
homepage.php 文件:
<?php
include_once '../Models/DAO/Database.php';
include_once '../Models/product.php';
require_once '../smarty-3.1.29/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->template_dir = '../Views';
$smarty->compile_dir = '../tmp';
//declare vars
$categorieName = "";
$products = array();
//load vars
if (isset($_GET['categorie'])){
$categorieName = $_GET['categorie'];
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "select * from products where categories_category_id = (Select category_id from categories where `name` =".'"'.$categorieName.'")';
$result = $mysqli->query($sql_query);
while ($row = $result->fetch_object('product')){
array_push($products, $row);
}
}
//assign vars
$smarty->assign('categorie', $categorieName);
$smarty->assign('products', $products);
$smarty->display('homepage.tpl');
?>
有谁知道如何强制 navbar.php 填充 navbar.tpl 中的变量,看起来 navbar.tpl 不知道 php 文件但是当我包含了 php 文件,它将文件显示为纯文本。
我认为您不了解 Smarty 模板的工作原理。模板不调用 PHP 文件。例如,您可以将 navbar.php 修改为下一个:
$categories = array();
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "select * from categories";
$result = $mysqli->query($sql_query);
while ($row = $result->fetch_object('category')){
array_push($categories, $row);
}
//assign vars
$smarty->assign('categories', $categories);
在此文件中,您只需为导航栏填充数组并为模板分配变量。
然后修改homepage.php。例如,在此文件中的 //declare vars
之前,只需包含 navbar.php。
在 homepage.php
中包含所有需要的文件,然后初始化 Smarty,然后包含 navbar.php 类别初始化,然后是此脚本的主要任务。
您应该将 navbar.php 添加到您要在模板中使用 navbar.tpl 的所有 php 文件中。
当您调用 $smarty->display('homepage.tpl');
时,Smarty 会显示模板 homepage.tpl 并将模板包含在导航栏中。但是您应该在 PHP.