在单个php Smarty文件中显示多个模板
您好堆栈溢出社区!
我还没能找到这个问题的答案。我有一个联系人.php文件,如下所示:
<?php
require_once('lib/smarty/smarty/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->caching = false;
$smarty->debugging = false;
$smarty->template_dir = $_SERVER['DOCUMENT_ROOT'].'/templates/';
$smarty->compile_dir = $_SERVER['DOCUMENT_ROOT'].'/cache/smarty/templates_c';
$smarty->cache_dir = $_SERVER['DOCUMENT_ROOT'].'/cache/smarty/cache';
$smarty->display('contact.tpl');
die;
在我的联系人.tpl文件中,我有我的表单:
{extends file="index.tpl"}
{block name="content"}
my form....
{/block}
我通过名为index.tpl:
的主文件包含名为Content的块<!DOCTYPE html>
<main>
...
{block name="content"}{/block}
</main>
问题: 一切都正常,然而,在这种情况下,我将不得不创建大量的php文件(如contact.php),这些文件显示正确的模板。我如何使用单个php文件,并让它根据用户点击的页面链接显示正确的模板?例如,当用户点击联系人页面时,我希望它显示Conact.tpl,当用户点击‘About’页面时,我希望它显示About.tpl,而不是每个案例都有单独的php文件。
解决方案
您可以使用URL参数,例如index.php?pag=Contact,index.php?pag=Home
然后在index.php中只需使用开关
switch ($_GET['pag'])
{
case 'contact':
$template="contact.tpl";
//you can also declare some variables for one particular view to use them in the template
$data=array('my_mail'=>'test@test.com');
break;
case 'home':
$template="home.tpl";
break;
default:
$template="error404.tpl";
break;
}
$smarty->assign(array('data'=>$data,'something_else'=>$more_data));
$smarty->display($template);
您可以使用htaccess隐藏url中的参数,因此,mydomain.com/index.php?pag=Contact很容易变成myDomain.com/Contact
相关文章