我开始编写自己的浏览器游戏代码并听说过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 =&gt; include(&#34; news.php&#34;)=&gt;显示&#34; news.html&#34;模板
我的目标:
我想为设计师创建一个环境,他们不能使用PHP和Javascript(我可以通过Twig模板过滤它)。所以javascript可以通过我的index.php包含在html header部分中(我有一个函数根据我的$ _GET变量添加所有js文件)。
但问题出现了:
设计师也应该编辑我的主页面。我的意思是说?它例如我的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文件,但只是在css文件中,他们可以编辑div类的我的index.php文件?我不确定,如果那对设计师来说足够了。
答案 0 :(得分:0)
首先,我要说所有这些都非常混乱。我的个人建议是使用框架,将控制器中的逻辑与单独目录中的视图完全分开。通过这种方式,您的设计师可以完成他们的魔术,而无需了解PHP的内容。
关于您在TWIG中继承模板的问题,这是一个非常好的做法。它允许在不同的图层上定义视图的元素。例如,您有一个base.html.twig布局,您可以将所需的导航栏放在网站的所有页面上。然后,您编写另一个继承自此基础({% extends 'base.html.twig' %}
)的模板,它将包含您在base中定义的所有元素。这是避免重复HTML代码的有效方法。
因此,总而言之,将您的代码分成不同的层(使用MVC模式或n层结构)并使用TWIG继承,所有这些都应该变得更加清晰和易于使用。