Работа с Шаблонами PHP


Разделение PHP и HTML кода, использование шаблонов

При написании кода на PHP может возникнуть потребность создать в коде элемент на HTML. Начинающие разработчики пишут HTML код прямо в файле с PHP кодом, просто заключая его в кавычки и заменяя в нем переменные данные. Конечно, такой способ прост, позволяет не отвлекаться на дополнительную работу по разделению PHP и HTML. Но это неправильно, необходимо весь HTML код выносить в отдельные файлы – HTML шаблоны.

Почему необходимо отделять HTML от PHP? Причин может быть несколько:

  • смешивание кода HTML и PHP в одном файле выглядит некрасиво;
  • нет подсветки HTML синтаксиса, загромождается код PHP – ведь обычно HTML код занимает довольно много места;
  • невозможно повторное использование HTML кода в других местах веб-приложения;
  • когда будет необходимо вносить изменения в HTML – придется долго искать этот участок кода в файле с PHP кодом.

На сегодняшний день для выполнения такой задачи разработаны различные шаблонизаторы, которые как раз созданы для отделения кода от верстки. Но не всегда есть желание использовать что-то стороннее, да и к тому же средствами PHP можно самому реализовать простую систему шаблонизации. Как это сделать?

Для примера создадим файл с расширением tpl, в котором будет храниться HTML код. Это и будет наш шаблон, расширение файла можно сделать любое, tpl здесь просто для примера. Соответственно в редакторе кода можно задать подсветку синтаксиса HTML для этого расширения (к примеру в Notepad++). В этом файле прописываются нужные переменные, которые необходимо будет заменить на нужные данные. Пример шаблона:

Далее создаем некоторую функцию, например – myfunction, в которой есть данные и путь к шаблону:

Наконец, необходимо создать функцию get_html, которая будет выполнять работу по подключению указанного шаблона и заменять в нем данные. Функция принимает два параметра: путь к шаблону и данные. В цикле происходит проход по всему содержимому массива data и создаются переменные. Затем включается буферизация и подключается шаблон, в котором используются вышесозданные переменные. В завершении прекращаем процесс буферизации и возвращаем готовый HTML код. Примерный код приведен ниже:

Таким образом, отделить HTML от PHP кода без использования сторонних шаблонизаторов не составит труда. Использование шаблонов позволит сделать разработку проекта более удобной и правильной.

PHP: Шаблоны

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

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

Что есть шаблон?

Понятие «шаблон» довольно обширное. Но чаще всего под шаблоном понимается некий документ (обычно в формате HTML), содержащий в себе все оформление ресурса, либо только его части, а также специальные метки, которые в процессе генерации страницы заменяются на информационные данные.

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

Наверное, во всех языках вебпрограммирования есть подобные инструменты для работы с шаблонами: в Perl это FastTemplate (который, кстати, существует и для PHP, но его использование не рекомендуется, так как приемлемые для работы версии относятся еще к третьей версии PHP), в отношении PHP — это крупный и многофункциональный Smarty, а также ряд других более мелких «шаблонизаторов».

Smarty

Smarty — одна из самых крупных разработок подобного рода. Реализован он, как и практически все приложения подобного типа, в виде класса.

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

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

Smarty — это настоящий монстр по работе с шаблонами. Но, как понимаете, за столь широкую функциональность приходится платить ресурсами сервера и временем исполнения скрипта на его основе. В некоторых случаях из-за своей громоздкости Smarty кажется неповоротливым. Поэтому для сравнительно небольших проектов использование Smarty — обычно далеко не лучший выбор. В этом случае следует обратить свой взор на более мелкие и менее функциональные, но тем не менее достойные инструменты.

Другие инструменты для работы с шаблонами

Здесь я хочу обратить ваше внимание на «шаблонизаторы» на основе функции eval(). Эта функция расценивает код, заданный в ее аргументе, как код PHP и, соответственно, исполняет его. Например:

$text = ‘Здравствуйте, $name $fam!’;
$name = «Артем»;
$fam = «Акатов»;
eval(‘echo «‘ . $text . ‘»;’);

Этот примитивный пример работы с мини-шаблоном выведет «Здравствуйте, Артем Акатов!».

Преимущество данного типа инструментов работы с шаблонами связано с тем, что от разработчика заранее не требуется определять текст или другую информацию для меток в шаблоне (в нашем примере таковыми метками служат слова $name и $fam). Также такие «шаблонизаторы» значительно выигрывают по скорости.

Разовьем пример выше и напишем функцию, которая будет извлекать шаблон из файла:

function getTemplate($template, $ext = «htm») <
$templatefolder = «templates»; // папка для хранения шаблонов
return str_replace(«\»»,»\»», implode(«», file($templatefolder.»/».$template.».».$ext)));
>
$name = «Артем»;
$fam = «Акатов»;
eval(‘echo «‘.getTemplate(‘test’).'»;’);

Если в файл test.htm мы поместим текст из переменной $text из примера выше, то результат выполения данного примера будет аналогичен предыдущему.

Для удобства работы с данным типом шаблонов пишутся классы. Одним из самых удачных классов такого рода является класс Евгения Кучерова.

Попробуем с его помощью создать один из вариантов примитивного «движка» для данного раздела «Уроки». При этом будем использовать записи MySQL, которые мы внесли на прошлых уроках.

Прежде всего заготовим шаблон. Для этого откроем окно с HTML-кодом данной страницы и заменим номер урока на переменную $row[id], вместо названия «Шаблоны» вставим $row[title], весь текст от первого слова «Разделение» до последнего «встречи!» заменим на $row[body]. Вместо элементов навигации «Назад, на урок 16» и в месте, где должно было бы располагаться «Дальше, на урок 18», соответственно ставим $prev и $next. Сохраним его как page.tpl. Готовый шаблон можно скачать здесь.

Теперь работаем с PHP

require «class.Template.php»; // относительный путь до класса
$tpl = new Template;
$ ); // извлекаем номер урока из строки запроса

mysql_connect(«host», «artem», «12345»);
mysql_select_db(«myphp»);
$query = «SELECT * FROM lessons WHERE «;
$result = mysql_query($query);
$row = mysql_fetch_array($result);

$query = «SELECT COUNT(*) FROM lessons»;
$result = mysql_query($query);
$max = mysql_result($result, 0);

if ($ ;
eval(‘echo «‘.$tpl->get(«page»).'»;’);


Это простой пример страницы, имеющей несложную структуру. Но даже на таком примере видно, как шаблоны упрощают создание веб-приложений.

В заключение

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

Шаблоны

Введение
Отделение логики получения данных от логики их отображения — очень важная составляющая веб-девелопмента.
Любой программист, который поднялся чуть выше уровня «Hello world», начинает ощущать потребность в таком разделении. Но далеко не все приходят к правильным выводам и решениям.
Поэтому я приведу здесь самые важные правила:
1. Код получения и код отображения данных надо разделять.
2. Любой вывод должен начинаться только после того, как для него готовы все данные.
3. Как следствие, любой скрипт должен заниматься только обработкой данных. После этого он может либо отправить какой-то НТТР заголовок, или вызвать шаблон, передав ему подготовленные данные, или и то и другое вместе.
4. Каким именно шаблонизатором пользоваться — дело десятое. Самый простой и доступный — сам РНР, поэтому примеры будет приводиться на нём.

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

Самое простое и очевидное заблуждение состоит в том, что новички называют шаблоном вынесенный в отдельный файл «дизайн» — общий html для всех страниц сайта. И на этом успокаиваются. Динамическую информацию, ничтоже сумняшеся, выводя старым добрым echo 🙂
На самом же деле, шаблонизатор в основном занимается выводом изменяющегося содержимого страниц сайта. А вывод «дизайна» — задача второстепенная.

Фантазий же главных две:
1. Шаблоны нужны «дизайнеру», чтобы он мог их править, не разбираясь в PHP.
2. Следовательно, шаблоны служат для отделения PHP от HTML.

Давайте попробуем задуматься над первым утверждением. Кто такой дизайнер? Это человек, который работает в фотошопе. HTML он чаще всего не знает вообще. А над шаблоном работает либо специальный верстальщик или — чаще всего. сам программист! Смешно, правда?
Теперь следствие, про отделение PHP от HTML. Отлично. Перед нами стоит святая цель отделить. Поэтому мы придумываем Смарти и пишем:
<$con.name>—

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

Теория
Получается, что наши причины, по которым мы решили пользоваться шаблонами, гроша выеденного не стоят. И что же теперь — не нужны, выходит, шабоны вообще? Нужны. Но сначала надо ответить себе на вопрос — «зачем?» Для чего нужны шаблоны. И проверить ответ практикой. Я много раз задавал людям этот вопрос. Но почти никто не может на него ответить. Зачем ему нужны шаблоны. Получается, люди делают что-то, не зная зачем.
Это — самое смешное.

За время своей деятельности в качестве веб-программиста я сформулировал для себя три причины, по которым нужны шаблоны лично мне. По сути, их две. А сводятся, в конечном счете, к одной:

Один код — несколько представлений.

Часто бывает так, что вместо одной информации надо показать другую. Например, код работы с БД получает вместо текста новости сообщение об ошибке. В этом случае вместо страницы новости нужно показать совсем другую — с извинениями и просьбой зайти позже. С помощью шаблонов это делается элементарно.

Часто одну и ту же информацию надо показывать в нескольких видах. К примеру — обычная страница и страница для печати. Информация та же самая, код её получения один и тот же, а код вывода — разный. Столкнувшись с такой ситуацией, очень быстро разделишь свой код на две части, одна из которых отвечает за вывод, а вторая — не отвечает. Еще пример: допустим, нам захотелось выводить информацию не напрямую в HTML, а через AJAX-запрос, в формате JSON. Если у нас использовался шаблонизатор, то мы меняем в нашем коде ровно одну строчку — вызов шаблонизатора на вызов json_encode() . А если бы у нас вывод был перемешан с кодом получения данных, то код бы пришлось переписывать весь!

В чем-то похожая ситуация: допустим, наш скрипт стоит на двух сайтах. Плюс копия у нас дома. И вот дома мы нашли крупную багу. Заделали её. Теперь надо обновить код на сайтах. И вот он — момент истины: если шаблоны были использованы правильно, то мы просто заливаем код на оба сайта, и все продолжает работать, как ни в чем не бывало! Такая ситуация, как я считаю — идеальная проверка выбранного подхода к шаблонизации.

Ещё один важный момент, который многие упускают (в своих теоретических рассуждениях, при этом постоянно сталкиваясь с ним на практике!) — порядок выполнения скрипта не всегда совпадает с порядком вывода в шаблоне. Хрестоматийный пример — вывод заголовка статьи в теге . Если мы выводим информацию по мере поступления, то просто не сможем этого сделать — шапка сайта уже выведена, к моменту, когда мы начали получать текст новости.

Следует также помнить, что кроме текста РНР скрипты еще и выводят HTTP заголовки. Которые обязаны выводиться до любого текста, или даже вместо текста вообще (если мы например хотим перенаправить пользователя на другую страницу). Если мы сначала реализуем логику работы приложения, ничего не выводя при этом, то выдать нужный НТТР заголовок не составит для нас никакой проблемы.

У вас могут быть и свои причины использовать шаблоны. Но только с одним условием — эти причины должны быть вызваны реальной, жизненной необходимостью, а не «высшими соображениями» и заботой о каких-то неизвестных вам людях.

Практика
Теперь от теории перейдем к практике.
В самом простом случае в показе любой страницы у нас всегда будут участвовать два шаблона: общий шаблон сайта и шаблон контента конкретной страницы.
Допустим, мы хотим сделать страницу со ссылками на сайты друзей.
В этом случае код упрощенный код будет выглядеть так:

сам файл links.php. НИЧЕГО не выводит. Только готовит данные и после этого вызывает шаблон.
//инклюдим настройки.
include ‘settings.php’ ;

//получаем данные из базы, определяем переменные
$pagetitle = «Ссылки» ;
$DATA = $db -> getAll ( «SELECT * FROM links» );

Реализация шаблонов на PHP

Сегодня мы рассмотрим создание класса шаблона для своей CMS. Класс шаблонов это незаменимая часть любого сайта. Класс простой без использования кэширования. Принцип работы: загрузка шаблона, замена переменных в шаблоне и вывод шаблона.

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

Возможности:

1. Замена вставок на заданный текст

2. Подключение шаблонов в шаблоне

3. Выделение блоков в шаблоне

данный код шаблона будет выведен только при использовании команды

При использовании в цикле можно выводить блок много раз.

Переменные в блоке должны быть вида

Создадим в корне сайта папку template для хранения шаблонов и папку includes, в этой папке создадим файл mytemplates.php.

Откроем его в Notepad++, и создаем класс

В созданном классе объявим переменные:

Наш класс шаблонов будет состоять из 6 функций

set_file — выбор файла шаболона

set_vars — установка нескольких переменных

set_block_vars — установка переменных в определенном блоке

load_file — загрузка шаблона

display — вывод результата

И так функция выбора файла шаблона, тут ничего сложного

Функция установки переменных, которые заменяются в шаблоне

Установка переменных для определенного блока.

Без вызова этой функции блок выделенный тегами в шаблоне не будет выводиться.

Документация по макросам и шаблонам UMI.CMS

Начало работы с PHP-шаблонизатором

Настройки шаблона

Для того, что бы начать работу c шаблонизатором, необходимо перейти в настройки модуля “Структура” и на вкладке “Управление шаблонами” создать новый шаблон, после чего зайти в настройки созданного шаблона и выставить параметр тип шаблона в php .

Имя файла произвольное, например: default.phtml .

Файлы шаблона должны располагаться в директории:

В корне директории необходимо создать файл, с именем заданным в настройках.

Базовый шаблон

В простейшем виде базовый шаблон может выглядеть следующим образом:

/** @var umiTemplaterPHP $this */ ?>
/** @var array $variables */ ?>

$variables[‘@title’] ?>

Первые 2 строки:

/** @var umiTemplaterPHP $this */ ?>
/** @var array $variables */ ?>

подсказки IDE для вывода autocomplete.

Для организации иерархичной структуры хранения шаблонов можно воспользоваться следующей конструкцией:

$this -> render( $variables , $variables [ ‘@module’ ] . ‘/’ . $variables [ ‘@method’ ]) ?>

Шаблонизатор на PHP

Меня многократно просили дать код шаблонизатора на PHP, которым я пользуюсь. Но прежде чем перейти к этому коду, давайте немного расскажу о наиболее популярном шаблонизаторе — Smarty. Сразу скажу, что я всегда был против всех этих чужих и огромных библиотек. Но Smarty я стерпел и некоторое время использовал, а потом я подумал: «А зачем мне нужна эта помойка, если от шаблонизатора мне нужен минимум функциональности?«.

Действительно, а что вообще нужно от шаблонизатора? От него нужно лишь подставлять в нужные места tpl-файлов определённые переменные из PHP. Все говорят, что PHP-код в tpl-файлах — это плохо. А чем лучше Smarty-код в tpl-файлах? Да абсолютно ничем, и это даже хуже, поскольку этот Smarty-код потом преобразуется в PHP-код и выполняется.

Smarty уже так сильно разошёлся, что стал вообще отдельным языком со своим синтаксисом, со своими циклами и условиями. Разве это требуется от шаблонизатора?

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

Итак, привожу код своего шаблонизатора, которым я настоятельно рекомендую Вам пользоваться:

/* Метод для добавления новых значений в данные для вывода */
public function set($name, $value) <
$this->data[$name] = $value;
>

/* Метод для удаления значений из данных для вывода */
public function delete($name) <
unset($this->data[$name]);
>

/* При обращении, например, к $this->title будет выводиться $this->data[«title»] */
public function __get($name) <
if (isset($this->data[$name])) return $this->data[$name];
return «»;
>

/* Вывод tpl-файла, в который подставляются все данные для вывода */
public function display($template) <
$template = $this->dir_tmpl.$template.».tpl»;
ob_start();
include ($template);
echo ob_get_clean();
>
>

Всего 1 файл размером 0.5 КБ, вместо больше 100 файлов и примерно 1 МБ2000 раз больше). Но при этом всё самое важное данный класс сделает.

Теперь создадим tpl-файл (пусть называется menu.tpl), который будет без проблем обработан этим шаблонизатором:

И, наконец, давайте напишем PHP-файл, который будет вызывать шаблонизатор:

set(«menu», $menu);
$template->display(«menu»);
?>

Если бы мы использовали Smarty, то у нас было бы всё ровно так же, но в tpl-файле мы бы написали код Smarty, который потом бы заменялся на PHP и выполнялся. А мы же сразу написали этот PHP-код. И какой смысл учить отдельный язык, который будет лишь тормозить работу, а также требует наличие огромной библиотеки?

Надеюсь, данная статья Вам покажет, что не нужно гнаться за бессмысленной функциональностью Smarty. Всё это в гораздо большем объёме есть в PHP, а задача шаблонизатора всего лишь одна — подставлять в tpl-файлы значения, полученные из PHP. Всё.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 73 ):

    Там в цикле foreach ($this->menu as $name => $link) ключ и значение поменять местами нужно)

    Не получается передать переменную из .php в .tpl файл. Обращался в вашу тех поддержку (давно уже) сказали подождать — все еще жду. Может объясните как это сделать и можно ли обойтись без массива ?

    Задайте свой вопрос снова в службу поддержки Возможно он затерялся

    А для чего вообще этот шаблонизатор? Можно чуточку поподробнее об этом для чайников? 🙂

    Для движков он нужен, чтобы не смешивать лишний раз HTML и PHP.

    Очень полезная штука. С помощью такой технологии вполне можно создать собственную cms, не чем не уступающую ныне известным, но она будет намного быстрее, намного меньше весить, к тому же вы сможете реализовать лишь те функции, которые вам нужны и сделать абсолютно любой уникальный дизайн. Спасибо Михаил за вашу помощь!


    А как сделать чтобы автоматом если есть в файле базовые переменные, например

    заменялись на переменные из конфиг файла?

    В конструкторе Template сразу через метод set() добавить все эти всегда присутствующие конструкции.

    Но ведб в классе нету метода для замены чего-либо, а мне нужно просто заменить. Расскажите подробнее пожалуйста

    Метод set фактически и подготавливает набор данных для будущей подстановки в шаблоне.

    Ваш класс конечно хороший, но мне кажется что этот немного лучше https://malinichev.ru/lesson/php-html-template.html как вы считаете?

    Михаил, я всё таки решил испробовать ваш класс в деле, и попал на неожиданную проблему, как мне выводить переменные в шаблоне, если массив у меня двухмерный, при выводе вашего массива menu выходит нечнто такое: Array ( [https://site.ru] => Главная [https://site.ru/page-1.html] => Страница 1 [https://site.ru/page-2.html] => Страница 2 ), а при выводе моего массива выходит такое: Array ( [0] => Array ( [id] => 1 [username] => Владислав Малиничев ) ) Как поступить в такой ситуации, шаблонизатор использую в паре с вашим классом для бд.

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

    Для вывода массива нужен цикл, по-другому не бывает.

    Работа с Шаблонами PHP

    Поясню на примере.
    Вот пример шаблона.

    В скрипте создаётся класс шаблона. Далее ему передаются значения переменных шаблона.

    Метод находит в шаблоне переменные и <BODY>заменяет их соот-нно на $page_title и $page_body.<br />Здесь всё ОК.<br />А, допустим, как можно будет выводить с помощью шаблонов список форумов?<br />Ведь там используется цикл для вывода названия форума, описания, кол-ва тем и пр.<br />В шаблоне можно написать так (в самом простом варианте):</p> <p>

    Но этот блок ведь надо будет выводить для каждого форума. Т.е. значения переменных шаблона будут меняться. Как вариант, можно весь этот блок использовать как переменную, значение которой будет задано в скрипте, но там может (и, наверняка, будет) использоваться HTML, а это уже выходит за рамки «Код — отдельно, дизайн — отдельно», ради которых, собственно, и использую шаблоны. Есть предположение парсить страницу по кускам. Т.е. сначала вывожу этот блок для одного форума, затем для следующего и т.д. Но понятия не имею, как это правильнее было бы реализовать. Если вообще правильно.

    P.S. Просьба не предлагать использовать сторонние шаблоны.

    1. St. SergioS , 11.09.2004 00:54
    ну сделай отдельный шаблончик для списка и скорми уже сформированный код своему классу. это если не заморачивацца.
    2. Anar , 11.09.2004 01:31
    St. SergioS
    Хотелось бы, чтоб все шаблоны были стандартными и сидели в одном файле для каждой странице. Ну если не учитывать header и footer.
    3. St. SergioS , 11.09.2004 01:37
    ну тогда изобретай лисапед или генерируй код сам. список форумов, в общем-то, вполне стандартно выглядит и его дизайн не меняется раз в неделю
    4. Чебурген , 11.09.2004 01:57
    не нужно отдельного шаблончика.
    стандартным средством в таких случаях является объявление блоков

    Сложнее для парсинга, конечно, но зато соблюдается шаблонная идеология, и не надо ползать по сотне файлов-шаблонов из одной строки.

    5. Anar , 11.09.2004 02:00
    St. SergioS
    а как быть с другими списками-то? вообще как можно сгенерировать список по шаблону? я вообще не въезжаю (поздно, наверное, поэтому), в вся документация посвящена работе с готовым шаблонами. Ну не хочу я ставить 600 кб smarty.

    Добавление от 11.09.2004 02:02:

    Чебурген
    Секунду. Я объявил этот блок в шаблоне. А как с ним работать в классе?

    6. Чебурген , 11.09.2004 02:09
    ну, как.
    я шаблонных движков не писал
    регом выдергиваешь название блока и текст между тегами.
    и дальше работаешь с полученным текстом, как с отдельным шаблоном, причем — в цикле.
    весь вывод собираешь в переменную, а потом денлаешь стр_реплейс старого куска на новый.
    я думаю — так.

    Добавление от 11.09.2004 02:09:

    или посмотри, действительно, как в других движках сделано

    7. St. SergioS , 11.09.2004 02:10
    а как быть с другими списками-то?

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

    Я объявил этот блок в шаблоне. А как с ним работать в классе?

    написать парсер это то, что я назвал лисапедом.

    Добавление от 11.09.2004 02:14:

    кстати насчет смарти — он кеширует шаблоны и относительно долго работает при первом вызове, потом существенно быстрее.

    8. Anar , 11.09.2004 02:38
    Надо будет подумать о блоках. Сейчас мало что соображаю. Буду рад, если дадите ссылку на хорошую документацию по сабжу.
    Завтра сообщу о результатах.
    9. RedWolf , 11.09.2004 12:21
    Anar
    Не изобретай велосипед, а используй XSLT. Ибо его поддержка есть в PHP.

    Вот пример кода:

    10. Чебурген , 11.09.2004 13:16
    RedWolf
    а чем XSLT лучше, чем такой же шаблон на PHP (https://spectator.ru/technology/php/easy_templates) ?
    только конкретно.
    И только на этот вопрос.
    Не чем XML ВООБЩЕ прелестен, а чем этот пример лучше аналогичного, но написанного на пхп.
    11. RedWolf , 11.09.2004 13:32
    Чебурген
    Лол, статья обиженного человека

    Так вот, Дмитрий Смирнов имеет честь говорить об отделении представления от данным, попутно изобретая самый настоящий велосипед. Он привел элементарный пример с двумя полями, для него можно сделать что угодно, и это будет легко и просто. Только для этого конкретного примера. И потом можно будет людей обзывать умниками, грозно надувать щеки и вставать в позу Наполеона. А если немножко подумать, то окажется, что Дмитрий Смирнов — позер, который думает, что его неприязнь к технологии XML важна кому-то, кроме него. Это даже не смешно, господа. Я хочу посмотреть на то, как он сделает элементарный цикл своим Super Mega And Revolutionary Totally Automatized Shablon System. Задача сложнее — хочу я получить javascript-овое дерево из табличных данных типа id, id_parent. Вот я посмеюсь над его потугами. Мы ведь отделяем программиста от верстальщика, данные от представления. А раз так, то программист не ведает про HTML Есть набор данных, его надо представить в виде таблицы — КАК? Писать свои supa-for-loop? Программист не будет генерить таблицу и выдавать ее в переменную — программист ничего не знает про HTML, тогда он будет корячиться и писать поддержку циклов Потом условий, а потом и всего остального и мы будем иметь PHP в PHP

    цитата: Уважаемые умники. Данный способ «шаблонизации» действительно покрывает 95% нужд простых смертных

    15. RedWolf , 11.09.2004 14:04
    Чебурген
    Ну если ты читать не умеешь, то это твои проблемы.
    Поясню еще раз — в элементарном примере с двумя текстовыми подстановками XSLT не лучше PHP. Устроит?

    p.s.
    Вобщем так, за свое недолгое пребывание в 24 форуме ты уже успел огрести два замечания, чтобы получить замечание в тематическом форуме — это надо постараться, но ты на верном пути. Успехов.

    16. Чебурген , 11.09.2004 14:20
    Твой ответ меня вполне устраивает.Принципиальной разницы между пхп и XSLT — нет.
    Однако, поскольку и там и там код включен в оформление, то пхп выигрывает, поскольку XSLТ, следуя твоим же собственным словам, «поддерживается» в пхп, и, в итоге, мы получаем «пхп в пхп» — т.е. то, над чем ты сам и смеялся. С шаблоном же на пхп, мы имеем чистый пхп, безо всяких надстроек.

    Я с интересом послушаю твои замечания о моей персоне. О другом у тебя все равно не получается.

    17. RedWolf , 11.09.2004 14:31
    Чебурген
    Ого, а ты хоть знаешь, что такое XSLT?

    По косточкам:
    1. Принципиальной разницы между пхп и XSLT — нет.

    Ну нихрена себе, у меня нет слов. Язык трансформации XML оказывается не отличается от PHP. Так и запишем

    2. пхп выигрывает, поскольку XSLТ, следуя твоим же собственным словам, ВСТРОЕН в пхп

    XSLT не встроен в PHP, XSLT — это отдельная технология преобразования XML во что угодно (например в HTML), а в PHP [может быть] вcтроена поддержка парсера sablotron. Большинство провайдеров эту поддержку осуществляют. PHP не может выиграть у XSLT только лишь потому, что теплое не может быть мягким, это абсолютно разные вещи, а вот самодельные шаблоны на PHP — это убожество, поскольку целый комитет W3С уже давно сделал за этих самоделкиных всю работу на должном уровне, а разработчики PHP позаботились о том, чтобы XSLT можно было использовать в их языке.

    3. О другом у тебя все равно не получается.
    Наглая ложь.

    p.s. Пример технологической цепочки попадания данных из базы и т.д. к юзеру в браузер:

    БД => PHP =XML=> XSLT => HTML

    И где тут php в php?

    18. Чебурген , 11.09.2004 14:39
    Спасибо, кстати, за схемку. В ней как раз хорошо видно наличие лишнего звена.
    БД => PHP-логика => PHP-шаблон => HTML
    Мне, право, жаль, что ты так подставляешься.
    19. RedWolf , 11.09.2004 14:44
    Чебурген

    Где ты увидел лишнее звено? Или ты не только читать не умеешь, но и подслеповат?
    =XML=> — это не звено, а передача данных от PHP в XSLT.

    Попробую еще раз тебе объяснить (право, мне это надоедает):
    XSLT — это СТАНДАРТ, php-шаблоны — это поделки. Если ты выбираешь поделки — твое право. Но web-программирование постепенно перестает быть народным промыслом.

    цитата: Чебурген
    Ты так и будешь из себя клоуна строить?

    Я тебе еще раз говорю — XSLT не имеет никакого отношения к PHP. Это разные технологии.
    XSLT — это представление, можешь тут прочитать про него www.w3.org/tr/xslt

    Правильно. Разные. Вот я и говорю — зачем к пхп цеплять разную лишнюю технологию?
    Зачем на пхп генерить шаблон, а потом напускать на него ЛИШНИЙ обработчик, если можно сразу генерить конечный результат?

    Я-то клоун, но ты и клоуну ответить не можешь.

    Для тебя XSLT ценен просто своим фактом совего существования.
    принципиальную же разницу между

    и

    ты объяснить не в состоянии.

    20. Чебурген , 11.09.2004 14:52
    21. RedWolf , 11.09.2004 14:55
    Чебурген
    Читай объяснение выше. Про клоуна я погорячился, не так понял твой пост, извини.
    22. Чебурген , 11.09.2004 14:55
    Чем мне нравится этот форум — это двумя вещами.
    Тем, что присылает ВСЕ ответы на емейл и экспертами.
    Придется цитировать, то, на что отвечаю. А то куда-то целые репликипропадают.

    Добавление от 11.09.2004 15:04:

    цитата: Где ты увидел лишнее звено? Или ты не только читать не умеешь, но и подслеповат?
    =XML=> — это не звено, а передача данных от PHP в XSLT.

    если здесь не нужно звено, то пусть XSL берет данные прямо из базы. Мне не жалко.
    А вот если тебе старик пых нужен, чтобы СФОРМИРОВАТЬ твой XML (вместо того, чтобы формировать сразу HTML) — извини-подвинься, из песни звена не выкинешь.

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

    23. RedWolf , 11.09.2004 15:07
    Чебурген
    Я знаю людей, которые пишут под себя свои шаблонные языки, будь то на перле или на php, потом холят и лелеят их, всячески оберегают от внешнего мира, пытаются привить их внутри конторы, где они работают.

    Но время берет свое, народ выбирает стандарты, а свои драгоценные шаблонные языки кладет на полку, потому что их время закончилось. Вот еще один наш эксперт, Mr. Undef, разработал на перле шаблонный язык Insite (https://www.insite.ru), на котором были написаны множество крупных ресурсов, но в самом крупном проекте был использован не insite, а XSLT, поскольку XSLT — это проверенная мощная, технология, а в его языке было лишь то, что нужно было ему на момент его создания и доработки, то есть, много времени ушло бы на доделывание не проекта, а insite’а, а времени всегда мало.
    Я надеюсь, хватит мозгов понять, что изобретать велосипеды — это не круто

    цитата: если здесь не нужно звено, то пусть XSL берет данные прямо из базы

    Это можно, но это неправильно.

    цитата: А вот если тебе старик пых нужен, чтобы СФОРМИРОВАТЬ твой XML (вместо того, чтобы формировать сразу HTML) — извини-подвинься, из песни звена не выкинешь.

    То есть, ты предлагаешь php-программисту генерить представление?

    PHP нужен для того, чтобы подготовить данные для представления их на сторое клиента.

    цитата: Я знаю людей, которые пишут под себя свои шаблонные языки

    цитата: То есть, ты предлагаешь php-программисту генерить представление

    Ты так до сих пор и не понял аналогии между пхп-шаблоном и xslt-шаблоном.
    Ты глух. Ты умеешь слушать только себя.

    24. Чебурген , 11.09.2004 16:27
    25. moderator-1024 , 11.09.2004 16:54
    Прекратите разборки здесь. Иначе придется приступить к раздаче замечаний
    26. RedWolf , 11.09.2004 19:49
    Чебурген

    цитата: Ты так до сих пор и не понял аналогии между пхп-шаблоном и xslt-шаблоном.

    Стандарт php-шаблонов в студию! С конструкциями, операторами и т.д.

    цитата: Ты так до сих пор и не понял, что новый язык тебе здесь никто не предлагает.

    Хм, ты заставляешь html-верстаков писать на php?

    У нас есть данные и их представление, представление ничего не знает о том, как получаются данные. Получением данных ведает php, представлением — некий front-end. Допустим, что программист php ничего не знает про HTML, его задача — обработка данных, и есть html-верстальщик, который эти данные получает, и на их основе делает преставление (html-код). Очевидно, что простой версткой html’а нельзя обеспечить связь между php и результирующим html, значит нужно некое промежуточное звено — ШАБЛОН. Есть стандарт шаблонов — XSLT, они вообще ничего не ведают о том, откуда приходят данные — из перла, пхп, явы и т.д., они берут данные (xml) и получают из них например html. Вещь эта распространенная, всеми поддерживаемая, востребованная. А есть некое множество программистов php, которые не знают (или не хотят знать) XSLT, и пишут свои собственные шаблонные движки (покажи мне стандарт шаблонного языка на php), обучают ему верстаков и вроде как все рады. А потом верстак идет на новую работу, и его спрашивают — а что ты умеешь? Он — верстать HTML и еще я знаю язык шаблонов Васи Пупкина, работодатель делает для себя вывод, что верстак знает только HTML, ибо кто такой Вася Пупкин он не знает. Зато одно только знание XSLT гарантирует получение работы (www.job.ru). Это один минус, а другой — это то, что множество программеров PHP изобретают свои собственные шаблонные языки, которые в конечном итоге никому кроме них самих не нужны.

    цитата: Ты глух. Ты умеешь слушать только себя.

    p.s. Порылся в инете и нашел: FastTemplate, phplib, PatTemplate, Smarty, php_templates — это все шаблонные движки на PHP! И это только на первой странице поиска в гугле! И везде разный синтаксис. Грустно, господа. А еще грустнее то, что эти **** еще не перевелись, как показывает эта ветка

    цитата: Стандарт php-шаблонов в студию! С конструкциями, операторами и т.д.

    цитата: Хм, ты заставляешь html-верстаков писать на php?

    Между прочим, самый первый вопрос, который я тебе задал — чем принципиально лучше заставлять «верстаков» писать на XSLT.
    Ответа я так и не получил. Что неудивительно. Но он, кажется, до тебя, наконец, дошел, что не может не радовать.

    цитата: А еще грустнее то, что эти **** еще не перевелись, как показывает эта ветка

    27. Чебурген , 12.09.2004 15:48
    28. Anar , 12.09.2004 16:42
    Ну, блин, завязали спор. Статья на spectator.ru действительно suxx, она пригодна для написания самых-самых примитивных шаблонов, без всяких циклов и повторений. Если XLST действительно считается универсальным языком шаблонов, то скорее всего буду юзать его. Но для этого мне надо ещё будет выучить XML. Во всяком случае, я согласен с RedWolf в том, что сейчас очень много различных шаблонных языков и дизайнеру придёться учить каждый язык с нуля, если вдруг он перейдёт к другому проекту. Это не есть гуд.
    Вопрос: где можно поподробнее почитать про создание шаблонов на основе XLST?
    29. RedWolf , 12.09.2004 18:16
    Чебурген
    Если ты не хочешь, чтобы количество замечаний под твоим ником росло, не флуди. Сечешь фишку?

    цитата: Между прочим, самый первый вопрос, который я тебе задал — чем принципиально лучше заставлять «верстаков» писать на XSLT.

    Я в очередной раз убеждаюсь в том, что ты не умеешь:
    1. читать
    2. смотреть
    3. оказывается еще и думать

    Anar оказался на порядок умнее тебя — иди и почитай его пост. Заодно подумай на досуге, а я завязываю беспредметный спор с тобой, ибо мне это надоело.

    цитата: Вопрос: где можно поподробнее почитать про создание шаблонов на основе XLST?

    Я учился при общении со старшими товарищами года три-четыре назад, а потом навострился читать стандарт — www.w3.org/tr/xslt, но это тяжкое занятие.
    Примеры можно взять тут:
    https://raleigh.ru/XML/XSLTutorial/
    https://raleigh.ru/XML/XPathTutorial/
    Ну и вообще тут: https://raleigh.ru/XML/
    А также тут: https://xmlhack.ru/

    Короче, стучись ко мне в аську, подскажу по конкретным примерам.

    цитата: а я завязываю беспредметный спор

    Еще бы, если ты опустился до самозванного модераторства и беспочвенных наездов. После таких «аргументов, «спорить», действительно, некуда.
    Спасибо, кстати, за добрые слова. Из-за того, что Анар оказался на порядок умнее меня, мое самолюбие уязвлено черезвычайно. Особенно после того, как он вслед за тобой расписался в том, что не понял ни слова из той статьи. Которую, кстати, ему никто читать не предлагал — она была приведена в пример исключительно как пример точки зрения, противоположной его собственной и созвучной твоей — держать в шаблоне логику представления — сначала ведь он собирался отделять ее. Сейчас он избрал другой путь — ради бога. У каждой технологии есть свои плюсы и минусы.

    Anar
    Не забудь все эти ссылочки дать своему «верстаку». Не забудь рассказать его реакцию.
    А когда закончишь проект, не забудь сравнить трудозатраты на следование «стандарту» и изучение двух дополнительных языков.

    Добавление от 12.09.2004 19:57:

    Кстати, RedWolf и тебе совет. Меньше обращай внимание на личность и поведение собеседника и больше — на предмет разговора.

    А ты Anar, тоже лучше бы вникал в суть того, что тебе проповедуют, а не верил только слову «стандарт».
    А то, глядишь — вожделенная технология окажется не совсем тем, что ты себе так радужно представлял.

    30. Чебурген , 12.09.2004 19:35
    31. RedWolf , 12.09.2004 22:59
    Чебурген

    цитата: расписался в том, что не понял ни слова из той статьи

    Цитату. И обоснование.

    цитата: сначала ведь он собирался отделять ее

    Еслиты не унимаешься, то я еще раз вернусь к этой убогой статье:

    цитата: А теперь потрясем мозгами и хорошенько подумаем, что же у нас получилось. У нас получился фактически язык программирования, написанный на PHP, который можно встраивать в html-код и тем самым менять логику его (html-кода) отображения.

    То есть, Вася Пупкин (Дмитрий Смирнов) от неистребимого желания что-то сделать написал еще один шаблонный движок на php, коих море, поскольку кодеров на пыхе — как грязи.

    При этом мы уже имеем встроенную в PHP поддержку XSLT, который из себя представляет повсеместно распространенный способ написания шаблонов.

    цитата: не забудь сравнить трудозатраты на следование «стандарту» и изучение двух дополнительных языков

    На том уровне, на котором написаны эти шаблонные движки, познание соответствующего XSLT займет где-то. а ничего это не займет. Писать сходу. value-of и for-each и все.

    Есть что возразить?

    цитата: Давайте, товарищи умники, забудем такие слова, как XML, XHTML и прочий X…, и поговорим о вещах, приближенных к реальности.

    Это говорит о том, что автор статьи страдает болезненной неприязнью к XML-технологиям.

    p.p.s. Признайся, что ты вообще не понимаешь, что это за зверь — XSLT. Это будет тебе оправданием.

    32. St. SergioS , 12.09.2004 23:15
    Между прочим, самый первый вопрос, который я тебе задал — чем принципиально лучше заставлять «верстаков» писать на XSLT.

    к слову, это необходимый skills для «верстака». другие сейчас не рассматриваются.

    33. Чебурген , 12.09.2004 23:21
    RedWolf
    придется дать тебе еще пару советов.
    НИКОГДА не ругай автора статьи, из которой ты прочел только первые две строчки.
    НИКОГДА не спорь с людьми, которые ее читали.
    Безотносительно к предмету спора ты выглядишь очень глупо и некрасиво.
    34. RedWolf , 12.09.2004 23:25
    Чебурген
    Твои советы мимо адреса.
    Я прочитал статью целиком. Обломись

    Я делаю для себя вывод — тебе абсолютно нечего сказать по теме.

    35. kexman , 12.09.2004 23:26
    RedWolf
    Можете вкратце объяснить, что такое xml, xslt и зачем они нужны? Я немного пишу на php с использованием mysql, зачем нужно что-то ещё, мне не понятно
    36. Mr. Undef , 12.09.2004 23:27
    Чебурген
    Между прочим, самый первый вопрос, который я тебе задал — чем принципиально лучше заставлять «верстаков» писать на XSLT.
    Ответа я так и не получил. Что неудивительно. Но он, кажется, до тебя, наконец, дошел, что не может не радовать.

    Вы уже в течении этой ветки не раз получили ответ на этот вопрос!


    Попробую ещё раз перечислить:
    1) Универсальность: не изменяя ни строчки в программе на PHP вы можете получить от неё не только HTML вывод, но и другие различные форматы выходных данных, кстати, посмотрите на технологию RSS, очень хороший пример универсальности.
    2) Стандарт есть стандарт, против него не попрёшь, есть возможность выбора между различными XSLT парсерами, которые в большинстве своём написаны проффесионалами, и написаны на языке С/С++, который в совокупности с прямыми руками даёт в разы большую производительность, чем кустарные решения для php ввиде FastTemplate, phplib, PatTemplate, Smarty, php_templates, etc
    3) ОДНО ТОЛЬКО ЗНАНИЕ XSLT даёт возможность работать и зарабатывать деньги, а шаблоный движок Васи Пупкина, ничего не даст, кроме сомнительных знаний.

    37. RedWolf , 12.09.2004 23:39
    kexman

    цитата: что такое xml, xslt и зачем они нужны

    XML — это язык резметки данных, XSLT — язык трансформации XML.
    Поддержка XML есть практически везде, в этом его сила — в стандартности и расппространенности.
    XSLT же позволяет получать из XML-ей любые данные в любом виде, например HTML, при этом написание XSLT-шаблонов для HTML-верстальщиков не является чем-то чуждым, ибо оба этих языка унаследованы от одного общего предка — SGML.

    Вкратце построение HTML из PHP с помощью XSLT можно представить так:

    Все данные, которые нужны для построения страницы будут находиться в $data, а вызов xslt_process вернет нам результат трансформации $data + xslt-шаблон => HTML

    38. Чебурген , 12.09.2004 23:39
    RedWolf
    К сожалению, в статье, которую ты так поносишь, абзац, до которого ты только и дочитал, является антитезой к основной мысли автора. И он это ясно дает понять уже следующим абзацем всякому непредвзятому читателю. То есть, ты споришь с тем же самым, с чем спорит и автор. И выглядишь, надо признать, при этом на редкость глупо
    39. RedWolf , 12.09.2004 23:48
    Чебурген
    Нет. Автор единственное что сделал — это он заменил самодельные инструкции на максимально упрощенный PHP. Тем самым принципиально заставляя верстальщика писать на PHP. В примере с текстовыми переменными это очень просто. А вот когда пишутся циклы и так далее? Ведь автор уверяет, что его подход покрывает 95% случаев

    цитата: Верстальщику же, чтобы научиться работать с такими «шаблонами», нужно всего 3–5 минут для ознакомления с основами синтаксиса PHP

    За такое утверждение можно отрывать голову Это раз. Два — допустим надо достать данные из базы. Разумеется, верстак это делать не будет, это задача программиста. Значит программист должен обеспечить начилие неких массивов, которые свежеобученный пыху верстак мог бы вывести на своем коцаном PHP. А если надо делать суммирование в конце? Или по неким группам? А если деревце построить? И таких если — море.

    40. Чебурген , 12.09.2004 23:58
    Mr. Undef

    цитата: не изменяя ни строчки в программе на PHP

    Умалчиваем о том, что править строчки нам придется в программе XSLT?
    Та же самая универсальность пхп-шным шаблоном делается с той же легкостью.
    аргумент мимо.

    цитата: кустарные решения для php ввиде FastTemplate

    Ради бога. Избавьте меня уже от этих инсинуаций. Ну сколько можно? Высосали себе из пальца эти движки, и давай обсуждать. Нет, пожалуйста, конечно. Но только без меня. Я говорю совсем о другом. Не понимаете, о чем я — сначала спросите, я объясню, и мы продолжим.

    Да. Это у него не отнять. Это плюс. Бэкэнд можно сменить без смены шаблонов. Это плюс, с которым, вообще-то, никто не спорит .
    Однако вопрос мой был совсем в другом. О прниципиальной, парадигмической, да простят мне лингвисты это слово, разнице подходов. А ее нету. И там и там мы имеем язык программирования для описания логики отображения.
    А против стандарта у XSL у пыха есть свой плюс — гомогенность среды разработки. Я не могу удержаться от этого замечания в контексте развернувшейся войнушки. К сожалению, большинство читателей, как я вижу, воспринимают аргументы исключительно в стиле «Есть осибка!». Негоже, если у них создастся впечатление, что у пыха совсем нет шансов только потому, что рчеь вообще-то была совсем о другом.

    цитата: Вкратце построение HTML из PHP с помощью XSLT можно представить так:

    Добавление от 13.09.2004 00:00:

    Сказать честно?
    Я худею с экспертов этого форума.

    41. x-box , 13.09.2004 00:01
    Anar
    xslt — достаточно громосткая и загрузная штука, но универсальная. Стоит лишний раз подумать: стоит ли копать яму экскаватором(изучая как им управлять) или проще взять лопатку и быстренько все сделать. Вопщем все зависит от задач и их перспектив.

    Идеалогия DOM несколько иная, чем у всех пхп-шаблонов. Там не так просто въехать, плюс широкий выбор вариантов реализации. Простейшие шаблоны все очень похожи и изучив один, легко будет и в другом разобраться. С широкими возможностями, типа Смарти — посложнее, но не сравнить с изучением xml,xslt,domxml. Везде нужен разумный подход и однозначно утверждать, что «это» лучше, нельзя.

    42. St. SergioS , 13.09.2004 00:08
    Соглашусь
    43. Mr. Undef , 13.09.2004 00:11
    Чебурген
    Объясняйте
    44. RedWolf , 13.09.2004 00:13
    Чебурген

    цитата: Умалчиваем о том, что править строчки нам придется в программе XSLT?

    XSLT — это шаблон, а не программа.

    цитата: для описания логики отображения

    Что такое логика отображения? Новый термин?

    цитата: Умалчиваем о том, что кроме этих пары строчек мы должны всю логику представления описать в шаблоне XSLT?

    Не логику представления, а представление. А как без этого?

    цитата: А против стандарта у XSL у пыха есть свой плюс — гомогенность среды разработки.

    Сомнительный плюс — представление ничего не должно знать о том, как в него попадают данные. Зато XSLT и HTML — есть суть языки разметки и словари SGML.

    p.s. Автор статьи не первый, кто описал такой подход. Он применен в phpmychat. И мне пришлось его значительно менять под свои нужды, и я скажу вам — это такой ужас. Все средства визуальной отладки идут лесом, никакие bracket matching и так далее. И выглядит это очень омерзительно.

    45. Чебурген , 13.09.2004 00:23
    Mr. Undef
    Смирнов в своей статье описывает шаблоны на чистом пхп. Я еще видел, как этот принцип называют code-behind.
    То, для чего пхп, собственно, и разрабатывался — встроенный в хтмл язык шаблонов.
    Мы имеем блок логики, который готовит данные для шаблона — достает из базы, сортирует, распихивает по массивам.
    И инклюдит шаблон, написанный на «простом» пхп.
    В этом шаблоне нет логики приложения. А только логика представления.

    Почему я задал свой вопрос?
    потому, что первоначально Анар, как я понял, хотел сделать pure-шаблон, БЕЗ малейшей логики в нем. Я показал, как ему это сделать — кроме переменных, там еще есть только блоки.

    После того, как привели пример XSLT, я решил обратить его внимание на разность в подходах — XSL — это такой же язык, как пхп, язык логики представления, встроенный в шаблон.

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

    46. RedWolf , 13.09.2004 00:37
    Как только станет более-менее сложная задача — покажи мне свой шаблон на «простом» php. Я такие уже видел. Ничего кроме чувства омерзения это не вызывает. И проблем с поддержкой.
    47. Anar , 13.09.2004 01:45
    Чебурген
    расписался в том, что не понял ни слова из той статьи.
    Эту статью я прочитал ещё до того, как начал эту тему.
    Если б она мне подошла бы, я бы здесь новую тему не создал бы.
    48. Чебурген , 13.09.2004 02:02
    Anar
    То есть, ты продолжаешь утверждать, что мощи языка пхп хватает только

    цитата: для написания самых-самых примитивных шаблонов

    Боюсь, что, в этом случае, ты, вдобавок, не знаком еще и с пхп. Мои соболезнования.

    Я не собираюсь тебя уговаривать использовать эти шаблоны.
    Я лишь хочу сказать, что в сказки верят только дети.
    Если ты думаешь, что xsl — это волшебный язык, который сам за тебя все делать будет — ты заблуждаешься. Не умеешь написать цикл на пхп — ради бога! Пиши на xsl! Но то, что лично ты не можешь написать на пхп цикл, еще не означает, что это нельзя сделать вообще.
    Если ты думаешь, что на XSL циклы тебе писать не придется — ты тоже заблуждаешься.
    Я, собственно, приводил пример. могу повторить для невнимательных:
    XSL:

    PHP:

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

    49. Anar , 13.09.2004 02:54
    Уважаемый ALL.

    Вы сильно ушли от моего первоначального вопроса. И уже совсем запутался.
    Если я правильно понял, то суть вашего разговора можно свести к тому, что:

    1) XSLT — универсальный шаблон. Сложный, но крутой. Его лучше использовать для больших проектов.
    2) Чебурген утверждает, что в моей задаче не следует заморачиваться изучением XLST (хотя лучше выучить, т.к. это приносит $).

    Мой «проект» — это всего лишь форум, который не является коммерческим продуктом. Для создания шаблонов я думаю там особо сильно заморачиваться не надо, и поэтому я решил сделать элементарный класс замены <ТАКИХ_ПЕРЕМЕННЫХ>в шаблоне, но у меня возникла проблема с выводом циклов, поэтому я спросил здесь, на форуме. Пока вы тут спорили, я решил попробовать использовать блоки и вытаскивать оттуда инфу через регулярное выражение. Это не до конца доделал (я там завис на стадии извлекания данных из этого блока, вроде preg_match должен делать, но не делает, ну вообщем, я забросил пока, были другие дела). Это правильно так делать?

    На днях почитаю про XLST (хотя, скорее всего начну с изучения XML, т.к. пригляделся я к примерам xslt — и почти ничего не понял ). И из других источников тоже слышал, что знание XML не помешают. Надеюсь, это не такой сложный для освоения язык, как мне кажется.

    50. Чебурген , 13.09.2004 08:36
    Нет, я ничего подобного я не утверждал.
    Я вообще не являюсь сторонником или противником любой из трех обсуждавшихся здесь технологий. Я против головотяпства при выборе или обсуждении любой из них.
    51. Mr. Undef , 13.09.2004 10:33
    Чебурген
    А расскажите нам, как долго вы программируете, в каких проектах участвовали?
    Очень интересно, может Вы гостевые пишете второй месяц Вашего опыта программирования(о чём можно сделать косвенный вывод по сообщениям этой ветки), тогда с Вами бесполезно пока спорить. надо подрасти.

    Добавление от 13.09.2004 10:36:

    Anar
    Не изобретайте велосипед!
    XML/XSLT не такая сложная вещь, изучите, Вам понравится!

    52. Чебурген , 13.09.2004 10:51
    Mr. Undef
    Программирую я три месяца, а не два, как кому-то показалось. Участвовал в проекте по написанию гостевой книги, но проект пока не закончен.

    Надеюсь, я удовлетворил Ваше искреннее и, несомненно, тематическое любопытство.

    53. moderator-24 , 13.09.2004 11:16
    поменьше эмоций
    54. Joshua5 , 13.09.2004 11:20
    Anar

    хочу заметить только, что если разрабатывать шаблон на «чистом PHP», т.е. максимально отделить логику от представления, тебе придётся писать кучу методов вплоть до метода получения значения ключа массива (утрированно, но близко к сути), тогда как XML/XSLT — это готовый движок для твоих нужд

    он не является «монстром», как его тут пытаются представить некоторые товарищи, занимающиеся веб-программирование целых три месяца (и не слушающие, что им говорят люди, работающие в этой сфере 5-10 лет). для простого проекта — простой шаблон XSLT, для сложного — сложный

    в любом случае, любой шаблон XSLT выигрывает в производительности у «шаблона» на PHP, не говоря уже о времени разработки/доработки

    55. x-box , 13.09.2004 11:46
    Joshua5
    тогда как XML/XSLT — это готовый движок для твоих нужд
    Ключевое слово — «твоих».

    в любом случае, любой шаблон XSLT выигрывает в производительности у «шаблона» на PHP
    Не в любом.

    для простого проекта — простой шаблон XSLT, для сложного — сложный
    В том то все и дело, что одним шаблоном xsl не отделаешься. Нужно будет брать/придумывать кучу классов/функций для адаптации структурирования данных в xml.

    не говоря уже о времени разработки/доработки
    это уже совсем сказки, особенно учитывая «в любом случае».

    56. Чебурген , 13.09.2004 11:56
    Никаких эмоций мы здесь не наблюдаем.
    Мы здесь наблюдаем экспертов, которые сначала не могут прочесть статью размером в две странички и начинают с жаром спорить со своим неправильным поиманием этой статьи, а после разъяснения им их ошибки, переходят на личности.

    Если же говорить об Анаре и его нелегком выборе, то давайте вести честную игру.

    цитата: XSL не является «монстром»

    цитата: на «чистом PHP», придётся писать кучу методов

    Ну что то за детский сад? Наши — это храбрые разведчики, а их — гнусные шпионы.
    «Чистый пхп», что бы ты под этим словом ни подразумевал, тоже ни разу не монстр.

    57. Joshua5 , 13.09.2004 12:13
    x-box

    Ключевое слово — «твоих».

    разумеется, поскольку Anar решает свои проблемы.

    если бы я хотел сказать о проблемах разделения данных и логики представления, ключевым словом было бы «любых»

    кроме случая «кривых рук»

    В том то все и дело, что одним шаблоном xsl не отделаешься. Нужно будет брать/придумывать кучу классов/функций для адаптации структурирования данных в xml.

    бред, или я не понял о чём ты

    это уже совсем сказки, особенно учитывая «в любом случае».

    переписать скрипт на PHP для изменения логики представления данных займёт больше времени, чем изменить одну строчку в шаблоне XSLT

    уважаемый сэр вообще-то имеет сравнительный опыт разработки PHP-шаблонов и XSLT-шаблонов?

    Добавление от 13.09.2004 12:16:

    речь о том, что на «чистом PHP» надо реализовать некоторое — довольно большое — количество методов, которые УЖЕ реализованы, например, в DOM XML

    58. Чебурген , 13.09.2004 12:33
    Ну например?
    получение ключа массива реализовано в DOM ХML и не реализовано в пхп?
    59. x-box , 13.09.2004 12:55
    Joshua5
    кроме случая «кривых рук»
    производительность — объем работы за единицу времени. Хочешь сказать, что xml/xslt будет в любом случае быстрее любого другого движка при наличии прямых рук? Не согласен.

    бред, или я не понял о чём ты
    Я о том, где xml будем брать. Например, для получения из бд. Магической функции mysql_fetch_xml вроде нету. Вот и придется кучу функций городить посредством domxml-библии, или готовые брать и разбираться.

    переписать скрипт на PHP для изменения логики представления данных займёт больше времени, чем изменить одну строчку в шаблоне XSLT
    А чем не устраивает формулировка: изменить одну строчку в php-шаблоне не сложнее, чем изменить одну сточку в xsl-шаблоне?

    уважаемый сэр вообще-то имеет сравнительный опыт разработки PHP-шаблонов и XSLT-шаблонов?
    Сравнивать, судя по всему, только с Чебургеном можно

    60. Чебурген , 13.09.2004 13:00
    Joshua5
    Кстати сказать, тот самый «чистый пхп» о котором ты говоришь, имея в виду чистый шаблон, ни в каких методах и не нуждается. В нем просто НЕТ никаких методов — в нем логика отделена от представления. Он так устроен.
    Всю логику мы реализуем скриптом, шаблон же только заполняем значениями.

    Я не говорю, что этот метод лучше или хуже.
    Я говорю, что это просто другой метод.
    Перестаньте уже эту войнушку. Надоело, в конце концов.

    61. Mr. Undef , 13.09.2004 13:20
    Joshua5
    RedWolf

    Предлагаю прекратить спор с неадекватными товарищами, и обсудить например новинки появившиеся в XSLT 2.0

    62. fixxxer , 13.09.2004 13:23
    Сдается мне, что 90% читающих так и не поняли, о чем речь.

    Просто приведу пример.

    63. Joshua5 , 13.09.2004 13:45
    Чебурген

    например фильтрация, сортировка, изменение представления «на лету»

    Хочешь сказать, что xml/xslt будет в любом случае быстрее любого другого движка при наличии прямых рук?

    комплексно — думаю, да

    Я о том, где xml будем брать. Например, для получения из бд. Магической функции mysql_fetch_xml вроде нету. Вот и придется кучу функций городить посредством domxml-библии, или готовые брать и разбираться.

    а, понял
    ну, это зависит от базы, во-первых
    во-вторых, есть куча конвертеров
    в-третьих, я, например, в своё время написал функцию построения XML-документа из обычного ассоциативного массива — работает довольно шустро

    А чем не устраивает формулировка: изменить одну строчку в php-шаблоне не сложнее, чем изменить одну сточку в xsl-шаблоне?

    потому, что в PHP-шаблоне будет не одна строчка
    и не только в шаблоне, но и в скрипте

    Сравнивать, судя по всему, только с Чебургеном можно

    В нем просто НЕТ никаких методов — в нем логика отделена от представления. Он так устроен.

    учитывая, что PHP был разработан, как язык, встраиваемый в HTML — т.е., уже получается смешаный контент+логика.

    Надоело, в конце концов.

    надоело — не читай, делов-то

    думаешь, ты первый человек, который за 3 месяца освоил веб-программирование? 🙂 поговорим через годик-два, ок?

    цитата: думаешь, ты первый человек, который за 3 месяца освоил веб-программирование? поговорим через годик-два, ок?

    Повелся!
    Джошуа, я тебе открою страшную тайну! (тсс. ) Чебурген тебя обманул. Он на самом деле занимается веб-программированием аж 4 месяца.
    Это мы с ним пишем гостевую книгу.

    Ну, а по делу. Мой предыдущий пост, кажется, наглядно демонстрирует возможности PHP как шаблонного движка. По нему комментарии будут?

    64. fixxxer , 13.09.2004 14:04
    65. Чебурген , 13.09.2004 14:04
    Joshua5

    цитата: надоело — не читай, делов-то

    спасибо за ценный совет, но я, несмотря на свой мизерный стаж в веб-программировании, все-таки, сам решу, что мне читать, и чему тебя учить.

    Что я не буду — это участвовать в бессмысленной войнушке «XSL против всего мира». Оставим это на совести местных «экспертов».

    А вот потыкать носом людей, которые кичатся своим стажем и не имеют других аргументов — эо с удовольствием.

    66. Joshua5 , 13.09.2004 14:08
    fixxxer

    Мой предыдущий пост, кажется, наглядно демонстрирует возможности PHP как шаблонного движка. По нему комментарии будут?

    а какие комментарии нужны? да, это возможно — и что? можно с таким же успехом продемонстрировать возможности XSLT

    сам решу, что мне читать, и чему тебя учить

    что читать — решать, конечно, тебе
    а вот чему ты можешь научить меня — это ещё вопрос

    А вот потыкать носом людей, которые кичатся своим стажем и не имеют других аргументов — эо с удовольствием.

    а где, собственно, твои аргументы? только не надо, что, мол, ты на трёх страницах уже распинаешься о прелястях шаблонов

    ни одного _реального_ аргумента от тебя я не услышал

    да и откуда им быть, если в веб-программировании — по твоему собственному признанию и по твоим высказываниям — ты ничего не понимаешь?

    67. x-box , 13.09.2004 14:09
    Joshua5
    в своё время написал функцию построения XML-документа из обычного ассоциативного массива
    там одной функцией не обойдешься. Вставка,поиск нодов разных тоже к функциям приводит. Я хочу сказать только, что вся прелесть в том, что xml — неизвестная структура для ядра пхп, в отличие от массива. И это дополнительные накладные расходы. Немалые.

    Чтобы с нуля(ничего не зная изначально) поставить на рельсы все это дело, нужен месяц!(по себе сужу).

    потому, что в PHP-шаблоне будет не одна строчка
    и не только в шаблоне, но и в скрипте

    комплексно — думаю, да

    сдается мне, что ты все-таки какие-то конкретные случаи имеешь ввиду, а не любые.


    68. fixxxer , 13.09.2004 14:14
    Joshua5

    Хорошо, возьмем аналогичный XSLT-шный foreach. И сравним.

    1) Производительность.
    PHP: вывод формируется непосредственно при fetchе из рекордсета. Производительность практически равна варианту без использования шаблонов.
    XSLT: fetchить надо всесь рекордсет, генерить из него XML, и скармливать XSLT. Думаю, всем известно, что парсинг XML в дерево — не очень быстрая операция.

    2) Читабельность шаблона, простота обучаемости.
    PHP: верстальщик, знакомый с HTML, после трех часов обучения способен использовать шаблоны.
    XSLT: требуется специальное обучение, не менее месяца.

    69. Joshua5 , 13.09.2004 14:14
    x-box

    там одной функцией не обойдешься. Вставка,поиск нодов разных тоже к функциям приводит.

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

    далее работа с ним идёт посредством встроенных методов

    сдается мне, что ты все-таки какие-то конкретные случаи имеешь ввиду, а не любые.

    ну я и не говорил, что XML/XSLT по-любому будет лучше PHP

    70. Чебурген , 13.09.2004 14:16
    Joshua5

    Итак.
    Дано: на пхп у нас получается

    Вопрос:
    В XSL контент отделен от логики, или нет?

    Вопрос:
    Что имеет в виду мой уважаемый собеседник. Тот принцип, который описал Anar в своем вопросе, или Д.Смирнов в своей статье.

    цитата: с таким же успехом продемонстрировать возможности T

    Вопрос:
    Верно ли обратное — «ПХп с таким же успехом может сделать то же, что и XSL, но без промежуточного преобразования в XML?»

    цитата: ни одного _реального_ аргумента от тебя я не услышал

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

    71. Joshua5 , 13.09.2004 14:17
    fixxxer

    во-первых, можно получать XML непосредственно из базы — об этом я уже говорил

    во-вторых, можно создать XML-документ и по мере fetch-а добавлять в него новые ноды, а потом сделать глобальный apply-templates

    2) Читабельность шаблона, простота обучаемости.

    тут выигрыш нелинейный 🙂 после обучения сотрудника производительность возрастает засчёт использования более гибкой технологии

    Добавление от 13.09.2004 14:20:

    В XSL контент отделен от логики, или нет?

    не надо путать XML и XSLT
    XML — это данные
    XSLT — логика

    Верно ли обратное — «ПХп с таким же успехом может сделать то же, что и XSL, но без промежуточного преобразования в XML?»

    можно, но с гораздо большими затратами
    и, кстати, не промежуточное преобразование, а изначальное представление

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

    всё вышесказанное ещё не даёт права рассуждать о том, чего не знаешь
    особенно, когда рассуждаешь ошибочно

    цитата: а потом сделать глобальный apply-templates

    И получить глобальные тормоза.

    https://russian.joelonsoftware.com/Articles/BacktoBasics.html — настоятельно рекомендую к прочтению.

    72. fixxxer , 13.09.2004 14:20
    73. Joshua5 , 13.09.2004 14:25
    fixxxer

    я что-то сильно сомневаюсь, что XML-документ в памяти представлен, как текст 🙂

    цитата: не надо путать XML и XSLT
    XML — это данные
    XSLT — логика

    очень хорошо.
    Не надо путать массив в РНР-коде и РНР-шаблон. массив в РНР-коде — это данные. РНР-шаблон — логика (отображения подразумевается).
    1:1

    покажите мне XSL без разметки — и я тут же признаю свое поражение.

    цитата: и, кстати, не промежуточное преобразование, а изначальное представление

    Вот это — важный пункт.
    На нем надо остановиться подробнее.
    Тут мы имеем 2 варианта.
    Если мы обходимся без промежуточного преобразования, то мы налетаем на пробелму производительности, поскольку XML не приспособлен для хранения и больших объемов данных.
    Если же хранить данные по-человечески, то придется иметь то самое преобразование. Какую-то прослойку между базой и XML. И в этом случае втанет вопрос — зачем этой прослойке нужен XML, почему не генерить сразу в том виде, в каком оно должно выглядеть?

    прошу указать мне на недостатки в моем рассуждении или на третий вариант.

    цитата: всё вышесказанное ещё не даёт права рассуждать о том, чего не знаешь

    Я рассуждаю исключительно о том, что мне написали уважаемые эксперты этого форума.

    Вообще, здесь много всего было сказано, и в данный момент лично я оппонирую точке зрения:
    «XSL — всемирный рулез, а если вы ткие умные — то почему строем не ходите?»

    А заодно развеиваю демагогию, такую, например «шаблоны на пыхе — это плохо. Потому, что там в куче данные и их представление». Хотя любой человек, который хотя бы три недели пишет на пхп, уже знает, что никаких данных в пхп скриптах нет — данные хранятся в текстовых файлах или базе данных.

    74. Чебурген , 13.09.2004 14:34
    75. fixxxer , 13.09.2004 14:35
    Хорошо, допустим, ты на лету создашь DOM и умудришься скормить это дерево XSLT-процессору (кажется, в libxml2 это возможно). Ну а .xsl у тебя на диске хранится не в виде текста, а в виде уже распарсенного дерева?

    P.S.
    Я ничего не имею против XML, DOM и XSLT. Хочу лишь напомнить, что каждый инструмент имеет свои области применимости. К сожалению, товарищи, пришедшие из .NET, зачастую мыслят MSDN-ом и Microsoft Press’ом, а не собственными мозгами.
    P.P.S.
    Мне, помнится, предлагали сделать шаблон для письма — с фромом, сабжем и двумя подстановками в теле письма — на XML/XSLT. Причем письма эти рассылались по базе около 300 пользователей. Типа — «ну это же сейчас так все делают, стандарт. «.

    76. Joshua5 , 13.09.2004 16:18
    Чебурген

    Не надо путать РНР-код и РНР-шаблон. РНР-код — это данные. РНР-шаблон — логика (отображения подразумевается).

    PHP-код — это PHP-код, логика
    PHP-шаблон — это заготовка
    а данные — они в базе, или в файле, или ещё где-нибудь

    покажите мне XSL без разметки — и я тут же признаю свое поражение.

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

    да это как сказать
    ясное дело, никто в XML не хранит бинарники фильмов или музыки

    Какую-то прослойку между базой и XML.

    необязательно
    MS SQL умеет отдавать XML, сгенерированный из структуры базы, и, по-моему, не только он

    Ну а .xsl у тебя на диске хранится не в виде текста, а в виде уже распарсенного дерева?

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

    77. Чебурген , 13.09.2004 16:58
    Joshua5

    цитата: PHP-шаблон — это заготовка

    XSL-шаблон — это заготовка
    Я не понимаю, к чему эта игра в слова пр принципу «Как Ока? — ко-ко-ко!». Но пока меня прикалывает.
    На всякий случай — я могу объяснить, к чему я пишу то или иное высказывание.

    Поясните, пожалуйста, что вы этим хотите сказать.
    Пхп с разметкой — это плохо. XSL с разметкой — хорошо. Почему?
    Не надо приплетать что-то третье, чего в пхп вообще не требуется. Хорошо?

    цитата: ясное дело, никто в XML не хранит бинарники фильмов или музыки

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

    цитата: MS SQL умеет отдавать XML, сгенерированный из структуры базы, и, по-моему, не только он

    Совершенно верно!
    правда, когда мы попробуем сделать приложение хоть капельку интерактивным.
    вот тут ваша связка БД-XML будет иметь весьма бледный вид. SQL запросы составлять тоже кому-то придется.

    78. fixxxer , 13.09.2004 17:16
    Joshua5
    Вот в результате таких «не важна» — здесь не важна, там не важна — и получаются монстры, которые с трудом выдерживают 2 хита в секунду на выделенном сервере. Наблюдал. Как раз MSSQL/XSLT. А скрипт дырявый-дырявый, причем можно сказать, на нем я опробовал новый вид «взлома» — XPath Injection

    Интересно, кстати, почему еще никому не приходила в голову идея компиляции XSLT? (Или я о таком просто не слышал?)

    79. Чебурген , 13.09.2004 21:09
    Давайте-ка, однако, оставим споры и попробуем выжать сухой остаток.

    У XSL есть очевидное преимущество — стандарт и, как следствие — кроссплатформенность. И перспективность.

    Однако, надо четко понимать, что шаблон на XSLT — это не шаблон в чистом виде, а программа.
    С чем боролись — на то и напоролись. Логика в шаблоне, все-таки, есть.
    Не будем говорить, что это плохо.
    Но не будем и замалчивать, что XSL — это вполне себе язык программирования.
    специализированный язык форматирования XML.

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

    80. RedWolf , 14.09.2004 01:31
    fixxxer

    цитата: Интересно, кстати, почему еще никому не приходила в голову идея компиляции XSLT? (Или я о таком просто не слышал?)

    xsltc — старо как мир.

    цитата: шаблон на XSLT — это не шаблон в чистом виде, а программа

    Чушь, это шаблон, который делает из входящего XML трансформированные данные.

    цитата: И вот представля я себе это все — уже и будем отвечать на вопрос — а какой инструмент нам больше всего подходит для решения конкретной задачи.

    Поскольку это все ложно, то мы не будем отвечать на вопрос в данном контексте.

    цитата: правда, когда мы попробуем сделать приложение хоть капельку интерактивным.
    вот тут ваша связка БД-XML будет иметь весьма бледный вид. SQL запросы составлять тоже кому-то придется.

    Ты что хотел сказать-то?

    Я еще раз спрашиваю — ты знаешь предметную область — XSLT?

    p.s. Не смешивай понятие XSLT и XSL.

    цитата: PHP: верстальщик, знакомый с HTML, после трех часов обучения способен использовать шаблоны.
    XSLT: требуется специальное обучение, не менее месяца.

    Это подтасовка фактов XSLT сложности аналогичной изученному за час шаблонному php, может быть изучен тоже за час.
    Только вот уход от простых циклов и условий к чему-то более сложному в php-шаблонах повлечет за собой гемор для программиста и доп. затраты для верстака, а в XSLT это уже все есть. Если вы все думаете, что xslt ограничивается for-each’ем и value-of’ом, то вы жестоко ошибаетесь

    81. Чебурген , 14.09.2004 01:49
    «Шаблон, который не ограничивается for-each’ем и value-of’ом».
    Вспоминается бессмертное «Кто скажет, что это девочка — пусть первый бросит в меня камень».
    82. RedWolf , 14.09.2004 01:53
    Чебурген
    Ну вот, опять флуд
    83. Чебурген , 14.09.2004 02:02
    [. ]

    Поясняю, специально для экспертов:
    Там где тебе удобно, ты рассказываешь, что XSLT — шаблон. А рядом, что этот «шаблон» делает то, что не по плечу языку программирования. Это назывется двойным стандартом и в приличном обществе за это бьют канделябрами. Ну так то в приличном обществе.

    [давайте я уже сам разберусь, как модерировать форум? пункт Правил «обсуждение действий администрации» еще никто не отменял]

    84. RedWolf , 14.09.2004 02:07
    Чебурген

    цитата: Там где тебе удобно, ты рассказываешь, что XSLT — шаблон. А рядом, что этот «шаблон» делает то, что не по плечу языку программирования

    Ссылку в студию.

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

    Так что канделябры прибереги для самоистязания.

    85. Чебурген , 14.09.2004 09:28
    гы гы гы.
    А пхп, типа, погулять вышел 🙂
    Его для полетов в космос придумали, а какие-то чудаки приспособили шаблоны данными наполнять :))))

    Меня УБИВАЕТ ваша упертость!
    Пых специально заточен под то, чтобы генерировать из шаблонов хтмл или любой другой текст — это ужасно и отвратительно.
    ХСЛ специально заточен под то, чтобы генерировать из шаблонов хтмл или любой другой текст — это чудесно и распрекрасно.

    Но это ладно. Самое гениальное — про встроенность в хтмл.
    Пых просто убить надо за такое:

    А бедный верстала просто помрет, не дожив до пенсии.

    А на ХСЛ за это молиться надо:

    И верстак ноги целовать будет за то, что ему вот это рисовать придется.

    С чего начали — к тому и пришли.
    Вместо четкого ответа на конкретный вопрос — чем второй пример принципиально лучше первого — туманные базары про «гемор для программиста», без единого конкретного примера.

    Типичнейшая холивар.
    причем именно со стороны хсл.
    Лично я не говорю, что пых — лучше.
    Я просто спросил чем он отличается [и хуже].
    В ответ я узнал, какой нехороший человек Д.Смирнов и какое молоко у меня на губах не обсохло. В тематическом форуме. Все ништяк, модераторы бдят. Честь экспертов под надежной защитой.

    Работа с Шаблонами PHP

    Нативный шаблонизатор (PHP 7)

    Шаблонизатор предназначен для удобного разделения бизнес логики и логики представления.

    Позволяет подключать файлы шаблонов и передавать в них готовые данные.

    composer require arhone/templater

    Указание нескольких шаблонов

    Допустим у вас есть модуль, у него есть шаблон по умолчанию, но пользователь хочет заменить его своим шаблоном.

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

    Использование общих блоков

    Такие переменные доступны во всех шаблонах.

    Это позволяет наследовать шаблоны и переопределять их блоки.

    PHP View, работа с шаблонами

    Ну, мой вопрос очень прост, но немного сложно принять решение, но в любом случае.. это следующее: у меня есть » mini-framework «, что-то, что нужно для написания одной схемы, помогает мне много, ускорить работу над некоторыми вещами, однако вопрос даже с видом, в некотором смысле, с использованием схемы шаблонов очень прост, а также очень интересен, потому что, когда вам нужно что-то менять related to visualization , шаблон изменяется только, но тогда, со временем до render this template , что является лучшим способом? Я сейчас работаю следующим образом:

    Это не полный код, я строю структуры и просматриваю схему, поэтому я делаю следующее.

    Результат правильный, all working as expected , но мой вопрос: это лучший способ сделать? включая файл и позволяя игре интерпретировать код, написанный в .phtml

    Во многих рамках я видел такие утверждения:

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

    Использование require вместо include_once позволит вам отображать один и тот же шаблон больше раз (например, если вы хотите иметь какую-то композицию шаблонов) и получить ошибку, если файл шаблона не найден (include не дает ошибка в этой ситуации).

    Разработка CMS с нуля. Часть 5.1: Пишем шаблонизатор

    Тут мы видим файл Conversion.php — файл конфигурации шаблона, шаблон главной страницы index_template.tpl , всех остальных страниц page_template.tpl и пять файлов подключаемых шаблонов. Так же присутствую папки img и styles для изображений и стилей соответственно.

    Важный момент: файл конфигурации шаблона должен называться точь-в-точь как сама папка с ним, т.е. если папка называется coNvErsion то файл должен иметь идентичное имя — coNvErsion.php

    • dir — имя папки с шаблонами
    • template — имя используемого шаблона

    Готово? Переходим к тестированию.

    UPD 25.03.17:
    Что-то я косякнул, и забыл выложить список кодов ошибок для нашего обработчика handler.php , исправляю это недоразумение. В классе обработчика необходимо дополнить функцию engineError следующими строками:

    Теперь, при срабатывании функции, будет выводиться нужное сообщение, вместо «Неизвестная ошибка».

    Мастер Йода рекомендует:  Понимание чистого кода в Android
    Добавить комментарий