Как стать автором
Обновить

Комментарии 27

Мб использовать Smarty?
смарти свое отжил.
программы пишут программы.
плюс, с некоторыми архитектурами проектов просто неприменим.

о, набежали тролли, и давай минусить не понимая о чем камент.
У «native PHP» есть спец-синтаксис, сохраненній еще со второй версии, когда ПХП был преимущественно шаблонизатором.

мы, после долгих изысканий, проб и ошибок остановились именно на нем.
Сам когда-то давно так делал(когда начинал), потом использовал в битриксе. Не удобно это ИМХО.
сейчас использую XSLT очень доволен.
У меня ситуация прямо противоположная )))
XSLT удобен, но не считаете ли Вы что он придает дополнительную нагрузку на сервер?
По варианту 3
Недостатки: нечитабельный в паре с 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>
использовали 4 года.
есть свои минусы
1 — скорость. и не надо говорить, что это было давно :) Даже забыв про саблотрон как страшный сон — производительность не фонтан.

2 — все данные надо отображать в одно дерево XML. Если рендерить по кусочкам — придется использовать еще один шаблонизатор, который соберет эти кусочки в кучу. Или создавать ни разу не гибкую многоуровневую шаблонизацию на XSL.
{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_DATE} — потерялась фигурная скобка.
А где же XSLT? Этот вариант тоже надо обязательно рассмотреть.
Native PHP нормально, просто имейте привычку форматировать код и табулировать его. И не пихайте if() и прочие конструкции в одну строку, станет понятнее. А пример сильно упращённый, на таком примере любой подход будет выглядеть плохо.

По поводу XSLT: вот я никогда с ним не работал, сижу и не въезжаю в то, что написано. Пока не изучишь, не поймёшь. Особенно верстальщикам актуально, особенно если это дизайнер-верстальщик — такому с PHP проще, всёго-то пара конструкций — цикл, условие, вывод на экран (всё остальное должно быть в логике приложения!) :)
XSLT на достаточном уровне изучается за 2 дня. Проверено неоднократно на множестве HTML-кодеров.
И потом — технические шаблоны всеравно готовят разработчики.
Так что аргумент — «не знает технологию» — не аргумент против технологии.
Ясно.

Я в любом случае остаюсь при мнении, что Native PHP самое оно для меня, поскольку работаю с большими проектами как правило и там разница в скорости 10%-15% критична на уровне +- стойка серверов.
Ну, я тоже так считаю )
Может быть как-нибудь так?
$skin='~~date <a href=~~link>~title</a>';
$delimiter='<br />'
$object=new News();
$news->show($skin,$news,$delimiter);/*$news — массив объектов, которые надо вывести — в данном случае — новости, в абстрактном случае — все, что угодно */
И вроде бы никаких велоcипедов, не изобретаем, и надстройку над PHP, которая будет делать то же, что делаем PHP, только хуже и медленнее (в смысле шаблонизатор, да простят меня их любители ) творить не пытаемся… И верстальщику все более менее понятно. И скорость более чем достойная (хотя это уже, конечно, от реализации зависит, но в данном случае напортачить весьма и весьма сложно).
А в скин пихаем все, что угодно — хоть хтмл, хоть иксмл, хоть плэйн. Внутри метода show подставляем значения из коллекта. Можно там же внутри и вывод делать (имено так написано в приведенном примере), однако, IMHO, правильнее будет возвратить строку, или массив, например, с задействованными в выводе айдишниками объектов — оченно полезно, например, когда на сайте несколько лент новостей, и одна и та же новость может быть в разных лентах новостей.
Внутри метода show подставляем значения

Как, простите, подставляем? replace'ом?: D
скорее всего, зависит от модели, используемой в системе.
В нашем случае используется именно str_replace (полагаю, вы его имели в виду?). Работает быстро (собственно, если я правильно помню мануал, str_replace считается самой быстрой из функций подстановки). В общем случае не зависит от класса. Если есть у класса свойство — выведется, нету — выведется пустота. на выходе дает вполне валидный код (если, конечно, на входе во скином не намудрили — в данном случае, кстати — как раз-таки намудрили чутка — но я брал код из примера в топике).
Лучше из представленных — третий, но его можно улучшить, к примеру так:



А ускорить быстродействие можно компиляцией шаблона в php перед выходом в public
Результат:

Вот тоже неплохие шаблоны:



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

НЛО прилетело и опубликовало эту надпись здесь
нету идеального шаблона, если бы он был его бы давно изобрели и сейчас не было бы священных войн. То есть я хочу сказать, что для каждого отдельного случая есть свой идеальный шаблон, а в целом его нет!
нету среди представленных в топике и близкого к идеальному)
первый совсем страхолюдный, юрского периода, 2 и 3 === smarty-like
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории