Личный кабинет
2008-11-03 17:56
Да, мощные готовые программные пакеты, использующие для хранения информации серверные базы данных — это хорошо. Заплатил соответствующую сумму денег — и живи спокойно. Но довольно часто этот вариант обзаведения «движком» сайта не подходит. Во-первых, конечно, стоимость: заплатить даже тысячу долларов для открытия персонального или небольшого контент-проекта могут далеко не все (при этом большинство «движков» стоят гораздо больше 1000$). Во-вторых — гибкость: коммерческие «движки» основываются на закрытых технологиях, то есть самостоятельно поменять что-то в их «внутренностях» никто не позволит, и за самыми простыми дополнениями и исправлениями придется обращаться к разработчику «движка» — естественно, снова платя деньги. В-третьих — требования к системным ресурсам: некоторые проекты, которые должны обновляться «движком», могут размещаться на тарифных планах хостинга, не предусматривающих поддержку PHP и MySQL.
В общем, вы поняли, к чему я клоню :-). В конце 1999 года мне понадобился «движок» для собственных веб-проектов: обновлять существовавший тогда около года E-notes.ru (в то время — Pro.Net.ru) вручную надоело просто смертельно, а впереди маячило открытие при моем участии еще пары сайтов — было очевидно, что при такой организации работы по обновлению веб-серверов мне придется оставить все остальные занятия и посвятить всю свою жизнь ковырянию в коде страниц.
Сторонний «движок» я использовать не мог — мне нужен был инструмент, который я имел бы право ставить на любой сайт по своему усмотрению. Коммерческие же продукты нужно лицензировать для каждого сайта отдельно — и, как я уже говорил — за немалые деньги. В результате я решил написать собственный «движок».
Итак, как в начале любого проекта — постановка задачи.
1. «Движок» должен работать на любом хостинге — и выделенном сервере за $200 в месяц, и на пятидолларовом тарифе виртуального сервера начального уровня. Это исключает применение в качестве хранилища информации базы данных MySQL. В качестве базы данных подойдут текстовые файлы формата «с разделением полей», который, кстати, раньше широко использовался в небольших системах управления базами данных.
2. Делать веб-интерфейс для загрузки материалов на сервер не нужно. Во-первых, слишком много работы (больше, чем собственно программирование процедуры генерации страниц) — нужно предусмотреть многочисленные варианты «защиты от дурака» (то есть обработку неправильных действий пользователя) а также отслеживать ошибки сервера, «железа» на стороне пользователя, сетевых протоколов; во-вторых, этот интерфейс фактически не нужен: обновлять сайты будет человек, хорошо знакомый с FTP и предпочитающий его веб-интерфейсам хотя бы потому, что FTP-клиент позволяет отслеживать процесс загрузки файлов на сервер, тогда как в веб-интерфейсе такое практически невозможно. В то же время, нужно попытаться максимально уменьшить число файлов, переписываемых на сервер при каждом обновлении сайта.
3. Материалы сайта должны храниться в виде, как можно более приближенном к обычному тексту, то есть с минимальным включением тегов HTML: текст материалов должен форматироваться в HTML «движком», а не автором. Чем меньше приходится набирать тегов HTML — тем быстрее будет закончена работа над текстом. Кроме того, это позволит в будущем легко переносить сайт на другие платформы, в том числе и на более «продвинутые» системы управления сайтами.
4. Веб-страницы сайта должны генерироваться непосредственно на диске сервера, а не «на лету», чтобы адреса страниц всегда были понятны пользователям: www.site.ru/razdel/material.html, а не длиннющий URL с кучей параметров. Конечно, таких малопонятных адресов вроде www.site.ru/razdel/page?p=18&id=7362 в некоторых случаях не избежать — например, в форуме и гостевой книге, — однако в этих разделах это не особенно мешает. Главное, чтобы непосредственно материалы сайта (новости, заметки, статьи, обзоры) имели понятные адреса, так как именно на эти страницы будут больше всего ставить ссылок и именно их будут рекомендовать в конференциях и форумах.
Учитывая то, что «движок» должен работать на любых тарифных планах хостинга и он должен обрабатывать текстовые файлы, то для решения поставленной задачи идеально подходит старый добрый Perl. В нем очень удобно реализованы функции разбора текста с разделителями полей (функция split), поиска/замены с помощью регулярных выражений, чтения/записи файлов и, в отличие от PHP, он разрешен в любых тарифах хостинга (кроме разве что тех, на которых запрещен CGI, но тут уж никакой «движок» не будет работать).
Каждый раздел сайта описывается в отдельном текстовом файле, имеющем такой вид:
Каждая строка описывает отдельный материал, параметры описания разделены символом «|». Параметры идут в таком порядке:
1) Идентфикатор записи (он не используется — просто в базах данных так заведено: каждая запись имеет свой уникальный идентификатор);
2) Имя файла, из которого берется текст материала (для «Обзоров» он совпадает с идентификатором);
3) Дата публикации материала;
4) Краткое описание материала (имеется не всегда);
5) URL сайта, которому посвящен материал;
6) Числовой параметр (используется для внутренних целей ;)).
Как видите, редактировать файл с описанием раздела довольно удобно и в обычном текстовом редакторе. Для добавления нового материала нужно всего лишь вставить новую строку в начало файла и ввести значения требуемых параметров, разделяя их символами «|».
Структура файлов для других разделов примерно такая же; кое-где только отличается назначение некоторых параметров.
Внимательный читатель спросит: «А почему среди параметров материала нет параметра «Название»? Спокойствие, сейчас оно появится :-).
Второй параметр в каждой строке с описанием материала — имя файла, из которого берется текст материала. Это — обычный текстовый файл с некоторыми вкраплениями HTML:
Конечно, полностью без тегов HTML здесь не обойдешься: нужно, в конце концов, как-то выделять ссылки, отдельные фрагменты текста (например, тегом ) а также описывать иллюстрации. Однако в остальном текст пишется обычным образом: первая строка — заголовок материала (он затем используется в теге
Отдельная песня — форматирование специальных символов и некоторых знаков препинания. Как известно, использовать для набора текста стандартные клавиатурные символы, например, «дефис» вместо «длинного тире», а вместо пары кавычек «» — знаки дюйма "" — нарушение правил верстки. Поэтому при наборе текста нужно вместо дефиса писать — (код «длинного тире»), а вместо знаков дюйма — коды „ “, обозначающие на левые и правые «лапки» («»). При этом в версии для печати кавычки меняются на «елочки» (« » — («»), так как они более удобны для чтения текста с бумаги, чем «лапки», предназначенные для вывода текста на экран.
Если писать все эти коды прямо при наборе текста, то это, во-первых, очень утомительно, во-вторых — страдает читабельность текста для автора. Для решения этой проблемы применяется такой прием: автор пишет текст как обычно — с дефисами вместо длинного тире и знаками дюйма вместо кавычек, а при генерации веб-страниц «движок» заменяет эти символы на соответствующие коды.
Также при написании материалов может использоваться специальное выделение абзацев, содержащих важные замечания и комментарии, которое может быть достаточно сложным — например, с использованием таблиц и графики. Абзацы, которые нужно выделить таким образом, обрамляются комментариями <--special--><--/special-->, а «движок» заменяет их «нормальными» HTML-тегами позже, также в процессе генерации веб-страниц.
Для добавления нового материала на сайт нужно переписать на сервер следующие файлы:
1) текстовый файл раздела, например, reviews.txt (куда было добавлено описание нового материала);
2) текстовый файл раздела «Новости», с аналогичным добавлением;
3) файл с текстом нового материала;
4) файлы с картинками-иллюстрациями (если они имеются).
Еще раз обращаю внимание — при обновлении содержания и структуры сайта не приходится иметь дело с HTML (за исключением некоторой разметки файла с текстом материалов). Все изменения вносятся только в текстовые файлы, что обеспечивает гораздо меньшие затраты как на редактирование файлов, так и тестирование результата. Ведь при редактировании HTML нужно найти соответствующий фрагмент кода, отредактировать его, тратя время на написание тегов, а затем проверить, не были ли допущены ошибки (например, забыли закрыть тег).
Дизайн сайта зафиксирован в отдельном файле-шаблоне. Он мог бы быть HTML-страницей, но я сделал его как простейший скрипт на Perl. Дело в том, что статическими страницами часто обойтись нельзя — нужно, например, чтобы панель навигации меняла свой вид в зависимости от текущего раздела (скажем, ссылка на этот раздел не подчеркивалась) или чтобы в страницу вставлялся блок новостей.
После того, как файлы записаны на сервер, я открываю в браузере страницу, имеющую адрес вида /cgi-bin/update.cgi. Это — CGI-скрипт на Perl, который осуществляет непосредственно генерацию страниц. Он «пробегается» по файлам разделов, читает информацию из текстовых файлов с материалами, форматирует текст в HTML (как было описано выше), «присобачивает» дизайн, взятый из шаблона, создает на диске сервера в каталогах, соответствующих каждому разделу, HTML-файлы с материалами сайта, а также файлы их «версий для печати». Кроме того, для каждого раздела создается файл index.html со списком материалов, а также, если нужно, файл со списком из 10 последних материалов для вставки в главную страницу. Для раздела «Новости», помимо индексного файла, формируются файлы со списками из четырех последних новостей для главной страницы и трех — для всех внутренних.
Вот, собственно, и все. Этот «движок», написанный за два вечера, хотя и прост, но довольно эффективно обеспечивает работу небольшого контент-проекта, обновляющегося несколько раз в неделю или даже несколько раз в день. При более частом обновлении, когда материалы поступают на сайт несколько раз в час, нужен более мощный «движок» — например, тот же TreeGraph, о котором было рассказано в первой части этой заметки.
Автор: Станислав Жарков
В общем, вы поняли, к чему я клоню :-). В конце 1999 года мне понадобился «движок» для собственных веб-проектов: обновлять существовавший тогда около года E-notes.ru (в то время — Pro.Net.ru) вручную надоело просто смертельно, а впереди маячило открытие при моем участии еще пары сайтов — было очевидно, что при такой организации работы по обновлению веб-серверов мне придется оставить все остальные занятия и посвятить всю свою жизнь ковырянию в коде страниц.
Сторонний «движок» я использовать не мог — мне нужен был инструмент, который я имел бы право ставить на любой сайт по своему усмотрению. Коммерческие же продукты нужно лицензировать для каждого сайта отдельно — и, как я уже говорил — за немалые деньги. В результате я решил написать собственный «движок».
Итак, как в начале любого проекта — постановка задачи.
1. «Движок» должен работать на любом хостинге — и выделенном сервере за $200 в месяц, и на пятидолларовом тарифе виртуального сервера начального уровня. Это исключает применение в качестве хранилища информации базы данных MySQL. В качестве базы данных подойдут текстовые файлы формата «с разделением полей», который, кстати, раньше широко использовался в небольших системах управления базами данных.
2. Делать веб-интерфейс для загрузки материалов на сервер не нужно. Во-первых, слишком много работы (больше, чем собственно программирование процедуры генерации страниц) — нужно предусмотреть многочисленные варианты «защиты от дурака» (то есть обработку неправильных действий пользователя) а также отслеживать ошибки сервера, «железа» на стороне пользователя, сетевых протоколов; во-вторых, этот интерфейс фактически не нужен: обновлять сайты будет человек, хорошо знакомый с FTP и предпочитающий его веб-интерфейсам хотя бы потому, что FTP-клиент позволяет отслеживать процесс загрузки файлов на сервер, тогда как в веб-интерфейсе такое практически невозможно. В то же время, нужно попытаться максимально уменьшить число файлов, переписываемых на сервер при каждом обновлении сайта.
3. Материалы сайта должны храниться в виде, как можно более приближенном к обычному тексту, то есть с минимальным включением тегов HTML: текст материалов должен форматироваться в HTML «движком», а не автором. Чем меньше приходится набирать тегов HTML — тем быстрее будет закончена работа над текстом. Кроме того, это позволит в будущем легко переносить сайт на другие платформы, в том числе и на более «продвинутые» системы управления сайтами.
4. Веб-страницы сайта должны генерироваться непосредственно на диске сервера, а не «на лету», чтобы адреса страниц всегда были понятны пользователям: www.site.ru/razdel/material.html, а не длиннющий URL с кучей параметров. Конечно, таких малопонятных адресов вроде www.site.ru/razdel/page?p=18&id=7362 в некоторых случаях не избежать — например, в форуме и гостевой книге, — однако в этих разделах это не особенно мешает. Главное, чтобы непосредственно материалы сайта (новости, заметки, статьи, обзоры) имели понятные адреса, так как именно на эти страницы будут больше всего ставить ссылок и именно их будут рекомендовать в конференциях и форумах.
Учитывая то, что «движок» должен работать на любых тарифных планах хостинга и он должен обрабатывать текстовые файлы, то для решения поставленной задачи идеально подходит старый добрый Perl. В нем очень удобно реализованы функции разбора текста с разделителями полей (функция split), поиска/замены с помощью регулярных выражений, чтения/записи файлов и, в отличие от PHP, он разрешен в любых тарифах хостинга (кроме разве что тех, на которых запрещен CGI, но тут уж никакой «движок» не будет работать).
Каждый раздел сайта описывается в отдельном текстовом файле, имеющем такой вид:
Каждая строка описывает отдельный материал, параметры описания разделены символом «|». Параметры идут в таком порядке:
1) Идентфикатор записи (он не используется — просто в базах данных так заведено: каждая запись имеет свой уникальный идентификатор);
2) Имя файла, из которого берется текст материала (для «Обзоров» он совпадает с идентификатором);
3) Дата публикации материала;
4) Краткое описание материала (имеется не всегда);
5) URL сайта, которому посвящен материал;
6) Числовой параметр (используется для внутренних целей ;)).
Как видите, редактировать файл с описанием раздела довольно удобно и в обычном текстовом редакторе. Для добавления нового материала нужно всего лишь вставить новую строку в начало файла и ввести значения требуемых параметров, разделяя их символами «|».
Структура файлов для других разделов примерно такая же; кое-где только отличается назначение некоторых параметров.
Внимательный читатель спросит: «А почему среди параметров материала нет параметра «Название»? Спокойствие, сейчас оно появится :-).
Второй параметр в каждой строке с описанием материала — имя файла, из которого берется текст материала. Это — обычный текстовый файл с некоторыми вкраплениями HTML:
Конечно, полностью без тегов HTML здесь не обойдешься: нужно, в конце концов, как-то выделять ссылки, отдельные фрагменты текста (например, тегом ) а также описывать иллюстрации. Однако в остальном текст пишется обычным образом: первая строка — заголовок материала (он затем используется в теге
Отдельная песня — форматирование специальных символов и некоторых знаков препинания. Как известно, использовать для набора текста стандартные клавиатурные символы, например, «дефис» вместо «длинного тире», а вместо пары кавычек «» — знаки дюйма "" — нарушение правил верстки. Поэтому при наборе текста нужно вместо дефиса писать — (код «длинного тире»), а вместо знаков дюйма — коды „ “, обозначающие на левые и правые «лапки» («»). При этом в версии для печати кавычки меняются на «елочки» (« » — («»), так как они более удобны для чтения текста с бумаги, чем «лапки», предназначенные для вывода текста на экран.
Если писать все эти коды прямо при наборе текста, то это, во-первых, очень утомительно, во-вторых — страдает читабельность текста для автора. Для решения этой проблемы применяется такой прием: автор пишет текст как обычно — с дефисами вместо длинного тире и знаками дюйма вместо кавычек, а при генерации веб-страниц «движок» заменяет эти символы на соответствующие коды.
Также при написании материалов может использоваться специальное выделение абзацев, содержащих важные замечания и комментарии, которое может быть достаточно сложным — например, с использованием таблиц и графики. Абзацы, которые нужно выделить таким образом, обрамляются комментариями <--special--><--/special-->, а «движок» заменяет их «нормальными» HTML-тегами позже, также в процессе генерации веб-страниц.
Для добавления нового материала на сайт нужно переписать на сервер следующие файлы:
1) текстовый файл раздела, например, reviews.txt (куда было добавлено описание нового материала);
2) текстовый файл раздела «Новости», с аналогичным добавлением;
3) файл с текстом нового материала;
4) файлы с картинками-иллюстрациями (если они имеются).
Еще раз обращаю внимание — при обновлении содержания и структуры сайта не приходится иметь дело с HTML (за исключением некоторой разметки файла с текстом материалов). Все изменения вносятся только в текстовые файлы, что обеспечивает гораздо меньшие затраты как на редактирование файлов, так и тестирование результата. Ведь при редактировании HTML нужно найти соответствующий фрагмент кода, отредактировать его, тратя время на написание тегов, а затем проверить, не были ли допущены ошибки (например, забыли закрыть тег).
Дизайн сайта зафиксирован в отдельном файле-шаблоне. Он мог бы быть HTML-страницей, но я сделал его как простейший скрипт на Perl. Дело в том, что статическими страницами часто обойтись нельзя — нужно, например, чтобы панель навигации меняла свой вид в зависимости от текущего раздела (скажем, ссылка на этот раздел не подчеркивалась) или чтобы в страницу вставлялся блок новостей.
После того, как файлы записаны на сервер, я открываю в браузере страницу, имеющую адрес вида /cgi-bin/update.cgi. Это — CGI-скрипт на Perl, который осуществляет непосредственно генерацию страниц. Он «пробегается» по файлам разделов, читает информацию из текстовых файлов с материалами, форматирует текст в HTML (как было описано выше), «присобачивает» дизайн, взятый из шаблона, создает на диске сервера в каталогах, соответствующих каждому разделу, HTML-файлы с материалами сайта, а также файлы их «версий для печати». Кроме того, для каждого раздела создается файл index.html со списком материалов, а также, если нужно, файл со списком из 10 последних материалов для вставки в главную страницу. Для раздела «Новости», помимо индексного файла, формируются файлы со списками из четырех последних новостей для главной страницы и трех — для всех внутренних.
Вот, собственно, и все. Этот «движок», написанный за два вечера, хотя и прост, но довольно эффективно обеспечивает работу небольшого контент-проекта, обновляющегося несколько раз в неделю или даже несколько раз в день. При более частом обновлении, когда материалы поступают на сайт несколько раз в час, нужен более мощный «движок» — например, тот же TreeGraph, о котором было рассказано в первой части этой заметки.
Автор: Станислав Жарков
- Практика двигателей. Часть I
- Теория двигателей
- Orange color: теория и практика
- Orange color: теория и практика
- Как раскрутить форум. Часть 2.
- Как раскрутить форум. Часть 1.
- Продвижение сайта. Часть 2. Реклама
- Как правильно вести обмен ссылками. Часть 1.
- Как поисковые боты индексят сайты часть 2
- Четыре правила профессионального дизайна. Часть II
- Четыре правила профессионального дизайна. Часть III
- Как найти качественный контент для сайта - часть 1
- Четыре правила профессионального дизайна. Часть I
- Продвижение сайта. Часть 1. Постановка задачи
- Как правильно вести обмен ссылками. Часть 2.
- Четыре правила профессионального дизайна. Часть IV, последняя
- Твой сайт. Часть 1. Обзор Макса Трусцова
- Защита информации в интернете. Часть 1. Шифрование с открытым ключом
- Защита информации в интернете. Часть 3. Защищенные электронные транзакции (SET)
- Цветовая гамма твоего сайта. Часть 3. Обзор Макса Трусцова.
- Регистрация доменных имен своими руками. Часть 1: немного теории.
- Регистрация доменных имен своими руками. Часть 2: корпоративный домен в зоне "ru".
- Фреймы в HTML документах (2008-11-04)
- 10 признаков дурного тона в web-дизайне (2008-11-04)
- 800 и 1024. Пиксели или проценты? (2008-11-04)
- Как работает формат JPEG? (2008-11-04)
- О композиции в дизайне (2008-11-04)
- Психология в дизайне (2008-11-04)
- Шрифты (2008-11-04)
- Как сделать качественный веб-сайт (2008-11-04)
- Какой вид дизайна выбрать? (2008-11-04)
- Выпадающие меню с помощью CSS (2008-11-04)
- Создание веб-страниц для различных разрешений м... (2008-11-04)
- Веб-дизайн и анимация (2008-11-04)
- Немного об index.html (2008-11-04)
- Психология дизайна (2008-11-04)
- Что такое стильный web-сайт? (2008-11-04)
- Web дизайн :: Что такое хорошо и что такое плохо (2008-11-04)
- Лево, Право или Центр? (2008-11-04)
- Оптимизация изображений в формате JPG (2008-11-04)
- Альтернативные редакторы Flash (2008-11-04)
- Что же такое web-дизайн? (2008-11-04)
- Сайты для тинейджеров: правила дизайна (2008-11-04)
- Маленькие проблемы больших таблиц - HTML (2008-11-04)
- Особенности web-дизайна (2008-11-04)
- Подсказки и советы для веб-мастеров - Топ 100+ (2008-11-04)
- Единицы измерения CSS (2008-11-04)
- Состав изображений (2008-11-04)
- FLASH - ЧТО МОЖЕТ БЫТЬ ХУЖЕ? (2008-11-04)
- FAQ по графическим форматам файлов (2008-11-04)
- ПО необходимое для web-дизайнера (2008-11-04)
- Должностная инструкция веб-мастера (2008-11-04)
- Стиль Вашего сайта (2008-11-04)
- Стиль Вашего сайта (2008-11-04)
- Orange color: теория и практика (2008-11-04)
- Расположение баннера (2008-11-04)
- Советы "чайникам" (2008-11-04)
- С чего начать (2008-11-04)
- С чего начать (2008-11-04)
- Организация - вот ключ к успеху (2008-11-04)
- Подбор шрифта и верстка текста (2008-11-04)
- Обзор Gif-аниматоров (2008-11-04)
- Каскадные таблицы стилей (преимущества и недост... (2008-11-04)
- Фирменный шрифт (2008-11-04)
- Главные ошибки в web-дизайне (2008-11-04)
- CSS - Для чего нужны таблицы стилей? (2008-11-04)
- Таблицы или слои, что лучше? (2008-11-04)
- О скриптах (2008-11-04)
- Изучаем HTML (2008-11-04)
- Применение нескольких классов к элементу в CSS (2008-11-04)
- Создание сайта с помошью фреймов (2008-11-04)
- Основы работы со слоями в CSS (2008-11-04)
Быстрый переход