Какие преимущества дает Smarty при использовании с PHP или лучше использовать чистый PHP? - PullRequest
3 голосов
/ 22 января 2011

Я решаю, использовать ли какой-либо шаблонизатор в коде php или нет.Теперь я внимательно смотрю на Smarty.

Если честно, мне не ясно его преимущества.

Мои впечатления не очень хорошие с самого начала.Я попытался пройти через демонстрационное приложение: http://www.smarty.net/sampleapp1. И с самого начала я получил уведомления.Я исправил это, передав значения в формы.Я изменяю код с

// adding a guestbook entry
$guestbook->displayForm();

на

// adding a guestbook entry
$guestbook->displayForm(array('Name' => '', 'Comment' => ''));

Догадываясь об этом, я понимаю, что это усложняет отладку кода.И это также заставляет меня учить еще один язык - это легко, но самое простое - совсем не учить что-то новое, если в этом нет необходимости.Альтернативой является использование самого PHP.

Сравнение синтаксиса http://www.smarty.net/syntax_comparison для меня самое забавное: подсчитать количество символов .... Но я знаком с PHP и мне легко писать наэто, и Smarty является новым для меня.И я не думаю, что для веб-дизайнеров так сложно выучить несколько простых конструкций php, а Smarty в этом отношении проще.Если я ошибаюсь, было бы хорошо услышать здесь веб-дизайнера.

Smarty анализирует код, и это на самом деле накладные расходы.

Но в то же время многие люди используют его.И именно поэтому я хотел бы понять причины этого?Где преимущества?Я что-то упустил?

Если вы знаете хорошую альтернативу Smarty, о ней было бы полезно узнать.Спасибо!

ОБНОВЛЕНИЕ:

Я также нашел вопрос по теме: Как лучше использовать Smarty с PHP? .В общем, это также о том, чтобы не использовать Smarty.Но это 1,5 года.Возможно, что-то изменилось?

Ответы [ 4 ]

4 голосов
/ 22 января 2011

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

1: дизайнеры, не знакомые с PHP, могут работать с вашим HTML без навыков программирования.Но разве это не значит, что им в конечном итоге нужно сначала изучить Smarty?Я действительно не вижу никакого смысла.

2: Для разделения шаблонов: вы можете использовать альтернативный синтаксис PHP так же, как вы использовали бы Smarty, не теряя мощь этого гигантского языка программирования.Пример альтернативного синтаксиса:

<div>Product list</div>
<?php foreach($products as $product): ?>

<div>Product: <?php echo $product->name; ?> </div>
<div>Price: <?php echo $product->price; ?> </div>
<?php if($product->discountPercentage): ?>
<div>
Discount: <?php echo $product->price * $product->discountPercentage / 100; ?> off! </div>
<?php endif; ?>

<?php endforeach; ?>
2 голосов
/ 22 января 2011

Я использую его в производственной среде, и я бы сказал: не очень много.

Если вы заботитесь о внешнем виде вашего кода (а не о незначительной проблеме), smarty может заставить вещи выглядетьнемного чище:

<?php echo $some_var; ?>

против:

{$some_var}

это может сделать ваши файлы шаблонов гораздо более читабельными.

Он также обеспечивает более строгое разделение между вашим контроллером и логикой представления.(поскольку вы должны обязательно передать все соответствующие переменные в объект smarty)

Синтаксис достаточно прост (особенно для более поздних версий), так что это не составляет большой проблемы.

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

Недостатки?Я думаю, что есть пара:

- Очевидно, у вас теперь есть целая другая библиотека для работы, включения и т. Д.

- Некоторые предыдущие версии Smarty имели какой-то нелепый синтаксис для циклов и других вещей, которыедолжно было быть просто.

-Если вам нужно поместить где-нибудь в шаблоне простой оператор javascript, например:

<script type='text/javascript'>
    $(document).ready(function(){
        //foo
    });
</script>

хорошо, вы можете включить его в файл js вместо встроенного, но естьМного случаев, когда вам просто нужны эти пару строк JS.Smarty не нравятся фигурные скобки, и вы должны обернуть их в уродливый тег, который выглядит следующим образом:

{literal}{\literal}

в этом случае так сильно, что ваш код станет чище ....

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

0 голосов
/ 07 февраля 2011

Я подумал, что смогу попробовать Smarty для моего последнего проекта, просто потому, что в некоторых объявлениях о работе, с которыми я сталкивался, упоминалось, что им не хватает опыта в его использовании.Я не слишком углубился в документацию, просто приобрел практические знания для использования на довольно простом сайте.Вот мои впечатления на данный момент -

Хорошо

Большинство сайтов, над которыми я работал, включая настоящий проект, следуют довольно схожей структуре (шаблону) от страницы к странице,В прошлом я просто держал обновленный пустой шаблон где-то в структуре файла и заполнял его дополнительным HTML или PHP для каждого конкретного случая.Приятной особенностью Smarty является то, что вы можете сохранить этот общий шаблон в каталоге шаблонов Smarty и заполнить его с помощью функции {extends} в шаблоне страницы презентации.Например, это будет сохраненный шаблон (отсутствующий тип документа, ТАК у меня болит голова) -

`

<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Description" content="{block name=meta_description}{/block}" />
    <title>My Smarty Site - {block name=pageTitle}{/block}</title>
    {block name=additionalHeaders}{/block}
 </head>
    <body>
        <div id="headerDIV">
            <div id="nav-box">
                <!-- Nav would go here -->
            </div>
        </div><!-- end #headerDIV -->
        <div id="mainContainer">
            <div id="generalContent">
                    <div id="pageTitle">
                        {block name=pageTitle}{/block}
                    </div>
                 {block name=pageText1}{/block}
                <div id="page-bottom">
                    {block name=pageText2}{/block}
                </div>
            </div> <!-- end #generalContent -->
        </div> <!-- end #mainContainer -->
    </body>

`, а затем заполняется следующим образом:

{extends file="myTemplate.tpl"}
{block name=packageTitle}Simple Template{/block}
{block name=meta_description}This is a simple Smarty Template test{/block}
{block name=additionalHeaders}
    <link rel="stylesheet" type="text/css" href="/css/smarty_test.css"/>
{/block}

{block name=pageText1}
    <p>Hello, {$name}! This is a Smarty Test.</p>
{/block}
{block name=pageText2}
<p>This is some more text....</p>
{/block}

Таким образом, вместо того, чтобы копировать мой шаблон снова и снова для каждой похожей страницы, я просто расширяю его, используя Smarty, для содержимого этой конкретной страницы.Еще одним преимуществом является то, когда мне нужно изменить некоторые аспекты этого шаблона;вместо того, чтобы менять несколько страниц, я изменяю только одну (да, похоже на использование большого количества PHP-включений).

Плохое

Хотя я знаю, что у Smarty естьмного встроенных функций и может делать некоторые интересные вещи, чтобы действительно извлечь из этого максимум, вы должны изучить его синтаксис.И, если вы уже знаете PHP, вы изучаете что-то совершенно новое для достижения того же конечного результата.Разделение логики и дизайна велико до тех пор, пока вам не понадобится создать очень динамичную страницу с большим количеством продолжений - тогда вы обнаружите, что добавляете в шаблон множество условных операторов, циклов и т. Д., Используя синтаксис Smarty, и понимаете, что вы можете простоиспользуйте PHP.

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

0 голосов
/ 22 января 2011

Мы широко используем Smarty.

Я бы сказал, что это не выгодно в терминах:

1. Parsing of smarty templates to PHP which make things slow
2. Your learning ablity to cope-up with smarty syntax.

Это выгодно в смысле:

  1. Отделение бизнес-логики от логики представления.
  2. Если вам нужны помощники для отображения, это будет полезно для принципа СУХОЙ. (Как помощники в erb - ROR)

Если ваш продукт не будет большим и постоянным продуктом и если с PHP все возможно, избегайте использования Smarty.

...