За последние 24 часа нас посетили 24464 программиста и 1656 роботов. Сейчас ищут 922 программиста ...

smarty вывод

Тема в разделе "PHP для новичков", создана пользователем kowapos, 11 янв 2014.

  1. kowapos

    kowapos Активный пользователь

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    Вообщем. в таблице users 2 записи.

    хочу вывести в шаблон
    Код (Text):
    1. $query = mysql_query("SELECT `login`,`code` FROM `users`");
    2. while($row[] = mysql_fetch_array($query));
    3.  
    4.  
    5. $smarty->assign('users', $row);
    6. $smarty->display('index.tpl');

    сам шаблон
    Код (Text):
    1. {foreach from=$users item=u}
    2.     Логин: {$u.login} <br />
    3.     Пароль:  {$u.code} <br />   <br />  
    4. {/foreach}

    результат, 2 единственных записи из бд и третья пустая, которой не должно быть. что делать?
    [​IMG]
     
  2. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    Смарти конечно тот ещё отстой, но он тут не при чём - в коде ошибка.
    Попробуйте так:
    Код (PHP):
    1. $query = mysql_query( "SELECT `login`,`code` FROM `users`" );
    2. while($row = mysql_fetch_array($query)) {
    3.     $rows[] = $row;
    4. }
    5.  
    6. $smarty->assign('users', $rows);
    7. $smarty->display('index.tpl'); 
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    а че со смарти то не так?
     
  4. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    romach, да жуть вообще - одни проблемы с ним, а плюсов никаких.
    "Компилирующий", блин, шаблонизатор... ну ну...

    PHP специально разработан для встраивания в HTML. Писать шаблоны надо только на нём.
    Ну или XSLT если хорошо его знаете и много ресурсов есть.
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Тем, что он обарудован надстройкой, которой собственно не должно быть, смысл от шаблонизатора в котором опять идут проверки?
    Циклы... зачем на 2х сторонах делать одни и те же проверки?
    Должно быть все просто php - это реализация, а шаблон это вывод из реализации, не надо там никаких проверок, все проверки в php.
    А то тут получается какая-то ерунда.
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Не сообразил с утра ) Проверкой на что он оборудован? Смарти создает тот же самый нативный код, который в последствии и используется, т.ч. если исключить первый запуск, потери по времени на самом деле не существенны.
    Цикла в любом случае будет два в этом примере, если конечно не валить пхп вместе с хтмлом в одну кучу добиваясь невиданных ускорений путем выноса мозга разработчику. Тут как раз стоит избавиться от первого цикла while($row[] = mysql_fetch_array($query));, а не ругать шаблонизаторы. Ну и возможно вопрос привычки, но:
    Код (Text):
    1.  
    2. {foreach $array as $key => $row}
    3.   {$key} : {$row}
    4. {/foreach}
    Гораздо приятнее на глаз, чем вставки типа <?php echo $var?> на каждом углу. Или упаси боже сборная солянка из всего-всего в одном файле.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ты мыслишь узко.
    Зачем делать в шаблоне цикл? Когда есть место которое уже это сделало и просто выводим в шаблоне {tag}.
    Также и с блоками.
    Подобие:
    Код (PHP):
    1. [block]   {tag}
    2. [/block] 
    Ничего лишнего.
    К тому же этот блок можно хоть рекурсивный делать, хоть цикличный, при этом у нас обработка будет в php и никаких компиляций и прочей вымышленной ерунды не будет.
    И не будет создаваться еще по 100+ файлов якобы скомпилированных!
    А для кеширования можно просто вывод сохранять в память или в файлы, смотря что требуется.
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Тут вопрос скорее, зачем в пхп делать цикл, когда давно уже изобрели PDO.
    Вообще, это попытка сэкономить на пустом месте. Цикл этот повторный нагрузки не создаст по сравнению с той же работой с БД которая при неправильном проектировании может создать ещё те тормоза. Да и при правильном тоже может )
    А если она всё же внезапно существенна, то проще вообще отдать json и пусть все генерируется на клиенте. Но до тех пор лучше пользоваться удобными велосипедами изобретенными умными людьми, чем усложнять себе жизнь гоняясь за миллисекундами и тем самым упуская реальные косяки.
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Пользуйся, на здоровье.
     
  10. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Спасибо. Вообще, мне не понятно было столь негативное отношение к смарти и шаблонизаторам вообще и нулевая реакция на использование древнего mysql* )

    Вот тут очевидно верх оптимизации )
    viewtopic.php?f=25&t=47043
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Поймешь когда-нибудь ;)
     
  12. kowapos

    kowapos Активный пользователь

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    спасибо, ))) хотя так пробовал))

    Добавлено спустя 36 минут 31 секунду:
    а еще вопрос.
    А как структурировать? ну есть у меня шапка и футер, и че, инклюдить его в каждом "контроллере" (если это можно так назвать)?
     
  13. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    Код (Text):
    1. <?foreach( $array as $key => $row ){?>
    2.     <?=$key?> : <?=$row?>
    3. <?}?>
    никаких echo в шаблонах.
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl наследование вам в помощь.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я люблю эхо. Че за тяга к шаблонам мне не понять.
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А я не люблю эхо, впрочем как и смарти. И то и то - инструмент, чем удобнее и логичнее на данный момент, тем и пользуешься. Это все равно что сказать "я не люблю дрель, перфоратор круче" и крутить потом им саморезы )
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    отличная аналогия!