【发布时间】: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 文件?我不确定,这对设计师来说是否足够。
【问题讨论】: