Jump to content

Recommended Posts

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

 

Файл 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 хочу узнать у вас, всё ли хорошо или что-то исправить?

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

 

 


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

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

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 из проблем с циклами, аналогично - с условиями :)

Link to post
Share on other sites

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

 

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

 

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

Link to post
Share on other sites

 

 

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

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

 

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

 

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

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 хочу узнать у вас, всё ли хорошо или что-то исправить?

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

Link to post
Share on other sites

 

 


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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...