【问题标题】:Using Twig to separate design stuff from index.php使用 Twig 将设计内容与 index.php 分开
【发布时间】:2015-06-17 10:24:48
【问题描述】:

我已经开始编写自己的浏览器游戏并听说了 Twig PHP。我阅读了文档中的一些内容,但没有找到任何方法将此系统完全包含到我的源代码结构中。

我的php结构是这样的:
根目录中的“index.php”包括我从全局 $_GET[]

获得的内容站点
<?php
// doing some stuff ..
include($dir_path . DIRECTORY_SEPARATOR . htmlspecialchars($_GET['site']) . ".php");   
?>

在这个内容站点(例如:news.php)中,我正在使用类并做一些事情。
获得所有信息后,我将它们放在一个数组中,以便在 Twig 中使用它们:

<?php
// doing some stuff ..
$array = returnOfMyFunctions(); // just for example!

$loader = new Twig_Loader_Filesystem('templateDir');
$twig = new Twig_Environment($loader);
$template = $twig->loadTemplate('news.html');
$template->display($array);
?>

说得更简单:
index.php => include("news.php") => 显示“news.html”模板

我的目标:
我想为设计师创建一个环境,他们不能使用 PHP 和 Javascript(我可以通过 Twig 模板对其进行过滤)。所以 javascript 可以通过我的 index.php 包含在 html 标题部分中(我有一个添加所有 js 文件的函数,具体取决于我的 $_GET 变量)。

但我的问题来了:
设计师也应该编辑我的主页。我的意思是?例如我的 index.php(不是文件本身,只是模板!)。因为在我的 index.php 文件中,我不仅包括所有内容站点,还包括标题、导航等。所以真正的问题在这里,我如何将设计内容从我的 index.php 导出到模板文件。(因为他们不应该访问我的 index.php。但他们应该可以选择设计我的主页。在我包含的内容站点周围制作 div 标签并定位我的导航等等。所以我的想法是在我的 index.php 中仅包含一个 Twig 模板,设计师可以在其中移动包含的内容站点并设计编写自己的 div 标签就像他想要的那样。

例如 index.html 模板文件:

<div id="header"> {{ header }} </div> // INCLUDE the header
<div id="leftnavigation"> {{ left-navigation }} </div> // INCLUDE the left navigation
<div id="rightnavigation"> {{ right-navigation }} </div> // INCLUDE the right navigation
<div id="contentsite"> {{ content-site }} </div> // INCLUDE the content-site
<div id="footer"> {{ footer }} </div> // INCLUDE the footer

我在 Twig 文档中读到我可以包含函数并且它很简单,但我认为我不应该在包含内容站点的模板文件中执行函数。

$twig = new Twig_Environment($loader);
$function = new Twig_SimpleFunction('function_name', function () {
    // including the content-site in which another Twig template is loaded. (for ex: news.html)
});
$twig->addFunction($function);

我在文档中阅读了一些关于继承子模板的内容,但它似乎也不是解决方案..

或者我只是在想一些无意义的东西,应该在我的 index.php 文件中制作一些 div 标签,让设计人员无法访问我的 index.php 文件,而只能访问他们可以编辑 div 类的 css 文件我的 index.php 文件?我不确定,这对设计师来说是否足够。

【问题讨论】:

    标签: php logic twig theory


    【解决方案1】:

    首先,让我说所有这些都非常混乱。我个人的建议是让您使用一个框架,将控制器中的逻辑清晰地分开,并将视图放在单独的目录中。这样,您的设计师就可以发挥他们的魔力,而无需了解 PHP 是什么。

    关于您对在 TW​​IG 中继承模板的担忧,这是一个非常好的做法。它允许在不同的层上定义视图的元素。例如,您有一个 base.html.twig 布局,您可以在其中将所需的导航栏放在网站的所有页面上。然后,您编写另一个继承自此基础 ({% extends 'base.html.twig' %}) 的模板,它将包含您在基础中定义的所有元素。避免重复 HTML 代码的真正强大方法。

    因此,总而言之,将您的代码分成不同的层(使用 MVC 模式或 n 层结构)并使用 TWIG 继承,所有这些都应该变得更加简洁和易于使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2017-10-11
      相关资源
      最近更新 更多