За последние 24 часа нас посетили 18585 программистов и 1599 роботов. Сейчас ищут 955 программистов ...

Отделение дизайна от кода

Тема в разделе "Прочие вопросы по PHP", создана пользователем enshtein, 13 дек 2006.

  1. enshtein

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

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    допустим я хочу замутить сайт с возможностью смены шкур (шаблонов редактируемых дизайнером)

    например так выглядит index.php

    Код (Text):
    1.  
    2. // здесь идет отработка логики программы и инициализация всех переменных, вставляемых в tpl файлы обычным <?php echo $name_var; ?>
    3.  
    4. include('header.tpl');
    5. include('body.tpl');
    6. include('footer.tpl');
    Т.о. в файле шаблона с расширение *.tpl - содержиться HTML-код понятный веб-дизайнеру со вставками где надо элементов <?php echo $menu; ?> - на которые дизайнер реагирует нормально :)

    Однако у меня например все менюшки сайта формируются на основе результатов запросов к БД, обрабатываются и выводятся обрамленные тегами в нужное место в шаблоне. Но я все равно сдесь не вижу легкую смену дизайна - ведь формирование менюшек происходит у меня в логике программы а не в шаблоне -а поэтому от глаз дизайнера скрыто многое - т.е. теги <table>, <tr>, <td>

    Возможно ли решить проблему так, чтобы отдать в руки дизайнера полную власть над дизайном - и в тоже время скрыть от него весь php-код, кроме банальных вставок <?php echo $name_var; ?>
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    enshtein

    вот раздели логику нормально и все будет пучком.
     
  3. enshtein

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

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    дык в том то и дело как ее разделить?
    я понимаю что логика программы (или бизнесс-логика) и логика представления - это разные вещи и порой не всегда легко отделить одно от другого, но я хочу избежать того чтобы отдавать в руки дизайнера даже логику представления!
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    enshtein

    ИМХО 100% отдать не получится, если сайт более менее сложный. я сам парился с такой задачей.

    либо шаблонизатор писать умный, но тогда он мало чем будет отличатся от пхп кода.

    либо все-таки что-то оставлять в коде, но тогда будет каша.

    я вообще за то, что бы все делать классически. сначала дизайн. потом нарезка. протом программинг, а на лету менять дизайн - дело неблагодарное.

    максисмум что можно отдать - это div верстка и дизайнеру отдавать css править
     
  5. Anonymous

    Anonymous Guest

    Имхо, в идеале должно быть 3 человека: программист, дизайнер и верстальщик... но верстальщик как правило на пост-советском пространстве реализуется программистом+дизайнером... отсюда и каша.
     
  6. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <table>
    2. <?foreach ($menu_items as $item):?>
    3. <tr><td><?=$item?></td></tr>
    4. <?endforeach;?>
    5. </table>
    зачем скрывать такой php-код от дизайнера? пусть сколько хочет редактирует html, никто его не заставляет редактировать php.
     
  7. enshtein

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

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    ну в принципе да, согласен :) Ведь по большому счету какая разница в чем путаться веб-дизайнеру или во вставочных тегах PHP <?php ?> или в тегах шаблонизатора, в конце концов - нарушить логику представления он сможет в обоих случаях.... :)
     
  8. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    если дизайнер/верстальщик не будет трогать php-код, то нарушить он сможет только верстку.
     
  9. enshtein

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

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    в продолжении темы - хотелось бы задать вопрос как лучше огранизовать такую вот штуковину:

    Страница делиться на части
    левая часть у меня содержит блоки, которые в свое время могут в себе содержать или простые ссылки - типа меню ссылок или же быть выводом работы какого-либо модуля (ну типа Голосавание, Авторизация, Кто щас на сайте) - очень похоже на RunCMS - ну конечно не только - это я для примера

    Дык вот как же мне поступить в таком случае... ведь логика представления не простая - потому как кол-во блоков и содержимое каждого из блоков - формируется на основании БД
     
  10. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    жёсткое извращение =)

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

    смарти?! =)
    посмотри на функцию, которую я написал:
    http://www.php.ru/forum/viewtopic.php?t=1629&start=30
    может идея понравится и свою напишешь.
     
  11. draak

    draak Guest

    SMARTY идеален =)
     
  12. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    тем не менее, мало чем отличается от того же "смарти".
    smarty:
    Код (Text):
    1. <table>
    2. {foreach item="item" from=$menu_items}
    3. <tr><td>{$item}</td></tr>
    4. {/foreach}
    5. </table>
    практически то же самое. :)
     
  13. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    нет ничего идеального.
     
  14. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    simpson
    смарти в топку. думаю меня многие поддержат.
     
  15. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    я в том числе. :)
     
  16. draak

    draak Guest

    вы просто не умеете его готовить
    function.html_table.php
    PHP:
    1. <?php
    2. /**
    3.  * Smarty plugin
    4.  * @package Smarty
    5.  * @subpackage plugins
    6.  */
    7. ?>
     
  17. Vaulter

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

    С нами с:
    13 дек 2006
    Сообщения:
    1
    Симпатии:
    0
    если уж об идеалах так это XML+XSLT :)
    а я вот своим шаблонизатором пользуюсь и советую всем хотя бы попробовать написать :)
     
  18. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    точно, и пусть потом дизайнер/верстальщик разбирается, куда и какой параметр подставить, чтобы установить класс для ячейки html-таблицы и т.п. так?
     
  19. draak

    draak Guest

    Я прелагаю альтернативы, это была одна из них.
    А писать такие вещи как шаблонизаторы это глупо. Ты тратишь време на то, что уже написано другими.
    Лучше бы написал такие вещи, которых еще нет, мы тебе спасибо сказали бы.
    А написав еще один шаблонизатор, когда их уже просто тысячи, ты просто тратишь свое время. И просто показываешь свое не уважение к разработчикам того же SMARTY.

    Объясните мне как может быть человек таким невежественным, и в то же время умным в программирование. - Звездная болезнь? :D
     
  20. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Имхо отделение кода от дизайна не всегда нужно, я например на одном своём сайте генерирую HTML прямо в РНР, а вот дизайн делаю с помощью CSS. (уже 4 дизайна успел сменить не тронув ни РНР ни HTML код)
     
  21. NaRuVi

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

    С нами с:
    14 дек 2006
    Сообщения:
    80
    Симпатии:
    0
    Адрес:
    Москва
    При чем здесь не уважение?


    А если готовые решения неподходят?

    Vladson
    Полностью согласен с Вами. Полностью отделить мух от котлет врядли получится
     
  22. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    draak, это не невежество, это реальность.
     
  23. draak

    draak Guest

    Я там понимаю говорили бы про какой-нить не серьезный шаблонизатор, так про смарти же говорите. Сами PHP smarty.php.net это их проект.

    Кто там из вас сказал что смарти это фигня, да вот ваши шаблонизаторы это полнейшая фигня, дайте мне его, напишите мануалы, и если он мне подойдет я заберу слова обратно. Если я щас начну их сравнивать smarty и ваш самаписанный шаблонизатор вам стыдно станет.

    Окей я понимаю что вы скажите, что мол пишим мы его под свои нужды, под свои задачи. Но я то предлогаю общее решение проблемы если чуваку нужно отделить PHP от html то ему идельное решение это SMARTY, а вы ему задвигаете речь о том что напиши свой шаблонизатор, возьми Си и напиши свой PHP, вам что похвастаться охото что вы там смогли накатать маломальский шаблонизатор и теперь где надо и где не надо несете этот брет.
    Да блин напишите вы форум чтож вы PHPbb используете.
    Потому что есть уже phpbb и если вы напишите свой форум вас все дружно на 3Б пошлют.
    Так вот я говорю что есть уже SMARTY, и писать такой второй это время коту под хвост.
     
  24. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    см. выше
    чебурген вернулся =)))
     
  25. enshtein

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

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    А кто-нибудь читал это http://spectator.ru/technology/php/easy_templates заметка Spectator-a под названием «Шаблоны в PHP для чайников»
    После прочтения я окончательно решил что не буду париться с этими шаблонизаторами и т.д. К тому заглянул в код CMS-ок Joomla, Mambo, Runcms и др. и увидел что народ слишком незаморачиваятся и не накручивает лишней абстракции, они делают проще - поместили весь шаблон в один файл (themes.php) и разметили его примерно так:

    Код (Text):
    1. <? function header($title) {>
    2. <html><head>
    3. <title><?=$title ?></title>
    4. </head>
    5. <? } ?>
    6.  
    7. <? function body() {>
    8. что угодно
    9. <? } ?>
    10.  
    11. <? function footer() {>
    12. </body></html>
    13. <? } ?>
    и в итоге на выводе (файл index.php)

    Код (Text):
    1. <?php
    2. include_once('themes.php');
    3. header('Главная');
    4. body();
    5. footer();
    6. ?>
    ИМХО лучшее решении... скажете изврат????
    а что
    Код (Text):
    1. <html>
    2. <title>{TITLE}</title>
    3. <body>
    4. {TEXT}
    5. </body>
    6. <html>
    чем то лучше - а если его нагрузить логикой представления (условия, циклы и т.д.) - то получиться то же самое!!!
    Так что использовать шаблонизатор или нет - СУГУБО ЛИЧНО ДЕЛО!!!