Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

шаблонизация дизайна сайта

312
21 сентября 2007 года
dead_star
392 / / 26.11.2006
"шаблонизация дизайна сайта" эта тема нераз уже обсуждалась и на этом форуме в том часле
я впервые реализовал шаблонизацию и поэтому у меня возникли некоторые вопросы:

код xml документа(код. 1)
Код:
<?xml version="1.0" encoding="windows-1251"?>
<document>
<head>
<title>%TITLE%</title>
<meta>%META%</meta>
</head>
<body>
 <top_panel>
  <date>%DATE%</date>
  <panel>%PANEL%</panel>
 </top_panel>
 <logo>
  <logotype />
  <menu>%MENU%</menu>
  <script>%SWFObject%</script>
 </logo>
 <work>
  <work_top />
  <word>%WORD%</word>
  <copyright>%COPY%</copyright>
 </work>
 <dottom_menu>
  <menu>%MENU%</menu>
 </dottom_menu>
</body>
</document>


php код обработчик(код. 2)
Код:
class Constant_group {
    /* ----- GROUP REPLASE TEMPLATE XML ----- */
    var $replace_temp_pat_doctype = "/<\?xml version=\"[0-9\.]*\" encoding=\"(.*?)\"\?>
<document>
<head>/"
;
    var $replace_temp_rep_doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=\\1\" />"
;
    var $replace_temp_pat_document = "</document>";
    var $replace_temp_rep_document = "</html>";
    var $replace_temp_pat_meta = "<meta>%META%</meta>";
    var $replace_temp_rep_meta = "%META%";
    var $replace_temp_pat_body = "<body>";
    var $replace_temp_rep_body = "<body%OPTION%>";
    var $replace_temp_pat_top_panel = "<top_panel>";
    var $replace_temp_rep_top_panel = "<div id=\"top_panel\">";
    var $replace_temp_pat_top_panel_end = "</top_panel>";
    var $replace_temp_rep_top_panel_end = "</div>";
    var $replace_temp_pat_logotype = "<logotype />";
    var $replace_temp_rep_logotype = "<div id=\"logo_img\"><img src=\"%LOGO%\" alt=\"\" /></div>";
    var $replace_temp_pat_date = "<date>%DATE%</date>";
    var $replace_temp_rep_date = "<div id=\"date_panel\">%DATE%</div>";
    var $replace_temp_pat_panel = "<panel>%PANEL%</panel>";
    var $replace_temp_rep_panel = "<div id=\"mini_panel\">%PANEL%</div>";
    var $replace_temp_pat_logo = "<logo>";
    var $replace_temp_rep_logo = "<div id=\"logo\">";
    var $replace_temp_pat_logo_end = "</logo>";
    var $replace_temp_rep_logo_end = "</div>";
    var $replace_temp_pat_menu = "<menu>%MENU%</menu>";
    var $replace_temp_rep_menu = "<div class=\"menu\">%MENU%</div>";
    var $replace_temp_pat_script = "  <script>%SWFObject%</script>";
    var $replace_temp_rep_script = "%SWFObject%";
    var $replace_temp_pat_work = "<work>";
    var $replace_temp_rep_work = "<div id=\"work\">";
    var $replace_temp_pat_work_end = "</work>";
    var $replace_temp_rep_work_end = "</div>";
    var $replace_temp_pat_work_top = "<work_top />";
    var $replace_temp_rep_work_top = "<div id=\"work_top\"></div>";
    var $replace_temp_pat_word = "<word>%WORD%</word>";
    var $replace_temp_rep_word = "<div id=\"work_word\">%WORD%</div>";
    var $replace_temp_pat_copyright = "<copyright>%COPY%</copyright>";
    var $replace_temp_rep_copyright = "<div id=\"copyright\">%COPY%</div>";
    var $replace_temp_pat_dottom_menu = "<dottom_menu>";
    var $replace_temp_rep_dottom_menu = "<div id=\"dottom_menu\">";
    var $replace_temp_pat_dottom_menu_end = "</dottom_menu>";
    var $replace_temp_rep_dottom_menu_end = "</div>";
    /* ----- END GROUP REPLASE TEMPLATE XML ----- */
}

class Design_Tamplate extends Constant_group {
    /* Replace template(xml) */
    function template_replace(){
        $template = $this->template;
        /* xml <tag> */
        $template = preg_replace($this->replace_temp_pat_doctype, $this->replace_temp_rep_doctype, $template);
        $template = str_replace($this->replace_temp_pat_document, $this->replace_temp_rep_document, $template);
        $template = str_replace($this->replace_temp_pat_top_panel, $this->replace_temp_rep_top_panel, $template);
        $template = str_replace($this->replace_temp_pat_top_panel_end, $this->replace_temp_rep_top_panel_end, $template);
        $template = str_replace($this->replace_temp_pat_meta, $this->replace_temp_rep_meta, $template);
        $template = str_replace($this->replace_temp_pat_body, $this->replace_temp_rep_body, $template);
        $template = str_replace($this->replace_temp_pat_logotype, $this->replace_temp_rep_logotype, $template);
        $template = str_replace($this->replace_temp_pat_date, $this->replace_temp_rep_date, $template);
        $template = str_replace($this->replace_temp_pat_panel, $this->replace_temp_rep_panel, $template);
        $template = str_replace($this->replace_temp_pat_logo, $this->replace_temp_rep_logo, $template);
        $template = str_replace($this->replace_temp_pat_logo_end, $this->replace_temp_rep_logo_end, $template);
        $template = str_replace($this->replace_temp_pat_menu, $this->replace_temp_rep_menu, $template);
        $template = str_replace($this->replace_temp_pat_script, $this->replace_temp_rep_script, $template);
        $template = str_replace($this->replace_temp_pat_work, $this->replace_temp_rep_work, $template);
        $template = str_replace($this->replace_temp_pat_work_end, $this->replace_temp_rep_work_end, $template);
        $template = str_replace($this->replace_temp_pat_work_top, $this->replace_temp_rep_work_top, $template);
        $template = str_replace($this->replace_temp_pat_word, $this->replace_temp_rep_word, $template);
        $template = str_replace($this->replace_temp_pat_copyright, $this->replace_temp_rep_copyright, $template);
        $template = str_replace($this->replace_temp_pat_copyright, $this->replace_temp_rep_copyright, $template);
        $template = str_replace($this->replace_temp_pat_dottom_menu, $this->replace_temp_rep_dottom_menu, $template);
        $template = str_replace($this->replace_temp_pat_dottom_menu_end, $this->replace_temp_rep_dottom_menu_end, $template);
    }
}


результат после обработки(код. 3)
[HTML]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>%TITLE%</title>
%META%
</head>
<body%OPTION%>
<div id="top_panel">
<div id="date_panel">%DATE%</div>
<div id="mini_panel">%PANEL%</div>
</div>
<div id="logo">
<div id="logo_img"><img src="%LOGO%" alt="" /></div>
<div class="menu">%MENU%</div>
%SWFObject%
</div>
<div id="work">
<div id="work_top"></div>
<div id="work_word">%WORD%</div>
<div id="copyright">%COPY%</div>
</div>
<div id="dottom_menu">
<div class="menu">%MENU%</div>
</div>
</body>
</html>[/HTML]

и соответственно php код обработчик(код. 4)
Код:
class Constant_group {
    /* ----- GROUP XML ----- */
    var $rss_xml = "%RSS%";
    var $url_xml = "%URL%";
    var $title_xml = "%TITLE%";
    var $meta_xml = "%META%";
    var $option_xml = "%OPTION%";
    var $logo_xml = "%LOGO%";
    var $date_xml = "%DATE%";
    var $panel_xml = "%PANEL%";
    var $menu_xml = "%MENU%";
    var $SWFObject_xml = "%SWFObject%";
    var $word_xml = "%WORD%";
    var $copy_xml = "%COPY%";
    var $description_xml = "%DESCRIPTION%";
    var $pointer_orange_xml = "%P_ORANGE%";
    var $pointer_gray_xml = "%P_GRAY%";
    var $pointer_green_xml = "%P_GREEN%";
    var $hr_xml = "%HR%";
    var $indent_xml = "%INDENT%";
    var $flash_xml = "%FLASH%";
    /* ----- END GROUP XML ----- */
}

class Design_Tamplate extends Constant_group {
    /* Replace template(xml) */
    function template_replace(){
        /* xml %ID% */
        $template = str_replace($this->title_xml, $this->title, $template);
        $template = str_replace($this->meta_xml, $this->meta, $template);
        $template = str_replace($this->option_xml, $this->body_option, $template);
        $template = str_replace($this->logo_xml, $this->logo_image, $template);
        $template = str_replace($this->date_xml, $this->today_date, $template);
        $template = str_replace($this->panel_xml, $this->panel, $template);
        $template = str_replace($this->menu_xml, $this->menu, $template);
        $template = str_replace($this->SWFObject_xml, $this->SWFObject, $template);
        $template = str_replace($this->word_xml, $this->word, $template);
        $template = str_replace($this->copy_xml, $this->copyright, $template);
        $this->template = $template;
    }
}


Вопрос первый:
У меня вполне симпотичный xml шаблончик(код 1), но вся работа производится с к кодом 3, 4.
Возникает вопрос - может стоит код 3 сразу записывать в xml шаблон, тогда не придется выполнять замену(код 2)?
Но кодом 3 смотрится не так как кодом 1. Что делать?

Вопрос второй:
Нормальная ли у меня реализация в целом?
PS напоминаю, я первый раз реализовываю шаблонизацию

PSS в коде 2, 4 совпадают названия классов и функции. насамом деле это один код из двух классов и одной функции.
312
21 сентября 2007 года
dead_star
392 / / 26.11.2006
xml шаблон(код 1) можно сделать еще проше
Код:
<?xml version="1.0" encoding="windows-1251"?>
<document>
<head>
 <title>%TITLE%</title>
 <meta>%META%</meta>
</head>
<body>
 <top_panel>
  <date>%DATE%</date>
  <panel>%PANEL%</panel>
 </top_panel>
 <logo>%LOGO%</logo>
 <work>
  <word>%WORD%</word>
  <copyright>%COPY%</copyright>
 </work>
 <dottom_menu>%MENU%</dottom_menu>
</body>
</document>

и обработку упростить(код 2)
Код:
class Constant_group {
    /* ----- GROUP REPLASE TEMPLATE XML ----- */
    var $replace_temp_pat_doctype = "/<\?xml version=\"[0-9\.]*\" encoding=\"(.*?)\"\?>
<html>
<head>/"
;
    var $replace_temp_rep_doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=\\1\" />"
;
    var $replace_temp_pat_word = "<document>
<head>
 <title>%TITLE%</title>
 <meta>%META%</meta>
</head>
<body>
 <top_panel>
  <date>%DATE%</date>
  <panel>%PANEL%</panel>
 </top_panel>
 <logo>%LOGO%</logo>
 <work>
  <word>%WORD%</word>
  <copyright>%COPY%</copyright>
 </work>
 <dottom_menu>%MENU%</dottom_menu>
</body>
</document>"
;
    var $replace_temp_rep_word = "<html>
<head>
<title>%TITLE%</title>
%META%
</head>
<body%OPTION%>
 <div id=\"top_panel\">
  <div id=\"date_panel\">%DATE%</div>
  <div id=\"mini_panel\">%PANEL%</div>
 </div>
 <div id=\"logo\">
  <div id=\"logo_img\"><img src=\"%LOGO%\" alt=\"\" /></div>
  <div class=\"menu\">%MENU%</div>
%SWFObject%
 </div>
 <div id=\"work\">
  <div id=\"work_top\"></div>
  <div id=\"work_word\">%WORD%</div>
  <div id=\"copyright\">%COPY%</div>
 </div>
 <div id=\"dottom_menu\">
  <div class=\"menu\">%MENU%</div>
 </div>
</body>
</html>"
;
    /* ----- END GROUP REPLASE TEMPLATE XML ----- */
}

class Design_Tamplate extends Constant_group {
    /* Replace template(xml) */
    function template_replace(){
        $template = $this->template;
        /* xml <tag> */
        $template = str_replace($this->replace_temp_pat_word, $this->replace_temp_rep_word, $template);
        $template = preg_replace($this->replace_temp_pat_doctype, $this->replace_temp_rep_doctype, $template);
    }
}

результат тот же
хотя такой вариант не так эластичен как предыдущий
312
25 сентября 2007 года
dead_star
392 / / 26.11.2006
сейчас в голову мысль пришла
как раньше об этом не подумал незнаю
код 2:

отдельный файл
Код:
class Constant_group {  
    /* ----- GROUP REPLASE TEMPLATE XML ----- */
    var $replace_template_doctype_pat = "/<\?xml version=\"[0-9\.]*\" encoding=\"(.*?)\"\?>
<document>
<head>/"
;
    var $replace_template_doctype_rep = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=\\1\" />"
;

    var $replace_template = array(
        array("</document>", "</html>"),
        array("<meta>%META%</meta>", "%META%"),
        array("<body>", "<body%OPTION%>"),
        array("<top_panel>", "<div id=\"top_panel\">"),
        array("</top_panel>", "</div>"),
        array("<logotype />", "<div id=\"logo_img\"><img src=\"%LOGO%\" alt=\"\" /></div>"),
        array("<date>%DATE%</date>", "<div id=\"date_panel\">%DATE%</div>"),
        array("<panel>%PANEL%</panel>", "<div id=\"mini_panel\">%PANEL%</div>"),
        array("<logo>", "<div id=\"logo\">"),
        array("</logo>", "</div>"),
        array("<menu>%MENU%</menu>", "<div class=\"menu\">%MENU%</div>"),
        array("  <script>%SWFObject%</script>", "%SWFObject%"),
        array("<work>", "<div id=\"work\">"),
        array("</work>", "</div>"),
        array("<work_top />", "<div id=\"work_top\"></div>"),
        array("<word>%WORD%</word>", "<div id=\"work_word\">%WORD%</div>"),
        array("<copyright>%COPY%</copyright>", "<div id=\"copyright\">%COPY%</div>"),
        array("<dottom_menu>", "<div id=\"dottom_menu\">"),
        array("</dottom_menu>", "</div>"),
    );
    /* ----- END GROUP REPLASE TEMPLATE XML ----- */
}


ядро
Код:
class Design_Tamplate extends Constant_group {
    function template_replace(){
        $template = $this->template;
        if (isset($this->replace_template_doctype_pat)){
            $template = preg_replace($this->replace_template_doctype_pat, $this->replace_template_doctype_rep, $template);
        }
        for($i=0; $i < count($this->replace_template); $i++){
            $template = str_replace($this->replace_template[$i][0], $this->replace_template[$i][1], $template);
        }
        $this->template = $template;
    }  
}

и как результат функция ядра(обработчик шаблона) от шаблона практически не зависит

а XML константы из кода 4 можно переработать в логический массив, что тоже очень сильно упрощает дело
Код:
class Constant_group {
    /* ----- GROUP XML ----- */
    var $xml = array(
        'rss' => "%RSS%",
        'url' => "%URL%",
        'title' => "%TITLE%",
        'meta' => "%META%",
        'option' => "%OPTION%",
        'logo' => "%LOGO%",
        'date' => "%DATE%",
        'panel' => "%PANEL%",
        'menu' => "%MENU%",
        'SWFObject' => "%SWFObject%",
        'word' => "%WORD%",
        'copy' => "%COPY%",
        'description' => "%DESCRIPTION%",
        'pointer orange' => "%P_ORANGE%",
        'pointer gray' => "%P_GRAY%",
        'pointer green' => "%P_GREEN%",
        'hr' => "%HR%",
        'indent' => "%INDENT%",
        'flash' => "%FLASH%"
    );
    /* ----- END GROUP XML ----- */
}
// пример $xml['copy'] вернет %COPY%

и все же
Где великие умы этого форума?
Дайте бедному ламеру толковый совет
353
25 сентября 2007 года
Nixus
840 / / 04.01.2007
Что-то все как-то заморочено. Зачем лишний xml файл?
Шаблонизатор, по-моему, должен быть проще.
Т.е. есть файл шаблона test.tpl:
[HTML]<html>
<body>
Привет, <b>%Name%</b>
</body>
</html>[/HTML]
В коде пишем то-то типа:
 
Код:
templateCompile("test.tpl", array(
      'Name' => "Вася"
));

Получаем на выходе:
[HTML]<html>
<body>
Привет, <b>Вася</b>
</body>
</html>[/HTML]
312
26 сентября 2007 года
dead_star
392 / / 26.11.2006
Цитата: Nixus
Что-то все как-то заморочено. Зачем лишний xml файл?


вобще никакого лишнего xml файла нет
xml файл всего один и в нем записан код 1, а код 3 лишь демонстрация промежуточного этапа который остается в программе и никто его его не видит, тоесть код 1 преабразуется в код 3 и сразу без остановки преобразуется в тот код который увидет пользователь


Цитата: Nixus
Шаблонизатор, по-моему, должен быть проще.
Т.е. есть файл шаблона test.tpl:
[HTML]<html>
<body>
Привет, <b>%Name%</b>
</body>
</html>[/HTML]
В коде пишем то-то типа:
 
Код:
templateCompile("test.tpl", array(
      'Name' => "Вася"
));

Получаем на выходе:
[HTML]<html>
<body>
Привет, <b>Вася</b>
</body>
</html>[/HTML]


недоконца понимаю твою мысль(я вроде зделал все тоже самое).
если же ты подразумевал выкинуть нафиг код 1 и код 2, а в xml документ записывать код 3, то так и надо было говорить
PS это и есть мой основной вопрос([post=212142]Вопрос первый[/post])

15
26 сентября 2007 года
shaelf
2.7K / / 04.05.2005
2Nixus
Мне кажется проще делать по принципу смарти
 
Код:
$view->assign('name', $value);
$view->display('template.tpl');
92
26 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
ихмо смарти оч. хороший шаблонизатор... а зачем писать своё? (просто интересно, я по крайней мере не столкнулся еще с такой потребностью)... :)
312
26 сентября 2007 года
dead_star
392 / / 26.11.2006
Цитата: Тень Пса
ихмо смарти оч. хороший шаблонизатор... а зачем писать своё? (просто интересно, я по крайней мере не столкнулся еще с такой потребностью)... :)


Зачем писать? Потому что я не знал другого способо
Теперь знаю Smarty. Покапал немного, интересная система, но мне непонравилось и шаблоны какието некрасивые.
Впринцыпи, смысл ее использовать? Кто я? Тупая блондинка или програмист?
Если я буду пользоваться готовыми шаблонами навязанными мне то какой из меня програмист?

Это из серии: "все уже давно написано, давайте не будем писать"

15
26 сентября 2007 года
shaelf
2.7K / / 04.05.2005
Многие не любят за его "тормознутость". У меня сейчас система (фреймворк) построена на нём и с учётом ORM, MVC на загруженом ноуте (core2duo, 2gb мозгов, но стоит томкат, апач, мускул, оракл и постгрес + дофига всего запущено) показывает 19,7 ответов в секунду (AB) с морды... Вопрос, куда тебе больше, ибо 19,7 это для хомяка и не только это много (~1 300 000 хитов в сутки, с учётом, что в сутках ~ 19 часов) :)
Если мне не будет хватать этого, то перейду на blitz.
337
26 сентября 2007 года
shine
719 / / 09.06.2006
Цитата: dead_star

Вопрос второй:
Нормальная ли у меня реализация в целом?
PS напоминаю, я первый раз реализовываю шаблонизацию


Независимо от того, какой раз вы реализуете шаблонизацию, то, что у вас получилось никуда не годиться. Основным предназначением шаблонизации является возможность независимой работы программиста и дизайнера. То есть дизайнер должен знать только HTML(и может быть CSS) чтобы менять что-то во внешнем виде сайта. Если используется Smarty, то дизайнер может править CSS и шаблоны Smarty c почти чистым HTML не залазя в код php. У вас он вынужден будет ковырятся в php-скрипте редактируя значения строковых переменных и str_replace который эту переменную обрабатывает. В итоге непонятно чего вообще вы добились использованием этого шаблонизатора.
Используйте готовые качественные решения и не тратьте время на создание бесполезных вещей. Нет ничего зазорного в том чтобы использовать чужие свободно распространяемые разработки в своих проектах. Более того, это оптимальный вариант, т.к. экономятся и время, и нервы.

p.s. я жив-здоров и вполне нормально работаю несмотря на то, что никогда не создавал шаблонизаторов.

312
26 сентября 2007 года
dead_star
392 / / 26.11.2006
Цитата: shine
Независимо от того, какой раз вы реализуете шаблонизацию, то, что у вас получилось никуда не годиться. Основным предназначением шаблонизации является возможность независимой работы программиста и дизайнера. То есть дизайнер должен знать только HTML(и может быть CSS) чтобы менять что-то во внешнем виде сайта. Если используется Smarty, то дизайнер может править CSS и шаблоны Smarty c почти чистым HTML не залазя в код php. У вас он вынужден будет ковырятся в php-скрипте редактируя значения строковых переменных и str_replace который эту переменную обрабатывает. В итоге непонятно чего вообще вы добились использованием этого шаблонизатора.
Используйте готовые качественные решения и не тратьте время на создание бесполезных вещей. Нет ничего зазорного в том чтобы использовать чужие свободно распространяемые разработки в своих проектах. Более того, это оптимальный вариант, т.к. экономятся и время, и нервы.

p.s. я жив-здоров и вполне нормально работаю несмотря на то, что никогда не создавал шаблонизаторов.



под словом шаблонизация мы понимаем немножечко разные вещи
нет если говорить глобально то Smarty бесспорно хороший шаблонизатор, а мой код это полный бред, но...

я не добивался полной шаблонизации как в Smarty, а лишь отделения верстки от кода программы, тоесть:

  • в файле template.xml общяя структура страницы
  • в файле meta.xml набор оснавных мета тегов
  • в файле style.css набор всех стилей
  • в файлах style_ie.css, style_ff.css, style_saf.css, style_nn.css набор стилей для оптимезации под браузеры
  • в файле _constant.php набор констант большая часть которых отвечает за дизайн(эти данные позднее будут перенесены в БД)
расчет идет на то что все будет управлятся через админку
а систематизировать управление данными при такой структурой проще некуда
если правельно систематизировать, то даже тупой юзвер справится
PS по такой же системе структурированны форумы
PSS не воспринимайте мои слова в штыки, я лишь говорю о том что такой вариант решения задачи тоже имеет право на существования и более того им пользуются
15
26 сентября 2007 года
shaelf
2.7K / / 04.05.2005
>>в файле _constant.php набор констант большая часть которых отвечает за дизайн(эти данные позднее будут перенесены в БД)
А вот это вообще ужасно. Сядь и подумай на эту тему. Если покажется, что ты прав, то думай до тех пор, пока не поймёшь обратное. PHP вообще ничего не должен знать об дизайне!!!! Шаблонизаторы сделали люди, отделить логику от представления (мой идеал это MVC :)). Для дизайна существует CSS и не пытайся перевернуть это представление (уже пытались и не раз).
312
26 сентября 2007 года
dead_star
392 / / 26.11.2006
Цитата: shaelf
>>в файле _constant.php набор констант большая часть которых отвечает за дизайн(эти данные позднее будут перенесены в БД)
А вот это вообще ужасно. Сядь и подумай на эту тему. Если покажется, что ты прав, то думай до тех пор, пока не поймёшь обратное. PHP вообще ничего не должен знать об дизайне!!!! Шаблонизаторы сделали люди, отделить логику от представления (мой идеал это MVC :)). Для дизайна существует CSS и не пытайся перевернуть это представление (уже пытались и не раз).



сейчас начнем долго и утомительно спорить:( зачем это?
в моем случае PHP ничего небудет знать о дизайне
пример переменной из _constant.php

Код:
var $xml = array(
"%P_GREEN%",
"%HR%",
...
);
var $html = array(
"<img src=\"design/images/pointer_green.png\" alt=\"\" />",
"<div class=\"hr_line\"></div>",
...
);
for ($i=0;$i<count($xml); $i++){
 $text = str_raplase($xml, $html, $text);
}

как ты думаешь это будет плохо выглядить в бд, табличка из трех столбцов(id - xml - html)?
php нужно знсть только название таблицы

например в админке форума IPB есть табличка(есть ли такое в vBulletin непомню)
xml код1 - картинка1
xml код2 - картинка2
xml код3 - картинка3
и можно изменить картинку для указанного xml кода

так же можно написать код который будет позволять изменять исходный xml код и добовлять новые кодовые обозначения
чем плох такой вариант непонимаю?
хотя верю что есть вариант лучше
15
26 сентября 2007 года
shaelf
2.7K / / 04.05.2005
Ладно, отстал. Может кто ещё чего скажет. Только если никто отвечать не будет тему не поднимай, хорошо? Просто прежде чем писать шаблонизатор, нужно понять, что это такое и для чего он нужен. Успехов.
337
26 сентября 2007 года
shine
719 / / 09.06.2006
Долго и утомительно спорить не буду. Всего одно замечание по поводу хранения HTML в БД: HTML в php это плохо, но HTML и XML в БД это на порядок хуже.
353
27 сентября 2007 года
Nixus
840 / / 04.01.2007
Цитата: shaelf
2Nixus
Мне кажется проще делать по принципу смарти
 
Код:
$view->assign('name', $value);
$view->display('template.tpl');


Можно, конечно и так. То был лишь один из вариантов.

Цитата: Тень Пса
а зачем писать своё? (просто интересно, я по крайней мере не столкнулся еще с такой потребностью)... :)


Как говорится, изобретение своего велосипеда повышает квалификацию программиста. :D
Сейчас использую самописную систему шаблонизации, т.к. она наиболее оптимальная для моего движка, очень гибкая и быстрая. Аналогов не знаю, потому и писал. Правда рождалась она в муках. :D

92
27 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
2 Nixus:
если только для опыта... и в свободное время ;)

2 dead_star:

чёт я это, подумал (что уже доказывает следующее :D), и решил ))) что я нихрена не блондинка ))) хоть и юзал смарти в одном из движков.

написать своё - потратить время, в моём случае точно ) потому что времени нет, а работу делать надо, по сему отвлекаться на написание шаблонизатора.... кхкх, в общем, я лично не стану ) если не прибьёт )

а вы, сударь, судите слишком категорично -)))

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

в общем - Желаю УДАЧИ и терпения! =) мож чего-нить и выйдет ;)

PS: благо мне на PHP мало приходится писать... и редко :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог