【问题标题】:Re-using PHP smarty master page logic across several .php pages在多个 .php 页面中重用 PHP smarty 母版页逻辑
【发布时间】:2015-05-15 20:55:04
【问题描述】:

)

所以,总的来说,我对 Web 开发还很陌生,遇到了一个有趣的问题。

基本上,我使用 Smarty 模板引擎和 PHP 来创建一个基本网站。我目前拥有的是一个主模板,基本上是网站布局中必须在网站的每个页面上使用的部分。

<!DOCTYPE html>
<html>
<head>
    <title>Pet Nicknames!</title>
    <link href="styles/main.css" rel="stylesheet">
</head>

<body>  
    <div id="websiteBody">
        <div id="header">
        </div>

        <div class="menu">
            <div class="menuContainer">
                {foreach $menuButtons as $menuButton}
                    <a href="{$menuButton->link}"><div class="menuButton">
                        <span>{$menuButton->text}</span>
                    </div></a>
                {/foreach}
            </div>
        </div>

        <div id="content">
            {block name=content}{/block}
        </div>

        <div id="footer">
        </div>
    </div>
</body>

如您所见,这个主模板包含一个 foreach,它基本上只是从“master.php”脚本中获取一个分配的数组,以及从数据库中检索到的按钮数组。

问题是现在我想创建几个 PHP 页面,但它们都应该重新使用这个模板,并且都必须运行 PHP 脚本来检索菜单按钮。

如您所见,我已经创建了一个名为“内容”的块,并且我正在考虑使用模板继承来执行此操作...但是我仍然不清楚如何正确重用 PHP 逻辑,例如 for菜单,基本上必须在网站上的所有页面中重复使用,而不必在每个 PHP 脚本中包含/重复它。

在网页设计中解决这个问题的“标准”方法是什么?您是否只是将这个“设置”逻辑封装在一个单独的 PHP 脚本中,并将其包含在所有需要使用主模板的脚本中?

谢谢大家的帮助!

【问题讨论】:

    标签: php html templates web smarty


    【解决方案1】:

    剪切 &lt;div class="menu"&gt;...&lt;/div&gt; 并将其放在名为 menu.tpl 的单独模板中,现在代替此 div(在主模板中写入):

    {include file="menu.tpl" menuButtons=$menuButtons}

    file - 要包含的模板文件的名称

    menuButtons - 将本地变量传递给模板

    请查看此文档了解更多信息:

    http://www.smarty.net/docs/en/language.function.include.tpl

    【讨论】:

    • 感谢您抽出宝贵时间回复! :) 但是,即使我将模板的这一部分分开,我仍然必须像以前一样将“master.tpl”传递给 $menuButtons 变量吗?除非我不清楚 :) 我的意思是,当我然后去制作“myfirstpage.php”和“mysecondpage.php”时,所有这些 PHP 脚本都必须使用相同的样板 PHP 脚本来检索来自 SQL 数据库的菜单按钮数据,然后将其传递给 Smarty 模板。如何在所有页面中正确地重用该逻辑?我是否必须将其移至其自己的 PHP 脚本并包含它? :)
    • 这取决于您的业务逻辑 - 但您可以在继承层次结构中将其向上移动,因此它是共同的祖先。我在 core.class.php 中有我所有的常用函数(或者将它移动到一些 common.php 文件并包含它)。
    • 好的,谢谢! :-) 我将尝试将母版页的不同功能拆分为单独的类,以便所有页面在设置自己的页面时都可以轻松地重用它,然后将它与模板继承结合起来 :) 我想那会锻炼得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多