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

2022-04-07 00:00:00 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

相关文章