Метка: PHP

Шаблоны и View

Я предлогая разделить эти две обсолютно разные вещи. Попытаюсь объяснить как я понимаю эти понятия.

Читать далее »

Flash сообщения 2

Как и обещал, вернулся к flash сообщениям. Переделаем его на статические методы. Итак, немножко теории. Статические методы могут вызываться без создания экземпляра класса (объекта), при объявлении метода указывается ключевое слово static. Точно так же объявляется и статический атрибут класса.

Читать далее »

Новая версия Zend Framework — 1.7

Официальный список обновлений: Zend_Amf with support for AMF0 and AMF3 protocols Dojo Toolkit 1.2.1 Support for dijit editor available in the Dojo Toolkit Zend_Service_Twitter ZendX_JQuery in extras library Metadata API in Zend_Cache Google book search API in Zend_Gdata Preliminary support for GData Protocol v2 in Zend_Gdata Support for skip data processing in Zend_Search_Lucene Support for Open Office XML documents in Zend_Search_Lucene indexer Performance enhancements in Zend_Loader, Zend_Controller, and server components Zend_Mail_Storage_Writable_Maildir enhancements for mail delivery Zend_Tool in incubator Zend_Text_Table for formatting table using characters Zend_ProgressBar Zend_Config_Writer ZendX_Console_Unix_Process in the extras library Zend_Db_Table_Select support for Zend_Paginator Global parameters for routes Using Chain-Routes for Hostname-Routes via Zend_Config I18N improvements Application wide locale for all classes Data retrieving methods are now static Additional cache handling methods in all I18N classes Zend_Translate API simplified File transfer enhancements Support for file elements in subforms Support for multifile elements Support for MAX_FILES_SIZE in form Support for breaking validation chain Support for translation of failure ,messages New IsCompressed, IsImage, ExcludeMimeType, ExcludeExtension validators Support for FileInfo extension in MimeType validator Zend_Db_Table_Select adapater for Zend_Paginator Support for custom adapters in Zend_Paginator More flexible handling of complex types in Zend_Soap Радует появление ZendX_JQuery, неужели будет поддержка jQuery. Ну и обязательно попробую Zend_ProgressBar — прогрес бар для загрузки файлов, наверняка реализовано через apc, посмотрим что разработчикам насоветовали сами создатели php. Добавили поддержку пэйджинга в Zend_Table, ура товарищи, жаль что до этого так долго доходили. Фреймворк двигается, только неизвестно куда. Даже на сайте в шапке до сих пор висит 1.6, как всегда, на детали плевать 🙁

Читать далее »

Свой шаблонизатор 2

В первой части мы по всем правилам ООП создали шаблонизатор, теперь наростим его мощь, будем делать это двумя способами: Расширая класс Amdy_Templater С помощью классов-помощников.

Читать далее »

Свой шаблонизатор

Вы хотите отделить логику представления от остальных слоёв приложения? Вам нужен шаблонизатор, желательно простенкий. Ну чтоже, напишем свой. Обределимся с минимумом: Передать переменную в шаблонизатор Взять переменную из шаблонизатора Отобразить шаблон

Читать далее »

Flash сообщения

Часто бродя по сайтам и заполняя формы встречаю некоторые типичные недоработки при обработке форм. Например, после обработки забывают сделать редирект, в итоге при нажатии «Обновить», данные посылаются повторно, что очень неприятно. Поэтому, не забываем header(‘Location: ‘ . $url);

Читать далее »

О плохих шаблонизаторах

Для меня стало неприятным открытием что многие до сих пор используют для шаблонизации таких уродцев как XTemplate, либо пишут свой такой же велосипед с квадратными колёсами. И так, давайте рассмотрим принципы их работы. Первоочередной задачей шаблонизации является разделение бизнес логики и логики представления. Говоря человеческим языком, для того чтобы изменить отображение страницы нужно изменить лишь часть, отвечающую за отображение, так называемый шаблон. Что такое шаблон. Обычно это html код со вставкой специальных элементов разметки, которые позволяют добавлять динамические данные. На первом этапе создаётся массив данных, которые нужно передать в шаблон, а затем выводится сам шаблон и делаются замены спец вставок, на данные полученные в первом этапе. Для обнаружения и подмены вставок, обычно используются два способа — функция str_replace и регулярные выражения. Первый вариант довольно шустрый, но имеет рад ограничений, второй из-за использования регулярок довольно ресурсоёмок. И так, что происходит внутри. Берётся файл с шаблоном, загружается в память, затем обрабатывается с помощью строковых функций и делаются замены. Парсинг целого шаблона штука довольно трудоёмкая, а главное бесполезная. У нас для шаблонов уже есть РНР, который позволяет писать этакий код: <h1><?=$title?></h1> <ul> <? foreach $items AS $item { ?> <li><?=$item?></li> <? } ?> </ul> А теперь представьте шаблон пару сотен кода, в котором должны делаться замены, которых можно было легко избежать, подумайте, насколько упадёт производительно? Для чего же тогда написана такая громадная библиотека как smarty и его аналоги, если уже есть готовые средства. И так, рассмотрим второй подвид шаблонизаторов. Смартиподобные шаблонизаторы имеет ещё одну прослойку — компиляция. То есть, как и у первых, берётся шаблон, но не делается замена вставка — значение переменной, а вставка — переменная, после это всё записывается в файловую систему, чтобы при повторном обращении не делать лишних преобразований. В итоге, мы получает php шаблон. Но скорость даже подобных шаблонизаторов хуже чем, ежели бы обошлись без них. И на кой нам это? Первое преимущество — безопасность. Убрав из шаблонов РНР мы делаем шаблоны безвредными. Второе тесно связано с первым. Теперь изменением дизайна могут заниматься не программисты, нужно лишь не нарушать разметку. Третье — автоматизация. Люди ленивы, а жизнь коротка. поятому нужно стараться не делать дважды отдно и тоже. Допустим в смарти есть элемент html_options, который позволяет создать список единого выбора, есть escape, который поваляет обезопасить вывод, избавившись от потенциально опасных тегов. Четвёртое….. А ну его, додумайте сами. Результаты. Шаблонизания на основе компилируемых шаблонов, помогает сэкономить кучу системных ресурсов, по сравнению с дермошаблонизаторами, при этом расширяемость позволяет выходить за рамки логики отображения, но хорошо это или плохо, решать каждому для себя. Пользуйтесь качественным кодом. P.S. Некоторые умеют летать, а другие сё ещё «залетают».© Кто-то умный.

Читать далее »

Шаблонизация: Что, где, как

Вопрос о шаблонах подобен священной войне за веру, он вызывает потоки флейма на форумах, блогах, конфернциях… Что такое шаблон? Это заготока для отображения входных данных. Его основная задача определить где, что и как будет находиться.Вроде всё просто  и понятно, но когда мы начинает отделять логику от представления возникает много вопросов о разделении полномочий. И так человек приходит, либо не приходит к понятию логика предсталения. После этого становится мало и человек начинает использоать актиные шаблоны и постепенно приходит к понятию view. Попытаюсь рассмотреть типичные задачи возлагаемые на шаблоны. Где. С помощью специальных знаков мы указываем где должна происходить встака. Т.к. php изначально был навёрнытым щаблонизатором, то примеры будут на нём, а не специализированых шаблонизаторах. вставить после данного текста <?=$var?>, а не после этого. Что. Вот и первый краеугольный камень. Если вставлять простые переменные, то подходит чисто пример выше. Но в реальных задачах приходится выводить массивы, данные из объектов. Некоторые предпочитают для массивов гонять цикл непосредственно в php, чтобы не использоать for или foreach в шаблонах. Выглядит примерно так. $blockVar = »; foreach($data AS $v) { $blockVar .= temlateFetch(‘list.tpl’, array(‘var’ => $v)); } templateAssign(‘var’, $blockVar); Мало того что это неудобно, так ещё и нарушает концепцию разделения логики. Куда проще делать это в шаблоне, тем более при вёрстке придётся менять только шаблон и не нужно лезть в код, чтобы узнать какой шаблон использоался для блочной переменной <?php foreach($data AS $v) { ?> <div><?=$v?></div> <?php } ?> Как. Считаю глупым чтобы программист указывал верстальщику как нужно обработать переменную чтобы её ставить. Очень часто имеено при вёрстке видно нужно ли обрабатыать html теги, какой должен быть перевод строки, на сколько обрезать длинную строку. Допустим, администратор в textarea ввёл текст, который сохранился в базу данных, затем при выводе, если мы всталяем её в textarea, то делаем <textarea><?=$var?></textarea> , а если в p <p><?=nl2br($var)?></p> %RELATEDPOSTS%

Читать далее »