Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посоветуйте легенький шаблонизатор для PHP 
V
    Опции темы
Burrr
Дата 3.11.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



Собственно сабж, хотя "шаблониатор для PHP" и звучит странно smile.
Что именно нужно? Нужна функция типа parseTemplates($template, $vars);
Где $template - шаблон, а $vars - массив переменных.
Что должен уметь шаблонизатор?
1. Ставить переменные
2. Работать с if-else
3. Работать м циклами типа foreach
Есть ли что-нибудь такое простое и легкое?

P.S.: Если неясно о чем спрашиваю - напишите, постараюсь написать более внятно.


--------------------
PM MAIL ICQ   Вверх
-=Ustas=-
Дата 3.11.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Burrr @  3.11.2006,  15:54 Найти цитируемый пост)
хотя "шаблониатор для PHP" и звучит странно

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




--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Burrr
Дата 3.11.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



-=Ustas=-, монстроподобный Smarty не поджодит по следующим причинам:
1) Слишком большой и навороченный, а мне нужен только вышеперечисленный функционал (80 Кб кода - это перебор)
2) Smarty расчитан на работу шаблонов- файлов, а у меян шаблон - это текстовая переменная.
По сути мне нужна всего одна ф-ия, уверен, что её кто-то уже писал.

К сожалению, я не настолько хорошо знаком с PHP, чтобы быстро (а это важно) написать качественный шаблонизатор без уязвимостей.



--------------------
PM MAIL ICQ   Вверх
skalex
Дата 3.11.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Я работал со Smarty и не назвал бы его "монстроподобным". Более того, рано или поздно появляется необходимость в каких то нестандартных функциях, чего какой-нибудь собранный на коленке движок может и не дать.
И потом даже исходя из твоих критериев - нужный тебе шаблонизатор представит собой далеко не одну функцию.

А почему традиционный HTML+PHP не устраивает?
PM   Вверх
Burrr
Дата 3.11.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



skalex, по порядку.
1) Возможность в расширении функционала относительно вышеперечисленного вряд ли появится
2) Насчет одной ф-ии согласен. Это я образно, но в целом код будет не большой (говорю не с бухты-барахты, у меня есть шаблонизатор, который меняет переменные и работает c if  - состоит из 2-х ф-ий, просто и безопасен, но усовершенствовать его я не могу).
3) HTML+PHP не подходят, т.к. отделить бизнес-логику и дизайн таким образом можно, а вот застраховаться от ошибок-ляпов будущего верстальшика не позволит. Он может такого наиспрвлять, что всё ляжет, хотелось бы это предусмотреть.

Добавлено @ 17:10 
Чтобы не быть голословным приведу код упомянутого мной шаблонизатора:
Код

function parse_template($template, $vars) {
    global $template_replace_vars;
    $template_replace_vars = $vars;

    $t = str_replace('\#', '\# ',$template);
    $keys = array_keys($vars);
    $values = array_values($vars);
    for($c1=0;$c1<count($keys);$c1++) {
        $keys[$c1] = "#".$keys[$c1]."#";
    }
    $t = preg_replace_callback("'#\?([\!]?\w+)#(.*?)#?#'s", "parse_template_callback",$t);
    $row = str_replace($keys, $values, $t);
    $row = preg_replace("'#\w+?#'","",$row);

    $out = str_replace('\# ', '#', $row);
    return $out;
}

function parse_template_callback($matches) {
    global $template_replace_vars;
    if(isset($matches[2])) {
        $key = $matches[1];
        $inverse = (substr($key,0,1)=="!");
        if($inverse) {
            $key = substr($key,1);
        }
        $text = $matches[2];
        $condition = (isset($template_replace_vars[$key])) && ($template_replace_vars[$key]);
        if($inverse xor $condition) {
            return $text;
        }
    }
    return '';
}


Возможно кто-то сможет его усовершествовать или поймет в чем мой вопрос.
Пример шаблона: $str = "Text #?var# #var# #?# text";


--------------------
PM MAIL ICQ   Вверх
Vaulter
Дата 3.11.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



использую в шаблонах просто
$navbar

$item[item_id] $item[subject]

и никаких preg_replace (зато eval smile)


--------------------
PM MAIL WWW ICQ   Вверх
Burrr
Дата 5.11.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



Vaulter, нужен именно шаблонизатор.
Так что, ничего подобного нет?


--------------------
PM MAIL ICQ   Вверх
Loncaster
Дата 5.11.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.8.2006

Репутация: нет
Всего: нет



PHPLIB , там есть легенькие отличный шаблонизатор.
--------------------
Ще не вмерла Україна...
PM MAIL   Вверх
smartov
Дата 5.11.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



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

Если все же тянет свое написать - пользуй лучше XML+XSLT. Там тебе и циклы и условия уже реализованы. Так что все гораздо проще.
PM MAIL   Вверх
Eugene_Bond
Дата 6.11.2006, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



Цитата(Burrr @  3.11.2006,  15:54 Найти цитируемый пост)
Что должен уметь шаблонизатор?
1. Ставить переменные
2. Работать с if-else
3. Работать м циклами типа foreach
Есть ли что-нибудь такое простое и легкое?

Если логику переносить в шаблоны (условия и циклы например) -- шаблонизатор изначально не будет легким.
Если логика в шаблонах нужна, то я полностью поддерживаю smartov-а: или Смарти или XML+XSLT

Если логику можно оставить коду, то порекомендую старенький, но весьма шустренький XTemplate. Как раз то, что надо: прост и легок.

PM MAIL   Вверх
Burrr
Дата 7.11.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



Всем спасибо за советы! Посмотрел PHPLIB и XTemplate. В итоге решил воспользоваться советом smartovа и заюзать Smarty smile вырезав все лишнее.

Это сообщение отредактировал(а) Burrr - 7.11.2006, 15:10


--------------------
PM MAIL ICQ   Вверх
sergejzr
Дата 7.11.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 5
Всего: 360



Burrr, Не надо "заюзать Smarty smile вырезав все лишнее."
Есть ведь Flexy (Это как раз "облегчённый" и усовершенствованный Смарти). ИМХО самый простой и лучший шаблонизатор.

Код ПХП:
Код

//Создаём обьект
$flexy=new Flexy();
//Заряжаем переменные
$vars=new stdclass();
$vars->a='test_a';
$vars->arr=array('test1'=>'var1','test2'=>'var2',);
//Flexy читает шаблон
$flexy->compile("index.html");
//И сажает переменные
$flexy->output($vars);
//Вот и весь код! :)


Шаблон: index.html
Код

<body>
Пришёл а={a}
<table>
  <tr flexy:foreach="arr,variable,value">
    <td>{variable}</td><td>{value}</td>
  </tr>
</table>
</body>




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Burrr
Дата 7.11.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



sergejzr, ссылку бы на Flexy?

Добавлено @ 17:31 
Уже не надо, нагуглил smile
Спасибо, посмотрю что за зверь!


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.