PHP и с чем его едят....

Cris

Member
вот написал свой маленький шаблонизатор, упор делался на удобство использования:
так как [ php ] и [ code ] сдесь очень кривые буду выкладывать в картнках и в конце архивчик со всем
хто что скажет по этому поводу:)
 

Вкладення

  • 90.6 КБ Перегляди: 249
  • 1.1 КБ Перегляди: 137

dreamer

Member
вот написал свой маленький шаблонизатор, упор делался на удобство использования
Нету циклов. Без циклов не интересно ;)
Надо чтобы на вход — любые обычные типы данных (списки, хеши, объекты кроме строк и чисел) а в результате любое отображение их.
Да чтоб еще и редактирование шаблонов не требовало навыков программирования и не давало слишком много возможностей схалтурить (перенести лишнюю логику в шаблон).
Удачи :)
 

Cris

Member
Нету циклов. Без циклов не интересно ;)
Надо чтобы на вход — любые обычные типы данных (списки, хеши, объекты кроме строк и чисел) а в результате любое отображение их.
Да чтоб еще и редактирование шаблонов не требовало навыков программирования и не давало слишком много возможностей схалтурить (перенести лишнюю логику в шаблон).
Удачи :)
там есть 1 цикл, так что не надо мне тут...

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

Да чтоб еще и редактирование шаблонов не требовало навыков программирования - для того чтобы поставить {VAR1} {VAR2} ... навыков программирования не надо :) - просто надо расказать верстальщику как по файлам верстку распихивать + даже в php не сильно сложно догадать как ими пользоваться :
$tpl = new crisys(); - создаем экземпляр
$tpl->main="main.htm"; - парсим новый шаблон - main и "main.htm" - могут быть любыми хо $tpl->jkahsgdfjkhgUYGB="asjgf";
$tpl->main->vars[VAR1'']="asdfsdf"; - назначение отем VAR1, VAR2.. какихто значений, как по мне такой подход для меня удобней
$tpl->main->parse(); - функция собирает в кучу шаблон и возврашает его ввиде строки, как по мне то то что оно возврашает в виде строки удобно, так как многие шаблонизаторы могут сразу выводить на экран или в файл, ну а так можно еше че нибудь поделать с ним на глобальном уровне так сказать
кста работает оно на PHP 5+, так как на PHP 4 еще не были реализованы функции для классов - __get() и __set() если я не ошибаюсь
(перенести лишнюю логику в шаблон). - ну над этим еше надо поработать
ну до смарти мне еше делать и делать, хотя они к шаблон вопше подошли с другой стороны :) - взяли все шаблоны и переделали их в .php и теперь их парсит только php а сам смарти управляет переменными ихними
 

dreamer

Member
там есть 1 цикл, так что не надо мне тут...

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

А имел в виду я что-то такое:
PHP:
# php
$data = new SomeClass();
$data->items = array(1,2,3,4);
$data->object = new OtherObject();
tmplRender($tmplName, $data);

$ template
<html>
  <ul tmpl:iterate="items">
    <li>Value is {$value}</li>
  </ul>
  <a href="{$object->linkTo(15)}">Link</a>
</html>
А вообще есть такая хорошая вещь как XSLT, но она требует специальных навыков от верстальщика.
Зато универсальней некуда :)
 

Cris

Member
Нету там циклов, под циклом я понимаю циклическое повторение фрагмента шаблона.

А имел в виду я что-то такое:
PHP:
# php
$data = new SomeClass();
$data->items = array(1,2,3,4);
$data->object = new OtherObject();
tmplRender($tmplName, $data);

$ template
<html>
  <ul tmpl:iterate="items">
    <li>Value is {$value}</li>
  </ul>
  <a href="{$object->linkTo(15)}">Link</a>
</html>
А вообще есть такая хорошая вещь как XSLT, но она требует специальных навыков от верстальщика.
Зато универсальней некуда :)
все понял :)
ИМХО я немножко не понимаю полезность циклов в шаблонах, вот логические условия, да єто очень полезно внекоторых случаях, а вот циклы....
 

dreamer

Member
все понял :)
ИМХО я немножко не понимаю полезность циклов в шаблонах, вот логические условия, да єто очень полезно внекоторых случаях, а вот циклы....
С циклами очень просто: вывод набора элементов (список статей, список категорий, список комментариев (а если еще и древовидный...) и т.д.)
 

Cris

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

dreamer

Member
ну можно подумать, но все таки надо знать некую грань между программной частью и не программной :)
хотя вывод некого списка элементов, это как раз мешает программной части :) + я пока немного не понимаю как можно хорошо и удобно это все дело реализовать :(
Не совсем понимаю что ты имеешь в виду под программной и непрограммной частью :)
Нормальный шаблонизатор должен принимать данные в виде объекта, который включает именованные атрибуты (пары имя-значение) значениями которых могут быть строки, упорядоченные наборы значений или другие объекты.
Выглядеть это может например так:
PHP:
# структура данных: (json)

{
  category : {
    name : "Main",
    articles : [
      { title : "Article one" },
      { title : "Article two" },
      { title : "Article three" }
    ]
  }
}

# шаблон

<h1>Atricles at category {$category.name}:</h1>
<t:list src="category.articles">
  <t:body>
    <ul>
      <t:item name="article">
        {$item.title}
      </t:item>
    </ul>
  </t:body>
  <t:default>No articles at this category</t:default>
</t:list>
 

Cris

Member
Не совсем понимаю что ты имеешь в виду под программной и непрограммной частью :)
Нормальный шаблонизатор должен принимать данные в виде объекта, который включает именованные атрибуты (пары имя-значение) значениями которых могут быть строки, упорядоченные наборы значений или другие объекты.
Выглядеть это может например так:
когдя я говорил про реализацию я имел ввиду как можно сделать какойто универсальный парсер или по другому както это делать, тоесть реализовать эти циклы и ифы в шаблонизаторе чотбы ими можно было пользоваться но не через ж@пу :)
тоесть как в php можно красиво и оптимизировано сделать:
найти цикл или if в шаблоне, исполнить его подставив значения и удалить все лишние - тоесть удалить все строки с этими описаниями if и циклов...
 
Зверху