1. PHP / Говнокод #5658

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    function tpl_include($filepath) {
    
        global $lang;
        global $lang_array;
        $tpl_body = file_get_contents($filepath);
        $tpl_body = preg_replace('/\{loop \$(.*?)\}\n(.*?)\n\{\/loop\}/i', "\nEOL;\nforeach ($\\1 as \$var=>\$val) echo <<<EOL\n\\2\nEOL;\necho <<<EOL\n", $tpl_body);
        $to_eval = "echo <<<EOL\n".$tpl_body."\nEOL;\n";
        eval($to_eval);
    
    }

    Вчера срочно и быстро понадобился шаблонизатор в один проект.
    Синтаксис: {$variable} и
    {loop $some_array}
    $var хранит $val
    {/loop}

    Запостил: 7ion, 13 Февраля 2011

    Комментарии (29) RSS

    • как часто решения на скорую руку остаются в проектах какашкой мамонта....
      Ответить
      • О которые будущим мейнтейнерам ломать ноги.
        Ответить
      • Ну на самом деле, если бы было чуть больше времени, я бы сделал шаблонизатор именно такого типа - строки через heredoc, остальное заменой и все это дело eval, но, разумеется, парсер был бы написан с помощью строковых функций, а не регулярок.
        Ответить
        • а зачем делать свой? пхп шаблонизаторов в инете что столбов на дороге
          Ответить
          • Своё есть своё, всяко своя рубашка ближе, плюс, многие когда начинали с такого казалось бы безполезного занятия, а потом пишут хорошу систему, и ставят свои проекты на неё.
            Так что автор молодец, лучше делай сам, чем искать чтото готовое, плюс, плюс себя нужно развивать, а не учится на других моросявый говнокодах
            Ответить
            • пхп по сути и есть шаблонизатор. надо обязательно делать шаблонизатор на шаблонизатре?
              Ответить
              • Да, надо. Если хочешь отделить данные от их представления.
                Ответить
                • не могу с этим согласиться. разделить все можно.
                  Ответить
                  • Вам нужно вывести массив, где var - параметр href, а val - название ссылки. Как вы это сделаете?
                    Ответить
                    • отвечаю на вопрос "Как вы это сделаете?" -
                      так, как будет лучше в конкретном случае!
                      вообще я не поклонник парадигмы MVC в веб-разработке.

                      в целом - можно создать класс, отвечающий за отображение ссылки и передавать ему необходимые параметры, сам шаблон будет хтмл со вставками пхп-тегов, дальше лень писать... если Вы посчитаете, что такой класс не является компонентом "представления" - что ж, это Ваше право, если наличие пхп-тегов в шаблоне вызовет какие-то негативные реакции, то докажите мне, что смарти-теги (и прочих шаблонизаторов) в шаблонах чем-то лучше.
                      Меня сильно удивляет, когда люди считают, что используя шаблонизаторы типа смарти, они становятся тру-MVC-девелоперами...
                      Ответить
                      • Вы говорите так, как будто бы я что-то считаю.
                        А я вот не поклонник использования ООП в веб-разработке, - это не для этого создавалось, черт его дери.

                        >создать класс, отвечающий за отображение ссылки
                        >сам шаблон будет хтмл со вставками пхп-тегов
                        Вы знатный говнокодер. Одна-едиственная задача, которую нужно решить - обойтись без php-вставок.
                        Вы думаете, что если я засуну foreach в шаблон - верстальщик не поймет, где там html править? Поймет, но для дизайнера-верстальщика это создает только лишний информационный мусор.
                        Короткие теги скоро запретят, а с длинными даже вывод переменной выглядит уродско.
                        Здесь либо все, либо ничего. Усредненные извращения не имеют смысла.

                        >докажите мне, что смарти-теги (и прочих шаблонизаторов) в шаблонах чем-то лучше
                        <if $var=$val>blah blah $val</if>
                        <?php if ($var == $val) echo "blah blah $val" ?>
                        Ответить
                        • > Поймет, но для дизайнера-верстальщика это создает только лишний информационный мусор.

                          если дизайнер может написать это
                          <if $var=$val>blah blah $val</if>
                          то сможет и это
                          <?php if ($var == $val) echo "blah blah $val" ?>
                          разница здесь только в том, что второй вариант длиннее (кстати, не обязательно же эхом шарашить, есть же Alternative syntax for control structures)
                          а по сути разницы никакой!

                          а если мы возьмем "чистого" дизайнера, полностью абстрагированного от логики приложения и только "рисующего" шаблон страницы, то все равно кому-то придется вносить в разметку какие-либо теги (пхп или шаблонизатора), и какая тогда разница, будет ли такой человек оперировать одним или другим синтаксисом?

                          я это к тому, что "обойтись без php-вставок" - не должно быть самоцелью. применяя шаблонизатор, мы просто меняем шило на мыло.
                          Ответить
                          • По вашей логике, я думаю, можно просто вернуться в истокам и делать мешанину из php и html.
                            Ответить
                        • >>>А я вот не поклонник использования ООП в веб-разработке
                          в веб-разработке ООП действительно не нужно
                          оно вообще-то для программирования делалось.

                          А так как программисты веб-разработкой не занимаются, то и ООП там не нужно
                          Ответить
              • Шаблонизатор на шаблонизаторе - это сродни спековскому:
                "Каждый уважающий себя спектрумист обязан написать свою бегущую строку, плазму и труколор".
                Ответить
                • бегущую строку, скроллинг попиксельно, обработчик системных ошибок и нестандартный загрузчик
                  Ответить
                  • ...собрать транслятор видеоизображения в ASCII-арт, транслятор аудио через встроеный бипер, и в конце концов, чёрт возьми, написать игру
                    Ответить
          • Но у меня-то считай шаблонизатор сам PHP.
            Ответить

    Добавить комментарий