Сервер - статьи

       

УСТРОЙСТВО страниц


Весь сайт совершенно динамический - генерится все, кроме картинок. Генерится даже . Этого можно было бы избежать, сделав CSS-файл статическим, или настроив параметры кеширования этого объекта (main.css - это экземпляр класса ZStyleSheet), тем более что этот CSS вызывается во всех страницах... но пока я не вижу нужды это делать.

Каждая HTML-страница на сайте тоже генерится, и генерится она из множества объектов.

Каждая страница, очевидно, имеет стандартную обвязку (оформление) и уникальное содержание. Поэтому каждая страница сайта - это DTML Method стандартного устройства: <dtml-var standard_html_header> ...здесь содержание страницы... <dtml-var standard_html_footer>

Это, разумеется, не единственный способ создания страниц, но Зоп в каком-то смысле навязывает именно его. А именно в том смысле, что когда верстальщик создает новый DTML Method или Document, standard_html_header и footer вставляются в текст автоматически. Их можно убрать, конечно.

Некоторые разработчики находят это неправильным. По той причине, что если верстальщику надо изменить оформление, ему приходится редактировать header и footer отдельно, что неудобно. Для таких капризных разработчиков можно придумать следующий способ: в корне сайта ставится Метод index_html с фиксированным содержанием, у которого оформление и содержание "вывернуты наизнанку": <HTML>... и прочее оформление... <dtml-var folder_real_content> ...и подвал...</HTML>

и во всех папках создаются объекты с именем folder_real_content, хранящие только содержание. При обращении к такой папке будет произведено заимствование index_html (acquisition!), который заимствуется из корня, и сам заимствует folder_real_content из текущей папки.

Лично мне такой подход кажется неправильным. Во-первых, сама отсылка на верстальщика мало помогает. Все равно оформление создается разработчиком из немалого числа объектов, и уменьшение этого числа на 1 мало чему помогает. Во-вторых, я теперь не могу создать страницу phd2.html - каждая страница обязана быть папкой. Неоправданное ограничение.

Поэтому на сайте zope.net.ru все устроено именно так, как навязывает Zope. standard_html_header - с чего начинается каждая страница сайта

Для работы многих объектов на сайте нужны различные переменные - тем или иным способом разобранный текущий URL. Zope предоставляет большую часть необходимой информации, но некоторые переменные для упрощения работы я вычисляю дополнительно. Поскольку они мне нужны на каждой странице, я их вычисляю в standard_html_header - в DTML Методе, который вызывается из каждой страницы. Полный код можно посмотреть:

Здесь я вычисляю URL корня, отделяю его от path, и при необходимости (установлена переменная text-version) добавляю строку "/text"; это все для текстовой версии, подробности ниже. Плюс в URLn запоминаю первый объект в path после корня - это для горизонтальной навигации и тому подобного.

Содержание раздела