За последние 24 часа нас посетили 39483 программиста и 1283 робота. Сейчас ищут 1059 программистов ...

Шаблонизаторы не предлагать

Тема в разделе "PHP для новичков", создана пользователем Freakmeister, 26 июн 2011.

  1. Freakmeister

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

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Пишу движок, в котором PHP преобладает над вёрсткой, а весь вывод происходит через echo. Появилась нужда в отделении кода от вёрстки, хочется придумать какой-нибудь простой и удобный способ как для меня, так и для дизайнера. Пока единственное что приходит в голову это вот:
    HTML:
    1.  
    2. <!-- файл вёрстки template.htm выглядит например так -->
    3. <div "navigation">
    4. <!-- row1 -->
    5. </div>
    PHP:
    1. <?php
    2. // $row - это например список ссылок, вытащенный из бд в цикле, при помощи php
    3. $tpl=file_get_contents('template.htm');
    4. $tpl=str_replace("<!-- row1 -->", $row, $tpl);
    5. echo $tpl;
    6. ?>
    Единственное что здесь смущает, это то что понадобится много htm-файлов, т.к. один php-файл может иметь в себе несколько страниц. Собссна, если кто-то знает, или активно использует ещё какие-то методы разделения кода и вёрстки, прошу ими поделиться.
     
  2. Лунтик-Некрофил

    Лунтик-Некрофил Активный пользователь

    С нами с:
    15 май 2010
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Тверь
    Почитай про MVC-модель, иначе то что ты со своим дизайнером лепишь будет нечитабельно для вас уже через месяц.
     
  3. Freakmeister

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

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Читал я про MVC-модель, всё у нас есть - и M, и V, и C. Сейчас viewer представляет собой набор php-функций типа "show_header", "show_footer" и т.д. В принципе, это уже читабельно, но для дизайнера там всё-равно есть всякие лишние "штуки". Так что, хочется провести эту границу как-то более чётко.
     
  4. Лунтик-Некрофил

    Лунтик-Некрофил Активный пользователь

    С нами с:
    15 май 2010
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Тверь
    Значит плохо читал. Посмотри как это делается во фреймворках типа зенда и ийй.
    Общий вид сайта будет просто версткой, где ты просто понапихаешь конечных переменных, например экранируя их через @, дабы не было предупреждений.
    От дизайнера тут вообще ничего практически не потребуется понимать - просто объяснишь ему где выводятся контент, меню и т.п.
    Это некоторыми местами может и примитивно, но в отличие от постоянных вызовов ф-ий хедера, футера и т.д. - удобство как для тебя, так и для дизанера.
     
  5. Лунтик-Некрофил

    Лунтик-Некрофил Активный пользователь

    С нами с:
    15 май 2010
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Тверь
    А написав таким способом основной функционал, ты сможешь вообще не париться в дальнейшем с типичными сайтами - дают дизайн, проставил переменные на вывод и работа закончена.
     
  6. jenya777777

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

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Не думаю, что большое количество htm файлов как то уменьшит производительность твоего сайта, в фреймворках, это например норма. Для каждого контролера свой вид. А вот в CMS там как раз все на единичных(общих) файлах и заложена функциональность. Так что не имхо не парься, или бери шаблонизатор (Smarty) чтобы не изобретать велосипед, или мудри с htm шаблонами
     
  7. Freakmeister

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

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    И чем это отличается от того метода, который я описал в первом посте?
     
  8. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    PHP:
    1. <?php
    2. class Template {
    3.   protected $data = array();
    4.   ...
    5.   public function render($template) {
    6.      exctract($this->data, EXTR_SKIP);
    7.      require($path . $template .  ".php");
    8.   }
    9. }
    10.  
    На вот тебе шаблонизатор
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Если ты имеешь ввиду, что делаешь что-то типа
    PHP:
    1. <?php
    2. $username = 'Vasya';
    3. echo "<h1>$username</h1>";
    4.  
    то лучше делай
    PHP:
    1. <?php
    2. $username = 'Vasya';
    3. ?>
    4. <h1><?=$username?></h1>
    5. <?php
    6. ...
    ну а вообще, php - сам по себе шаблонизатор (эта фраза уже была написана 100500 раз на этом форуме). Поэтому нет ничего страшного в таком подходе:
    PHP:
    1. <?php
    2. $username = 'Vasya';
    3. include 'username.tpl';
    4.  
    где в t_username.tpl:
    PHP:
    1. <h1><?=$username?></h1>
    Но в этом случае переменные шаблона находятся в глобальной области видимости. Поэтому, чтобы там не было лишних переменных, стоит запихнуть это в функцию, или в класс как MiksIr показал.