логика — Использование Twig для отделения дизайна от индекса. Переполнение стека

я начал кодировать свою собственную браузерную игру и слышал о 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);

Я прочитал в документации кое-что о наследовании дочернего шаблона, но, похоже, это тоже не решение проблемы ..

Или я просто думаю о чепухе и должен сделать некоторые теги div в моем файле index.php и дать дизайнерам доступ не к моему файлу index.php, а только к файлу css, где они могут редактировать классы div моего индекса. php файл? Я не уверен, достаточно ли этого для дизайнера.

-2

Решение

Во-первых, позвольте мне сказать, что все это очень грязно. Мое личное предложение заключается в том, чтобы вы использовали платформу, чтобы четко разделить свою логику в контроллерах и представления в отдельном каталоге. Таким образом, ваши дизайнеры могут творить чудеса, не зная ничего о том, что такое PHP.

Что касается вашей заботы о наследовании шаблонов в TWIG, это очень хорошая практика. Это позволяет определять на разных слоях элементы вашего вида. Например, у вас есть макет base.html.twig, где вы размещаете нужную навигационную панель на всех страницах своего сайта. Затем вы пишете другой шаблон, который наследует от этой базы ({% extends 'base.html.twig' %}), и в нем будут все элементы, которые вы определили в базе. Действительно мощный способ избежать дублирования HTML-кода.

Итак, чтобы подвести итог, разделите ваш код на разные уровни (используйте шаблон MVC или n-уровневую структуру) и используйте наследование TWIG, и все это должно стать намного чище и с ним легче работать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]