Логика в шаблонах

kseen

Новичок
Логика в шаблонах

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

Vladson

Сильнобухер
kseen
Кто кричит ? Убей его !!!

От сложного кода избавляться желательно, но не от логики как таковой !
 

WP

^_^
> Но ведь и про код в шаблонах тоже кричат что это зло
Кого это е...?
 

Alexandre

PHPПенсионер
я ничего не вижу плохого использования логики в шаблонах
 

Valdemar_UA

Новичок
Если коротко, то, ИМХО, в шаблонах нужно использовать логику представления, а в php - коде бизнес логику(получение данных, обработка данных).

К тому же всегда возможны исключения из правил.
 

fisher

накатила суть
нужно разделять view-логику и прочее. в шаблонах может быть логика. в php не должно был html. в шаблонах не должно быть php. это всё непротиворечивые утверждения.

быть с менюшкой очень просто. код который бежит по массиву может инклюдить (итерировать) шаблон. код который бежит по массиву это код уровня представления, там нет html. код в шаблоне - html. можкшь туда добавить логику, но рискуешь получить спагетти. вообше, скока людей стока мнений. я ориентируюсь на код где обычно ооочень много view логики. там надо делить php и html. это не для всех проектов оправдано.
 

Alexandre

PHPПенсионер
нужно разделять view-логику и прочее. в шаблонах может быть логика. в php не должно был html.
+1
в шаблонах не должно быть php.
Однако использование плагина допускается. А плагин - это и есть отработка php функции. Однако - это не пхп код, по этому с этим утверждением я согласен - в шаблоне не должно быть пхп-кода.
 

kseen

Новичок
Автор оригинала: fisher
быть с менюшкой очень просто. код который бежит по массиву может инклюдить (итерировать) шаблон.
Вот ещё столкнулся с такой ситуацией: есть форма авторизации, которая находится в отдельном шаблоне. Там ничео нет, кроме таблички, в ней форма с <input type=text>. Теперь, если пользователь три раза неправильно вводит информацию, мне необходимо добавить каптчу в форму. Т.е. в самом шаблоне я делаю
PHP:
if ($captchaenabled){ 
//Вставляю <input type=text name=captchavalue>, а также новую строку таблицы с картинкой
}
Прямо в том месте, где необходимо воткнуть captcha'у. Как возможно не использовать PHP-код в шаблоне и добиться такого же результата, учитывая то, что шаблон с формой авторизации идёт монолитно (т.е. <html><head></head><body><table><form></form></table></body></html>)
 

Фанат

oncle terrible
Команда форума
Теперь, если пользователь три раза неправильно вводит информацию, мне необходимо добавить каптчу в форму
оооочень странное использование капчи.
вообще, похоже на обрывки описаний двух проблем, которые каким-то образом слились в одну.
ну да не суть.
Как возможно не использовать PHP-код в шаблоне и добиться такого же результата
а чем описанная проблема отличается от остальных случаев применения шаблонов?
то, что шаблон с формой авторизации идёт монолитно
боже, а это-то здесь при чем?
 

kseen

Новичок
Автор оригинала: Фанат
а чем описанная проблема отличается от остальных случаев применения шаблонов?
Тем, что, например, шаблон менюшки не меняется в вышеописанном случае, а форма авторизации меняется, т.е. добавляется новая текстовая строка.
Автор оригинала: Фанат
оооочень странное использование капчи.
Почему странное ?
 

Фанат

oncle terrible
Команда форума
Тем, что, например, шаблон менюшки не меняется в вышеописанном случае, а форма авторизации меняется, т.е. добавляется новая текстовая строка.
ты сам-то понял, что сказал?
в первом предложении у тебя ШАБЛОН, а во втором - ФОРМА.
определись сначала, о чем ты говоришь.
Почему странное ?
проехали.
с шаблонами сначала разберись.
 

kseen

Новичок
Автор оригинала: Фанат
ты сам-то понял, что сказал?
сорри, голова не варит после двух суток без сна.
Вот файлик auth.tpl.php, который является шаблоном:
PHP:
<HTML>
 <HEAD>
  <Title><?=$_template_title?></Title>
  <link rel="stylesheet" href="style.css">
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=Windows-1251">
 </HEAD>
  <Body>
  <Table align="center" height="80%" width="100%" cellspacing="0" align="center" valign="top" border="0" rules="all">
  <TR><TD align="center" valign="center">
   <Table Class="authmessage" Align="Center" Width="30%" Cellspacing="0" Align="Center" Valign="Top" Border="0">
    <TR class="auth_header_row">
     <TD align="center" valign="top" colspan="2">
      <img src="/images/auth_icon.gif" border="0" alt="Аутентификация">&nbsp;<B>Аутентификация</b>
     </TD>
    </TR>
    <TR class="auth_body_text">
     <TD align="center" valign="top" colspan="2"><?=$_template_message?></TD>
    </TR>
    <TR>
     <TD align="center" colspan="2">
      <form action="auth.php" method="post">
     </TD>
    </TR>
    <TR>
     <TD align="right" class="auth_td">
      <b>Имя пользователя:</b>
     </TD>
     <TD align="left">
      <input class="formtext" name="Login" type="text" value="<?=$_template_lastlogin?>">
     </TD>
    </TR>
    <TR>
     <TD align="right" class="auth_td">
      <b>Пароль:</b>
     </TD>
     <TD align="left">
      <input class="formtext" name="Password" type="password" value="">
     </TD>
    </TR>
         <?php if($_template_captchaenabled) { ?>

            <TR>
             <TD align="center" class="auth_td" colspan="2">
              <img src="new/getc.php?cid=<?=$_template_cid?>" border="0" alt="Вам необходимо ввести число с картинки">
             </TD>
            </TR>
            <TR>
             <TD align="right" class="auth_td">
              <b>Число:</b>
             </TD>
             <TD align="left">
              <input class="formtext" name="c" type="text" value="">
             </TD>
            </TR>
            <input type="hidden" name="cid" value="<?=$_template_cid?>">

         <?php } ?>

    <TR>
     <TD colspan="2" align="center">
      <input type="submit" value="Вход" class="auth_return_button">
      </form>
     </TD>
    </TR>
    <TR class="bottom_body_text">
     <TD align="center" valign="top"></TD>
    </TR>
   </TABLE><BR>
  </TD></TR>
  </table>
 </BODY>
</HTML>
Как избежать использования
PHP:
<?php if($_template_captchaenabled) { ?>
?
 

Фанат

oncle terrible
Команда форума
скажи, это у тебя единственный шаблон? других нет?
а шаблон вывода меню можно посмотреть?
 

kseen

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

Фанат

oncle terrible
Команда форума
но меню где-то выводится? в каком-то из шаблонов?
ты можешь показать, как оно выводится? или это секретная информация госдепартамента США, и хранится в форте Кнокс?
 

kseen

Новичок
При чём тут меню? С меню всё давно уже решено
код который бежит по массиву может инклюдить (итерировать) шаблон
Теперь другая проблема:
Как избежать использования
PHP:
<?php if($_template_captchaenabled) { ?>   ?
Или надо было завести отдельный топик ?
 
Сверху