За последние 24 часа нас посетил 17861 программист и 1685 роботов. Сейчас ищут 1824 программиста ...

Шаблонизатор

Тема в разделе "Решения, алгоритмы", создана пользователем Danilka, 30 апр 2008.

  1. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Я же специально написал
    Покажи пример твоей красивой систематизации кода для указанных мной ограничений.
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    да показывай, а то затроллил тут всю тему..
     
  3. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    Сначала приведите мне конкретную простейшую задачу, а я подумаю...

    Класс ещё нужно грамотно написать. Чтобы потом его люди использовали и не чесали затылки - откуда ошибки?
    Где ваши хваленые библиотеки классов, с которыми можно было работать без проблем? А копаться в чужом коде - дело
    неблагодарное.
     
  4. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    cms-lite
    ты как баба, ей богу, ляляля, тапаля... покажи код. Тут были примеры движков на одних функциях, и нечё я приятно удивился, а вот ты только базарить можешь
     
  5. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    дай ссылку, чтобы я посмотрел эти движки.
     
  6. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    не отвлекайся все ждут ))
     
  7. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    Короче, все что я вам хочу сказать, товарищи программисты, по данной теме, так это следующее:

    -PHP прост и эффективен как велосипед
    -ООП в веб-разработке - это как третье колесо для велосипеда, в нем есть какая-то польза, но, в общем то, можно вполне эффективно ездить и на двух
    -Системы активных шаблонов - это как велосипед предназначенный для того, чтобы крутить педали другого велосипеда, если кто-то считает такую систему эффективной - это его право
    -PHP - лучший шаблонизатор, тот кто это понимает - поймет.
     
  8. Угу. Слив защитан, неудачник.
     
  9. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    То есть код нам показан не будет? Я уже и тазик рядом с собой поставил...
     
  10. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Ненене
    Чтобы верстальщик в какой-нить tpl_search_show_in_result_rows_where_nothing.php какой-нить shell встроил?
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Во-первых, боятся этого глупо.

    Во-вторых, подключать верстку к проекту должен все же программист. Поэтому если ты не проверил - твои проблемы.
     
  12. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Далеко не факт.
    Пример из жизни: сайт www.autoprognoz.ru. Этот сайт разрабатывался крайне медленно, т.к. над ним с перерывами работали разные люди. Сайт сделан на CMS DJEM. Когда я там делал часть интерфейса, у меня были соответвующие права, и я в принципе не мог ничего в програмной части испортить намерено или ненамерено, т.к. у меня небыло доступа к програмному коду. Похожая система есть и в Битрикс.
    Еще была история с другим сайтом, не помню уже адреса. Там была обычная самописная cms-ка, и один мудак встроил невидимый фрейм. При чем код фрема был в файле с расширением .gif и вставлялся функцией include. Сайт принадлежал небольшой фирме.
    Если есть шаблонизатор, можно хранить шаблоны в отдельной директории и только к ним давать доступ кому надо.
     
  13. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    cms-lite
    тема не закрыта, а открыта, просто кто то тут натроллил зря и без всяких аргументов
     
  14. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    Эта проблема выходит за рамки безопасности кода.
    С таким же успехом кто-нибудь и из программеров или админов навредить может.
     
  15. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    [vs] - на мой взгляд (читай ИМХО) - вопрос ограничения скорее административный, чем программный... так как программное ограничение, это так же функциональное ограничение....

    хотя скорее всего по середине ... то-есть:
    ограничиваем доступ к папкам(физически) и разделам(программно) сайта, но внутри раздел/папки все программные ограничения накладываю и функциональные тоже ... что очень неприятно влияет на скорость разработки и возможности реализации .... можно просто логировать изменения и давать в глаз за внедрение яиц ...


    у меня шаблонизатор занимается лишь небольшими корректировками + выбором самого шаблона и кешированием по необходимости ....
     
  16. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    и вообще нафиг трогать холивар...
     
  17. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Шаблонизатор стоит использовать хотя-бы в целях защиты от этих угроз, если над проектом будет работать несколько человек. Верстальщик, к тому же, не сможет слить код, например.
     
  18. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    параноя
     
  19. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    А если автор шаблонизатора, ну так, "случайно", оставит какую-нибудь "дырку"? Что тогда будешь делать?....
    Просто, должны быть ответственные за внутреннюю и внешнюю безопасность люди. Только и всего.
     
  20. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Иногда, да может быть, лишнее, но принцип минимальных привелегий - это основа информационной безопасности.
     
  21. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    прауильно, все права nobody:nogroup и ниипет!
     
  22. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Эх...
    PHP:
    1. <?php
    2. /*
    3.         (c)2010 Vasilii B. Shpilchin
    4.         Нативный шаблонизатор
    5. */
    6. final class view
    7. {
    8.     // Буфер переменных
    9.     private $vars = array();
    10.     // Шаблон (путь, файл)
    11.     private $template = null;
    12.     // Установка шаблона
    13.     function __construct($path)
    14.     {
    15.         $this -> template = $path;
    16.     }
    17.     // Установка переменной
    18.     function set($var, $val)
    19.     {
    20.         $this -> vars[$var] = $val;
    21.     }
    22.     // Получение результата из скрипта
    23.     function get_from_script($path)
    24.     {
    25.         ob_start();
    26.         include($path);
    27.         return ob_get_clean();
    28.     }
    29.     // Вывод результата работы
    30.     function flush()
    31.     {
    32.         extract($this -> vars);
    33.         include($this -> template);
    34.     }
    35. }
    Похоже, остальное лишнее, если кеширование некритично...
     
  23. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вот этого не понял. Можешь объяснить зачем два раза инклуд?
     
  24. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Это чтобы получить результат выполнения какого-нибудь скрипта. Вот так например:
    PHP:
    1. <?php
    2. $view -> set('header', $view -> get_from_script('./main/header.block.php'));
    header.block.php в свою очередь делает что-то вроде
    PHP:
    1. <?php
    2. if ()
    3. {
    4.     $view = new view('a.tpl');
    5.     ...
    6. }
    7. else
    8. {
    9.     $view = new view('b.tpl');
    10.     ...
    11. }
    12. $view -> flush();
    13.  
     
  25. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А кто мешает сделать вот так?
    PHP:
    1. <?php
    2. $partial = new view('./main/header.block.php');
    3. $view -> set('header', $partial->flush());
    А еще веселее, это сделать прокси метод
    PHP:
    1. <?php
    2. final class view {
    3.     public function flush()
    4.     {
    5.         ob_start();
    6.         extract($this->vars);
    7.         include($this->template);
    8.         $content = ob_get_clean();
    9.         ob_end_clean();
    10.         return $content;
    11.     }
    12.     public function __toString()
    13.     {
    14.         return $this->flush();
    15.     }
    16. }
    Тогда все твои субшаблоны отрендерятся сами в момент рендера главного шаблона.
    PHP:
    1. <?php
    2. $view -> set('header', new view('./main/header.block.php'));
    3.  
    4. echo $view;
    5. //или
    6. $content = '<h1>Немного магии</h1><br>' . $view;
    7. echo $content;
    8.  
    Это положительно скажется на производительности.
    Если вдруг твой шаблон/субшаблон на какой-нибудь эпической глубине вложенности не должен будет рендерится. То пока ты не отправишь на вывод главный шаблон у тебя не будет никаких инклудов.