Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<?php if(!isset($content)){ ob_start(); ?>
<h1>Переопределенный контент</h1>
<?php $content = ob_get_clean();} ?>{% block content %}
<h1>Переопределенный контент</h1>
{% endblock %}class users_controller
{
function show()
{
$users_data = User->find($id); //Псевдокод
print view(); //Псевдокод
}
}
function main_controller()
{
$content = content();
print main_layout(); // Аналог render('main_layout.html') в других фреймворках
}
function content_controller()
{
$footer = footer();
print content_layout();
}
<content for footer>
<div>Переопределенный контент</div>
</content>
Сейчас почему то считается стыдным на хабре писать про свои реализации и велосипед
Хабр — место для того, чтобы делиться знаниями.
Да, использовать самописные шаблонизаторы в крупных проектах с фиксированными сроками часто бывает непрофесиональным.
Но мне кажется непрофессиональным не уметь написать шаблонизатор (подобный тому, что в посте, а не какую-нибудь ересь) и уметь пользоваться twig-ом.
Лично мне немного жаль, что на хабре мало тем, посвящённым шаблонизаторам, реализациям ActiveRecord, собственным велосипедам, ибо мне эта тема жутко интересна.
<?php
$data = get_data(); // получение данных для страницы
$title = "Название страницы";
ob_start();
?>
<p><?php echo $data['some_key']; ?></p>
<?php
$content = ob_get_clean();
ob_start();
?>
<ul>
<li>Меню 1</li>
...
</ul>
<?php
$sidebar = ob_get_clean();
ob_start();
require "layout.php"
Дело вот в чем. Хабр читают люди разного уровня.
Я часто вижу, как делаются представления в проектах — это либо include header & include footer либо 2-уровневый шаблон с layout и с шаблоном контента. Мне не нравятся оба подхода. Первый — за то, что в каждый файл дублирует подключения блоков. Второй — за то, что content обычно весь body, а если не весь, то теряется гибкость или приходится иметь несколько layout.
Идея наследования мне очень нравится. И вот я прошелся по основным методам добавить наследование в проект — от высокопрофессиональных типа Twig, до простейших — типа предложенного мной варианта. И честно говоря — я еще не видел, чтобы кто-нибудь его применял — этот простейший вариант. Возможно он не красив внешне, но поверьте — делает работу с шаблонами намного приятней и проще.
/* @var $this Template */
<?php $this->openBlock(''content'); ?>
<h1>Переопределенный контент</h1>
<?php $this->closeBlock('content'); ?>
Для загрузки библиотек, использующих namespace по соглашению PSR-0 (например, Zend Framework 2 или Symfony2) необходимо сначала зарегистрировать корень библиотеки как псевдоним пути.
Для примера попробуем использовать Imagine. Скорируем директорию Imagine в protected/vendors. Ну и само использование:
Yii::setPathOfAlias('Imagine',Yii::getPathOfAlias('application.vendors.Imagine')); // Далее стандартный код из README Imagine: $imagine = new Imagine\Gd\Imagine(); // и т.д.
// Далее стандартный код из README Imagine:
$imagine = new Imagine\Gd\Imagine();
// и т.д.
<html><body>
<div><? template('header'); ?></div>
<div><? template('content'); ?></div>
<div><? template('footer'); ?></div>
</body></html>
<div>Что-то новое, еще что-то вставили <? template('counter'); ?>, и что-то унаследовали <? inherited(); ?></div>
<?
context('res',data);
$data = application::someBusinessLogic($_POST['Parameter1']);
$res = db::queryAll('select * from MyTable where Parameter1=?',$_POST['Parameter1']);
?>
Наследование шаблонов в PHP без использования сторонних библиотек