Предложете темплейт енджин

От: От: Предложете темплейт енджин

Разбирам защо питаш. Чудиш се как да структурираш масива, който подаваш на twig-енджина.
Ще ти дам пример с PDO. И не ти трябва някакъв туториал, нещата не са толкова сложни. Трябва ти просто сламка. Ще имаш още един-два такива препъни камъни.
Нещо важно: поне в началото не включвай кеширането на тимлейтите, може много да страдаш, докато се усетиш защо гърми някаква дреболия. Няма значение с който тимплейт енджин работиш.

MySQL
Код:
CREATE DATABASE IF NOT EXISTS `test`;
USE `test`;

-- Dumping structure for table test.users
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `gsm` varchar(18) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `users` (`id`, `name`, `gsm`) VALUES
	(1, 'User1', '08995647'),
	(2, 'User 2', '+359084451'),
	(3, 'User 3', '00256554');
Приемаме, че си оставил файловете от горния пример, за да не ги пиша отново. И ще създадем само един файл, който да чете от MySQL-базата:
db_test.php
PHP:
<?php
$dbh = new PDO('mysql:dbname=test;host=localhost', 'username', 'password');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "SELECT users.name as username, users.gsm as gsm FROM users";
$sth = $dbh->query($sql);
$row = $sth->fetchAll(PDO::FETCH_ASSOC);

$assign['users'] = $row;
$assign['root'] = "D4rkN1ll";


require "bootstrap.php";

echo $twig->render('index.html', $assign);
?>
Слагаш го в същата директория, където е bootstrap.php.
В ртезултат ще получиш абсолютно същото, като на картинката по-горе.
Ето и целия сорс код с дъмп на базата данни: http://dox.bg/files/dw?a=aeaba8fa1f

ПС: Няма нужда да асоциираш данните при SQL-заявката. Т.е. можеш да го направиш и така:
$sql = "SELECT name, gsm FROM users";
С PDO::FETCH_ASSOC автоматично ще се асоциират с имената на колоните. Но трябва да промениш в тимплейт-файла username на name.

Благодаря ти много за примерите но днес вече се убедих, че на twig му е рано. Днес за 1 час си прехвърлих един скрипт на смарти и ми допадна.
Сигурен съм, че twig си има предимства но ще се спра на смарти. Някак по-лесен ми е а това и е главната цел.
Още един път благодаря.
 
От: Предложете темплейт енджин

Моля, пак заповядай. Ще се убедиш, че разликата между отделните енджини е минимална. Работи с който ти е по-лесно. При всички случаи ще е по-добре да свикнеш да бачкаш с който и да било енджин, от колкото да месиш PHP с HTML в някакви брутални за четене и редактиране абстракции.
Ако имаш някакви въпроси за Smarty, пиши. И внимавай с колацията и енкодинга! Понякога сатава голяма ANSI-UTF-8 каша между php-скрипта, тимплейта и базата данни.
 
От: Предложете темплейт енджин

Още ли го подритвате тоя умрял кон, PHP-то?

Подредени от най-фешън до ретро:

1. NodeJS + Express + Angular/Backbone/etc
2. Django Python
3. Rails
...
....
...
14. PHP
 
От: Предложете темплейт енджин

Говорим за УЕБ.
Дай по един пример за първите 3, но без Гугъл, Яху и тн. НЕщо малко и разработено на фешън
 
От: Предложете темплейт енджин

PHP по популярните сайтове може да видиш основно в стари и достолепни представители на новинарската индустрия. Ядрото на Фейсбук само дето е правено на PHP - защото е доволно антично и Марк не е знаел друго, предполагам.

PHP от няколко години го шлифоват и мажат с консервиращи балсами с цел зипване и прибиране в Световния Исторически Музей на Уеб Разработките - да му се радват поколенията.
 
От: Предложете темплейт енджин

И на мен ми е интересно да видя проект на Django и Rails, който е изработен не от някой технологичен гигант.
 
От: Предложете темплейт енджин

Startup-и, ползващи PHP за основна уеб технология, може да се наблюдават основно в страните от Източния Блок - поради политическите и социалните наклонности на популацията да се задълбава и да драпа назад към историята. Дори дивите части на Азия са много повече в час.

Въпросните стартъпи рядко се изразяват в нещо повече от традиционен новинарски сайт или ритейл магазин. С една дума - още котлони за подгряване на така иновативната топла вода.
 
От: Предложете темплейт енджин

Разлика в темплейтите при Smarty и twing няма. Дали ще ползваш {% или { е все тая. Реално Smarty дава по добър перформънс.
Темплейт енджините за PHP работят с данните точно така както работи самото PHP.

@Даниел Маринов за django не се сещам в момента, но с Rails е правен Свежо.нет
@Grammar Gestapo значи wikipedia и flickr са малки сайтове :).

Само не схващам как може да сравнявате един език с фреймоурк на друг.
 
От: Предложете темплейт енджин

Ще помоля да караме по темата, няма нужда и тук да се води този малоумен спор.
Благодаря!
 
От: Предложете темплейт енджин

Още ли го подритвате тоя умрял кон, PHP-то?

Подредени от най-фешън до ретро:

1. NodeJS + Express + Angular/Backbone/etc
2. Django Python
3. Rails
...
....
...
14. PHP
За модерно е така. Но по отношение на популярност ситуацията е коренно различна.
Ако трябва да направя за клиент 3-4 базови страници (тимплейта) с продукти, галерия, контакти, за нас (обикновено това искат 90% от клиентите) един споделен PHP-хостинг ми струва между 3 и 6 лв месечно. Говорим за качествените, щото има и такива за 2 лв.
Лично аз предпочитам Rails. Но по-често работя с PHP, просто това се търси. Да не говорим, че има доста клиенти, които искат WP-шитни.

И да вметна още нещо. Тимплейт файловете изглеждат абсолютно еднакво, без значение кой език използваш. Liquid-шаблони могат да се използват без конвертиране и за PHP и за Ruby. В интерес на темата е добре да се знае.
 
От: Предложете темплейт енджин

И други разлики има, ама няма смисъл да се задълбочавам. Със смарти се разбрахме от пръв оглед.
Разлика в темплейтите при Smarty и twing няма. Дали ще ползваш {% или { е все тая. Реално Smarty дава по добър перформънс.
Темплейт енджините за PHP работят с данните точно така както работи самото PHP.

@Даниел Маринов за django не се сещам в момента, но с Rails е правен Свежо.нет
@Grammar Gestapo значи wikipedia и flickr са малки сайтове :).

Само не схващам как може да сравнявате един език с фреймоурк на друг.
 
От: Предложете темплейт енджин

И други разлики има, ама няма смисъл да се задълбочавам. Със смарти се разбрахме от пръв оглед.
С умения в Смарти освен за асистент реставратор в горепосочения музей, за друго не знам за какво ще се класираш.
 
От: Предложете темплейт енджин

@uphero покажи ги тези разлики за да бъде полезна темата и на другите. Гледам аз темплейти и разлика не виждам. Да не би да визираш, че Smarty има повече плугини/екстенжъни по-подразбиране?
 
От: Предложете темплейт енджин

@uphero покажи ги тези разлики за да бъде полезна темата и на другите. Гледам аз темплейти и разлика не виждам. Да не би да визираш, че Smarty има повече плугини/екстенжъни по-подразбиране?
За да е полезна темата ще кажа, че за twig има много малко инфо и ако не ти се занимава да четеш документацията по-добре не се хващай.
 
От: Предложете темплейт енджин

Разликите между отделните енджини са малки. По принцип, когато не се използва кеширане, тимплейт енджина използва eval().
Някои енджини задължително създават кеш с конвертирания тимплейт и тогава използват include(). От тук се получават и разликите в скоростта между енджините. Но това го правят повечето енджини, на които е разрешено кеширането, т.е. ползват include() вместо eval().
Като знаеш принципа, е много лесно да си създадеш собствен енджин. Достатъчно е да си поиграеш с регулярните изрази и eval(). Няма значение езика за програмиране. Но е по-лесно да разшириш готов малък енджин.
 
От: Предложете темплейт енджин

Брей, със смарти скрипта от 39 на 59 без кеш. С кеш - 78.
Още малко да оптимизирам и ще литне.
ПП меря с gtmetrix.com
 
От: Предложете темплейт енджин

Мери конзолно заеби ги тия онлайн простотии. Така избягваш свързанооста на хостинга ти и хостинга на услугата която ползваш.
 
От: Предложете темплейт енджин

А как е "правилно" да се подаде на темплейта единичен резултат от SQL заявка?
 
От: Предложете темплейт енджин

А как е "правилно" да се подаде на темплейта единичен резултат от SQL заявка?

Трябва да фечнеш резултата в масив преди да го подаваш на темплейта, а не да му пускаш mysql resource ... ако за това питаш :)

$data = array();
$res = mysql("....");
while ($row = mysql_fetch_assoc($res))
$data[] = $row;
и подаваш $data

В случая с единичен резултат:
$res = mysql("....");
$row = mysql_fetch_assoc($res)
и подаваш $row
 
От: Предложете темплейт енджин

Още ли има хора които ползват mysql_*.

Към темплейтите може да "подаваш" и обекти не само масиви.

нали имаш php файл който ти прави нещо - извлича данни/смята/етц. и "подава" тези данни към темплейта. Просто викаш php -f /path/to/php_file добаваш времето за изпълнение дъмпиш си накрая времето и виждаш времето за реакция.
Поиграй си с настройките на енджина който си избрал и виж дали нещо се променя. След това сложи в това php някакъв цикъл с който подаваш данните примерно 500 пъти към темплейта.

Накрая ще разбереш дали си избрал правилният еднжин и дали си направил оптималните за твоя случай настройки(то не че има много де) :D
 

Горе