Вообщем. в таблице users 2 записи. хочу вывести в шаблон Код (Text): $query = mysql_query("SELECT `login`,`code` FROM `users`"); while($row[] = mysql_fetch_array($query)); $smarty->assign('users', $row); $smarty->display('index.tpl'); сам шаблон Код (Text): {foreach from=$users item=u} Логин: {$u.login} <br /> Пароль: {$u.code} <br /> <br /> {/foreach} результат, 2 единственных записи из бд и третья пустая, которой не должно быть. что делать?
Смарти конечно тот ещё отстой, но он тут не при чём - в коде ошибка. Попробуйте так: Код (PHP): $query = mysql_query( "SELECT `login`,`code` FROM `users`" ); while($row = mysql_fetch_array($query)) { $rows[] = $row; } $smarty->assign('users', $rows); $smarty->display('index.tpl');
romach, да жуть вообще - одни проблемы с ним, а плюсов никаких. "Компилирующий", блин, шаблонизатор... ну ну... PHP специально разработан для встраивания в HTML. Писать шаблоны надо только на нём. Ну или XSLT если хорошо его знаете и много ресурсов есть.
Тем, что он обарудован надстройкой, которой собственно не должно быть, смысл от шаблонизатора в котором опять идут проверки? Циклы... зачем на 2х сторонах делать одни и те же проверки? Должно быть все просто php - это реализация, а шаблон это вывод из реализации, не надо там никаких проверок, все проверки в php. А то тут получается какая-то ерунда.
Не сообразил с утра ) Проверкой на что он оборудован? Смарти создает тот же самый нативный код, который в последствии и используется, т.ч. если исключить первый запуск, потери по времени на самом деле не существенны. Цикла в любом случае будет два в этом примере, если конечно не валить пхп вместе с хтмлом в одну кучу добиваясь невиданных ускорений путем выноса мозга разработчику. Тут как раз стоит избавиться от первого цикла while($row[] = mysql_fetch_array($query));, а не ругать шаблонизаторы. Ну и возможно вопрос привычки, но: Код (Text): {foreach $array as $key => $row} {$key} : {$row} {/foreach} Гораздо приятнее на глаз, чем вставки типа <?php echo $var?> на каждом углу. Или упаси боже сборная солянка из всего-всего в одном файле.
Ты мыслишь узко. Зачем делать в шаблоне цикл? Когда есть место которое уже это сделало и просто выводим в шаблоне {tag}. Также и с блоками. Подобие: Код (PHP): [block] {tag} [/block] Ничего лишнего. К тому же этот блок можно хоть рекурсивный делать, хоть цикличный, при этом у нас обработка будет в php и никаких компиляций и прочей вымышленной ерунды не будет. И не будет создаваться еще по 100+ файлов якобы скомпилированных! А для кеширования можно просто вывод сохранять в память или в файлы, смотря что требуется.
Тут вопрос скорее, зачем в пхп делать цикл, когда давно уже изобрели PDO. Вообще, это попытка сэкономить на пустом месте. Цикл этот повторный нагрузки не создаст по сравнению с той же работой с БД которая при неправильном проектировании может создать ещё те тормоза. Да и при правильном тоже может ) А если она всё же внезапно существенна, то проще вообще отдать json и пусть все генерируется на клиенте. Но до тех пор лучше пользоваться удобными велосипедами изобретенными умными людьми, чем усложнять себе жизнь гоняясь за миллисекундами и тем самым упуская реальные косяки.
Спасибо. Вообще, мне не понятно было столь негативное отношение к смарти и шаблонизаторам вообще и нулевая реакция на использование древнего mysql* ) Вот тут очевидно верх оптимизации ) viewtopic.php?f=25&t=47043
спасибо, ))) хотя так пробовал)) Добавлено спустя 36 минут 31 секунду: а еще вопрос. А как структурировать? ну есть у меня шапка и футер, и че, инклюдить его в каждом "контроллере" (если это можно так назвать)?
Код (Text): <?foreach( $array as $key => $row ){?> <?=$key?> : <?=$row?> <?}?> никаких echo в шаблонах.
А я не люблю эхо, впрочем как и смарти. И то и то - инструмент, чем удобнее и логичнее на данный момент, тем и пользуешься. Это все равно что сказать "я не люблю дрель, перфоратор круче" и крутить потом им саморезы )