А запросы типа ALTER TABLE... уже не модно? Как я понимаю, поля создаются раз и навсегда?
Смысла добавлять новые поля нет. Дополнительные поля на то и дополнительные, чтоб хранить в них дополнительную информацию. Заведомо известно, что они не будут участвовать в запросах. У меня порядка десятка типов документов, для каждого из которых есть как минимум несколько дополнительных полей. Используй я ALTER пришлось бы раздуть таблицу до неприличных размеров %)
Например логика вывода данных в шаблоне. Зачем тогда шаблон нужен? Почему бы не отказаться от ненужной прокладки в виде движка, и не использовать возможность PHP чередовать HTML и PHP код?
Хотя бы потому, что она нужна. Ведь приходится решать задачи связанные не только с выводом информации, но и с добавлением, удалением, обновлением, причем как из админской части, так и из пользовательской. И здесь мой подход не особо отличается от общепринятого. Класс CDE (Create/Delete/Edit), механизм регистрации обработчиков, механизм проверки параметров, автоматизация обработки и вывода ошибок. А вот от автоматической генерации форм я отказался, у меня на то свои причины.
Почему не просто PHP в связке с HTML? Во-первых, потому что моя система на перле, а он без масона с HTML не очень ладит. Во-вторых, потому что несколько человек моих верстальщиков не знают языков и знать не хотят. Я описываю метод, параметры, которые в него могут быть переданы и замены, которые могут быть использованы в шаблонах. Передаешь в качестве параметры любой шаблон и получаешь то, что нужно.
Кстати, если присмотреться, мое решение – это просто способ избавиться от foreach. Например, используя смарти задача вывода списка пользователей решается так (проверку на пустой результат упускаем):
Код:
<table><tr><td>Login</td><td>Email</td></tr>
{foreach item=user from=$users}
<tr><td>{user.login}</td><td>{user.email}</td></tr>
<{/foreach}>
</table>
Удобно. Но! Если я вывожу список пользователей в двух разных местах и мне захотелось перевести логин в апперкейз, мне придется править два шаблона. Проблема решаемая. А если мне захотелось вывести выше общего списка пользователей список последних трех зарегистрированных. Лезть в код? Мой верстальщик решает задачу так:
Код:
{# User::List("user_list"), undef, { OrderBy =>
[["user_createdate", "desc"]], Limit => [0, 3] } #}
{# User::List("user_list") #}
Шаблон (тройной) user_list:
Код:
<table><tr><td>Login</td><td>Email</td></tr>
---
<tr><td>{user.login}</td><td>{user.email}</td></tr>
---
</table>
Пример простой. А вот в музыкальной энциклопедии верстальщик при помощи Artist::List и разных шаблонов строил десятки различных списков без моего участия. Разве не удобно?
-~{}~ 19.11.04 12:44:
Упомянул музыкальную энциклопедию и вспомнилась задачка. Нужно было вывести список 5 исполнителей и для каждого исполнителя список его альбомов. Не долго думая и эту задачу решили шаблонами %)
Шаблон главной страницы:
{# Artist::List("artist_list", undef, Limit => [0,5] ) #}
Шаблон artist_list:
---
Исполнитель: <b>{# artist.title #}</b>
{# Album::List("album_list", { artist_id => {# artist_id #} }) #}
---
Шаблон album_list:
<ul>
---
{# album.title #}
---
</ul>
На выходе имеем:
Blutengel
*Angel Dust
*Child Of Glass
*Demon Kiss
Camouflage
*Sensor
И т.д.
Конечно, с точки зрения производительности не лучшее решение и если бы мне пришло выводить список не 5, а 500 исполнителей оно бы не подошло. Но есть и другие задачи, где описанная техника очень выручает.