Sign in to follow this  
Followers 0
Fenj

Шаблонизатор

11 posts in this topic

Шаблонизатор очень прост, хочу узнать у вас, всё ли хорошо?

 

Файл index.php

<?php

include_once ('class.php');

$content->set('{title}', 'Название нашей страницы');
$content->set('{text}', 'Текст');

$content->out_content('template.tpl');

?>

Файл class.php

<?php

class content
{

var $vars = array();
var $content = '';

function set($name, $val) {
$this->vars[$name] = $val;
}

function out_content($tpl) {
$this->content = file_get_contents($tpl);

foreach($this->vars as $key => $val)
{
$this->content = str_replace($key, $val, $this->content);
}

echo $this->content;
}

}

$content = new content();

?>

Файл template.tpl

<!DOCTYPE html>
<html>

<head>
<title>{title}</title>
</head>

<body>
{text}
</body>

</html>

Всё просто, но исходя из того, что я не знаю PHP хочу узнать у вас, всё ли хорошо или что-то исправить?

Share this post


Link to post
Share on other sites

В принципе, для новичка(в плане конечно же, тестов) - вполне достаточно. Но я бы не рекомендовал изобретать велосипеды и посмотреть в сторону существующих шаблонизаторов.

По мере разработки, перед вами встанут проблемы: обработка циклов (или изобретение диких велосипедов по обработке внутри модели кучи шаблонов - ноги не найдете позже), обработка команд операторов(условия - опять же, обрабатывать их в моделях - не лучший вариант) и прочие сущности.

Я бы рекомендовал(по своему опыту) глянуть в сторону фреймворка (yii, symfony, codeigniter) или если нет желания использовать громоздкие реализации - глянуть в сторону использования простейшего шаблонизатора TWIG (см. http://twig.sensiolabs.org/ ) или подобных (smarty, etc). 

Удачи в начинаниях.  :)

Fenj likes this

Share this post


Link to post
Share on other sites

TWIG меня и толкнул в сторону шаблонизаторов, только вчера о их существовании узнал. Что касается будущий разработки я не опасаюсь потому как, это делаю для готового проекта, в котором подобные разработки не понадобятся)

Share this post


Link to post
Share on other sites

TWIG меня и толкнул в сторону шаблонизаторов, только вчера о их существовании узнал. Что касается будущий разработки я не опасаюсь потому как, это делаю для готового проекта, в котором подобные разработки не понадобятся)

Ну как знаете, но все бывает и подобная реализация, которую вы планируете на корню зарубит дальнейшее расширение проекта, если конечно оно необходимо. Но все же, рекомендовал бы twig - экономия времени на шаблонизаторе и алгоритме кэширования ...

Share this post


Link to post
Share on other sites

 

 


Ну как знаете, но все бывает и подобная реализация, которую вы планируете на корню зарубит дальнейшее расширение проекта, если конечно оно необходимо. Но все же, рекомендовал бы twig - экономия времени на шаблонизаторе и алгоритме кэширования ...

У меня сайт с мультфильмами по сути без функционала (: честно говоря даже не представляю, что возможно в дальнейшем к нему прикрутить.

Share this post


Link to post
Share on other sites

У меня сайт с мультфильмами по сути без функционала (: честно говоря даже не представляю, что возможно в дальнейшем к нему прикрутить.

Давайте я вам приведу пример, где можно наступить на грабли и не раз :)

Пример. У вас есть выборка из бд/текстовика/откуда угодно списка n-фильмов(в дальнейшем - итемов). Как вы с помощью своего шаблонизатора отобразите их на 1 странице? Придется выдумывать велосипед, к примеру - брать шаблон "итема" и повторять его n-раз:

$stmt = database::getInstance()->con()->query("SELECT * FROM films LIMIT 0,10); // выборка 10 итемов по стандарту PDO 
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$template = new content;
$n = 1;
foreach($result as $row) {
      $template->set('{film_title_'.$n.'}', $row['title']); // припустим назначение переменной {film_title_1} заголовка 1го итема и т.д. 
      $n++;
}

Зачем такие велосипеды и миллионы статичных переменных? :) С помощью twig-а оно выглядело бы проще:

// тот же sql запрос
$params = array();
$params['film_sql'] = $stmt->fetchAll(\PDO::FETCH_ASSOC);
// в шаблоне:
{% for item in film_sql %}
      {{ item.title }}
{% endfor %}

это лишь 1 из проблем с циклами, аналогично - с условиями :)

Fenj likes this

Share this post


Link to post
Share on other sites

@zenn, да, я об этом думал, но на сайте преимущественно мультсериалы, они выходят раз в неделю максимум, в день мне придётся раза два, подтереть последнюю и добавить новую серию в трёх списках, что занимает не более минуты))

 

Будут страницы главная, категория и подкатегория (те самые три списка), они будут меняться ручками, но редко, как я сказал выше. А сам шаблонизатор в первую очередь используется только для страниц с материалом (: но в любом случае я всё еще раз продумаю.

 

Да и от твига отказался из-за недостатка знания и неплохо их пополнить, но желанием настолько не горю  :)

Share this post


Link to post
Share on other sites

 

 

zenn, да, я об этом думал, но на сайте преимущественно мультсериалы, они выходят раз в неделю максимум, в день мне придётся раза два, подтереть последнюю и добавить новую серию в трёх списках, что занимает не более минуты))

А мне казалось языки программирования для того и придумали, чтобы делать динамические приложения, а не менять все ручками. Один раз потратить полчаса на нормальную реализацию или каждый день пару минут тратить на правку самому? Думаю ответ должен быть очевиден)

 

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

 

п.с. Кстати смарти по-моему будет попроще твига

Share this post


Link to post
Share on other sites

Шаблонизатор очень прост, хочу узнать у вас, всё ли хорошо?

 

Файл index.php

<?php

include_once ('class.php');

$content->set('{page_title}', 'Название нашей страницы');
$content->set('{page_text}', 'Текст');

$content->out_content('template.tpl');

?>

Файл class.php

<?php

class content
{

var $vars = array();
var $content = '';

function set($name, $val) {
$this->vars[$name] = $val;
}

function out_content($tpl) {
$this->content = file_get_contents($tpl);

foreach($this->vars as $key => $val)
{
$this->content = str_replace($key, $val, $this->content);
}

echo $this->content;
}

}

$content = new content();

?>

Файл template.tpl

<!DOCTYPE html>
<html>

<head>
<title>{title}</title>
</head>

<body>
{text}
</body>

</html>

Всё просто, но исходя из того, что я не знаю PHP хочу узнать у вас, всё ли хорошо или что-то исправить?

Ваш шаблонизатор очень легко развить до такого. Отличная штука, сам юзаю.

Fenj likes this

Share this post


Link to post
Share on other sites

 

 


п.с. Кстати смарти по-моему будет попроще твига

Я б поспорил, да и не в простоте дело, синтаксис твига как то больше по душе чем смарти :)

Share this post


Link to post
Share on other sites

 

 


Ваш шаблонизатор очень легко развить до такого. Отличная штука, сам юзаю.

на досуге посмотрю (:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.