Я разрабатываю C#/ASP.net
MVC-приложение в течение 5 лет, и теперь я изучаю PHP
.
В C#
я могу использовать RenderBody
для каждого нового сайта, поэтому новый HTML-контент будет заменен на RenderBody()
. Затем у меня есть только один новый частичный вид и один новый контроллер для каждого сайта:
<html> <head> <title></title> </head> <body>RenderBody()</body> </html>
При использовании Twig у меня есть скелет Макет:
<html> <head> <title></title> </head> <body>{%block ablock%}{%endblock%}</body> </html>
Для каждого нового сайта мне нужно создать новый файл child.twig
и расширить основной макет, а затем переопределить «обход». Делая это так, мне все еще нужен PHP-файл (назовем его index1.php
, index2.php
и т. Д.), index2.php
вызывает функции загрузки twig с параметром child.twig
в качестве параметра. В конце концов, мне нужно создать 2 представления ( child.twig
+ index.php
) и еще один php-файл для контроллера. Поэтому мой вопрос:
Каков наилучший способ создания HTML-Masterpage в MVC с Twig?
Я не мог найти какой-либо публичный проект / учебник, в котором упоминаются лучшие практики для этого.
Заранее спасибо.
Я всегда создаю общий шаблон с содержимым, которое разделяет все страницы:
generalTemplate.html
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>{{ page_title }}</title> <meta name="Author"> <link rel="shortcut icon" href="{{project_path}}resources/images/favicon.ico"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Here put the general CSS and JS --> {% block head %} {% endblock %} </head> <body> <header> </header> {% block content %}{% endblock %} <footer> </footer> </body> </html>
Затем создаются дети, которые наследуют общий шаблон:
oneChild.html
{% extends "generalTemplate.html" %} {% block head %} <!-- Specific libraries css and js --> {% endblock %} {% block content %} <!-- Specific HTML content --> {% endblock %}
index.php
require_once 'Twig/Autoloader.php'; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(path_to_generalTemplatehtml); $twig = new Twig_Environment($loader, array()); $template = $twig->loadTemplate($path_to_oneChildhtml); $data = array(); $data['project_title'] = $project_title; $data['project_path'] = $project_path; echo $template->render($data);
Во всяком случае, есть тонкая документация на Twig с большой детализацией: http://twig.sensiolabs.org/documentation