Комментарии 27
Мб использовать Smarty?
-3
У «native PHP» есть спец-синтаксис, сохраненній еще со второй версии, когда ПХП был преимущественно шаблонизатором.
мы, после долгих изысканий, проб и ошибок остановились именно на нем.
мы, после долгих изысканий, проб и ошибок остановились именно на нем.
+3
По варианту 3
Если хочется что-то читабельное и тэговидное, может быть стоит попробовать XSLT?
Недостатки: нечитабельный в паре с html
Если хочется что-то читабельное и тэговидное, может быть стоит попробовать XSLT?
<xsl:template match="news"> <xsl:for-each select="item"> <div> <div class="date"><xsl:value-of select="@date"/></div> <a href="{@link}"><xsl:value-of select="title"/></a> <span><xsl:value-of select="shortText"/></span> </div> </xsl:for-each> </xsl:template>
+3
использовали 4 года.
есть свои минусы
1 — скорость. и не надо говорить, что это было давно :) Даже забыв про саблотрон как страшный сон — производительность не фонтан.
2 — все данные надо отображать в одно дерево XML. Если рендерить по кусочкам — придется использовать еще один шаблонизатор, который соберет эти кусочки в кучу. Или создавать ни разу не гибкую многоуровневую шаблонизацию на XSL.
есть свои минусы
1 — скорость. и не надо говорить, что это было давно :) Даже забыв про саблотрон как страшный сон — производительность не фонтан.
2 — все данные надо отображать в одно дерево XML. Если рендерить по кусочкам — придется использовать еще один шаблонизатор, который соберет эти кусочки в кучу. Или создавать ни разу не гибкую многоуровневую шаблонизацию на XSL.
0
Боян? :)
-2
{NEWS_SUBMITNEWPOST}
{PAGE_ROW_CATPATH_IDX} → {PAGE_ROW_SHORTTITLE}
{PAGE_ROW_TEXT}
{PAGE_ROW_RATINGS} PAGE_ROW_DATE} {PHP.skinlang.news.by} {PAGE_ROW_AUTHOR} {PAGE_ROW_COMMENTS}
{PAGE_ROW_ADMIN}
{NEWS_INDEX_PAGENAV}
Лучше пока не нашел.
{PAGE_ROW_CATPATH_IDX} → {PAGE_ROW_SHORTTITLE}
{PAGE_ROW_TEXT}
{PAGE_ROW_RATINGS} PAGE_ROW_DATE} {PHP.skinlang.news.by} {PAGE_ROW_AUTHOR} {PAGE_ROW_COMMENTS}
{PAGE_ROW_ADMIN}
{NEWS_INDEX_PAGENAV}
Лучше пока не нашел.
-1
А где же XSLT? Этот вариант тоже надо обязательно рассмотреть.
0
Native PHP нормально, просто имейте привычку форматировать код и табулировать его. И не пихайте if() и прочие конструкции в одну строку, станет понятнее. А пример сильно упращённый, на таком примере любой подход будет выглядеть плохо.
По поводу XSLT: вот я никогда с ним не работал, сижу и не въезжаю в то, что написано. Пока не изучишь, не поймёшь. Особенно верстальщикам актуально, особенно если это дизайнер-верстальщик — такому с PHP проще, всёго-то пара конструкций — цикл, условие, вывод на экран (всё остальное должно быть в логике приложения!) :)
По поводу XSLT: вот я никогда с ним не работал, сижу и не въезжаю в то, что написано. Пока не изучишь, не поймёшь. Особенно верстальщикам актуально, особенно если это дизайнер-верстальщик — такому с PHP проще, всёго-то пара конструкций — цикл, условие, вывод на экран (всё остальное должно быть в логике приложения!) :)
+2
Может быть как-нибудь так?
$skin='~~date <a href=~~link>~title</a>';
$delimiter='<br />'
$object=new News();
$news->show($skin,$news,$delimiter);/*$news — массив объектов, которые надо вывести — в данном случае — новости, в абстрактном случае — все, что угодно */
И вроде бы никаких велоcипедов, не изобретаем, и надстройку над PHP, которая будет делать то же, что делаем PHP, только хуже и медленнее (в смысле шаблонизатор, да простят меня их любители ) творить не пытаемся… И верстальщику все более менее понятно. И скорость более чем достойная (хотя это уже, конечно, от реализации зависит, но в данном случае напортачить весьма и весьма сложно).
А в скин пихаем все, что угодно — хоть хтмл, хоть иксмл, хоть плэйн. Внутри метода show подставляем значения из коллекта. Можно там же внутри и вывод делать (имено так написано в приведенном примере), однако, IMHO, правильнее будет возвратить строку, или массив, например, с задействованными в выводе айдишниками объектов — оченно полезно, например, когда на сайте несколько лент новостей, и одна и та же новость может быть в разных лентах новостей.
$skin='~~date <a href=~~link>~title</a>';
$delimiter='<br />'
$object=new News();
$news->show($skin,$news,$delimiter);/*$news — массив объектов, которые надо вывести — в данном случае — новости, в абстрактном случае — все, что угодно */
И вроде бы никаких велоcипедов, не изобретаем, и надстройку над PHP, которая будет делать то же, что делаем PHP, только хуже и медленнее (в смысле шаблонизатор, да простят меня их любители ) творить не пытаемся… И верстальщику все более менее понятно. И скорость более чем достойная (хотя это уже, конечно, от реализации зависит, но в данном случае напортачить весьма и весьма сложно).
А в скин пихаем все, что угодно — хоть хтмл, хоть иксмл, хоть плэйн. Внутри метода show подставляем значения из коллекта. Можно там же внутри и вывод делать (имено так написано в приведенном примере), однако, IMHO, правильнее будет возвратить строку, или массив, например, с задействованными в выводе айдишниками объектов — оченно полезно, например, когда на сайте несколько лент новостей, и одна и та же новость может быть в разных лентах новостей.
-2
Внутри метода show подставляем значения
Как, простите, подставляем? replace'ом?: D
+1
скорее всего, зависит от модели, используемой в системе.
В нашем случае используется именно str_replace (полагаю, вы его имели в виду?). Работает быстро (собственно, если я правильно помню мануал, str_replace считается самой быстрой из функций подстановки). В общем случае не зависит от класса. Если есть у класса свойство — выведется, нету — выведется пустота. на выходе дает вполне валидный код (если, конечно, на входе во скином не намудрили — в данном случае, кстати — как раз-таки намудрили чутка — но я брал код из примера в топике).
В нашем случае используется именно str_replace (полагаю, вы его имели в виду?). Работает быстро (собственно, если я правильно помню мануал, str_replace считается самой быстрой из функций подстановки). В общем случае не зависит от класса. Если есть у класса свойство — выведется, нету — выведется пустота. на выходе дает вполне валидный код (если, конечно, на входе во скином не намудрили — в данном случае, кстати — как раз-таки намудрили чутка — но я брал код из примера в топике).
0
Лучше из представленных — третий, но его можно улучшить, к примеру так:
А ускорить быстродействие можно компиляцией шаблона в php перед выходом в public
А ускорить быстродействие можно компиляцией шаблона в php перед выходом в public
+1
Вот тоже неплохие шаблоны:
Но представленный ниже шаблон, на мой взгляд, как бы, выигрывает:
Но представленный ниже шаблон, на мой взгляд, как бы, выигрывает:
+5
НЛО прилетело и опубликовало эту надпись здесь
нету идеального шаблона, если бы он был его бы давно изобрели и сейчас не было бы священных войн. То есть я хочу сказать, что для каждого отдельного случая есть свой идеальный шаблон, а в целом его нет!
0
+1 за XSLT
0
нету среди представленных в топике и близкого к идеальному)
первый совсем страхолюдный, юрского периода, 2 и 3 === smarty-like
первый совсем страхолюдный, юрского периода, 2 и 3 === smarty-like
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Идеальный шаблон, какой он?