沃梦达 / 编程问答 / php问题 / 正文

在单个php Smarty文件中显示多个模板

displaying multiple templates in a single php Smarty file(在单个php Smarty文件中显示多个模板)

本文介绍了在单个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

这篇关于在单个php Smarty文件中显示多个模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:在单个php Smarty文件中显示多个模板

基础教程推荐