Дизайн в скриптах

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

Вы когда-нибудь ставили себя по ту сторону баррикад, на место пользователя? Если нет, то советую это делать почаще. А если ставили, то должны относительно представлять как реагирует средне статистический пользователь при установке и первом знакомстве с вашим детищем. Сначала юзверь, ясное дело, смотрит на внешний вид скрипта - как ни крути, а встречают по одёжке, а это уже говорит о том, что внешний вид - далеко не последнее дело и заботиться о нём надо бережно и с должным вниманием. Далее, хитрый пользователь пытается перекроить дизайн и структуру скрипта под свои нужды и вкусы. И уже потом наступает очередь разбора самих функций скрипта и оценка "того гениального решения на 184й сроке".

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

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

Итак, внешний вид понравился, ещё какое-то время скрипт проживёт на винте пользователя (или на винте его хостера). Теперь все силы нашего юзера будут брошены на переделку скрипта "под себя" и для этого он должен быть обеспечен соответствующими возможностями и инструментами. А это уже наша забота. Ясен перец, что если ваш скрипт состоит из одного файла и весь дизайн слеплен из хаотичных echo, разбросанных по всему скрипту - благоразумный и экономящий свои силы и время пользователь повторит процедуру, описанную в третьем параграфе. Мухи и котлеты должны существовать в разных измерениях - это факт. Так что желательно позаботиться об отделении изменяемого пользователем дизайна от самого кода скрипта.

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

Файл index.php :

<?php

$title="My home page";
$data=file("data.txt");
$data=implode("",$data);
$bgcolor="#ffffff";

include("template.html");

?>

Файл template.html :

<?php
echo <<<HTML

<html>
<header>
<title>$title</title>
</header>
<body gbcolor=$bgcolor>
$data
</body>
</html>

HTML;
?>

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

В заключении, хочу сказать пару слов о шаблонной этике. Важно помнить, что удобство пользователя - вещь немаловажная. Желательно называть переменный, используемые в шаблонах, понятными именами. Есть разница между $a[12] и $main_menu, не так ли? Опять же, не будет лишним в файле помощи составить список всех используемых переменных и из значений.