Сумрачный блог Кирилла Панфилова

2010: I II III IV V VI VII VIII IX X XI XII

2009: I II III IV V VI VII VIII IX X XI XII

2008: I II III IV V VI VII VIII IX X XI XII

Записи августа 2008

Волшебные меню

Вчера получил удовольствие от своей же системы (FairWork, конечно, кто о чём, а лысый о фреймворке). За весь день работы с ним пришлось написать только одну функцию, так как всё остальное уже было предусмотрено в системе. В итоге перевод сайта на фреймворк свёлся к вёрстке, подготовке моделей (типичная модель для большинства страниц занимает три строчки, которые получают данные из реестров и шаблонов кода), редактированию реестров и т.п.

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

Появилось понятие т. наз. контекстного меню (омонимия: по правой кнопке мыши ничего не всплывает), то есть меню, различного в зависимости от раздела. Фреймворк определяет, что за раздел, ищет подходящее меню в особой директории, а если не находит, подгружает меню, указанное как меню по умолчанию. Внёс изменения в основную ветку кода (сейчас на фреймворке строятся одновременно 2 крупных сайта, поэтому если обновляю системные функции, просто копирую нужные файлы с сервера на сервер без изменений). Сегодня, правда, пришли мысли, как сделать код ещё более гибким.

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

Мне

Юля (14:09:34 20/08/2008)

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



Приятно-то как...

MagicMenu

То же самое, что bread crumbs, но в стиле FairWork.

Путь к странице берётся как входная строка, итеративно от неё отрезается последняя часть, потом trimSlashes, берётся captio файла по этому пути, возвращается как ссылка. Путь ссылок заносится в массив. В функцию передаётся разделитель между ссылками и параметр, отвечающий за то, будет ли выводиться указатель на текущую страницу:

1 (по умолчанию) не будет

2 будет как не ссылка

3 будет как ссылка

Крик души

Как же меня достало то, что она вмешивается в каждый разговор, реальный или онлайновый, высказывает свою точку зрения там, где она совсем некомпетентна, считает себя невероятно умной, что она абсолютно неженственна, ленива во многих вопросах, настырна... И она мне раньше могла нравиться (лет 5 или 6 назад) — или я был другой, или она? Какого фига жизнь опять сводит с теми, с кем совсем не хочешь?

Модели в FairWork

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

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

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

1. Вызовы функций. Например, одна строка определяет загрузку окна для ввода письма и функционал отправки почты. Другой тэг-функция отвечает за построение MagicMenu, которое прокладывает по определённой схеме путь от текущей страницы до главной.

2. Вставка деталей. Каждой детали (вёрстка этих фрагментов кода есть в отдельной модели) соответствует функция. Например, деталь, определяющая вёрстку меню, итеративно загружается для каждого пункта с помощью вызова функции, похожей по названию на тэг детали.

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

4. Вставка настроенных компонентов. Обычно это данные, которые при необходимости легко можно поменять через редактор реестра настроек: подзаголовок сайта, рабочий адрес электронной почты, основной язык интерфейса и т.п. В месте вставки настроечного тэга происходит его замена на значение этой настройки.

5. Вставка языковых терминов. Особый тэг заменяется на фразу из языка, указанного в настройках или запрошенных пользователем, если фраза есть в языковом файле. Если нет, берётся фраза из языка по умолчанию. Если этой фразы вообще нет в языковых файлах, остаётся тэг без изменений (как и в случаях выше).

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

Кокосовая парфюмерия

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

Вероятно, я бы терпимо относился, если бы не личностная ассоциация девятилетней давности.

Будильники

Не знаю, чего так все взъелись на будильники. Я вот поставил у себя на телефон симпатичную музыку на будильник, не резкую, а мелодичную, и каждое утро с удовольствием под неё просыпаюсь, особо даже выключать не хочется.

Внутренние процессы FairWork

Как добавить раздел на сайт на фреймворке Fairwork.


Если это обычная страница, то в рабочей директории кладём в папку folio (в ней лежат все простые текстовые страницы) файл, разбитый на 4 тэга: заголовок, текст, черновики и установки. Примеры в рабочей версии. Страницу нужно добавить в меню через веб-интерфейс. Опционально используется визуальный редактор для форматирования текста.


Если требуется добавление программной логики или обращения к базам данных*, то добавляются понятия модели, модуля и связанных функций.

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

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

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

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


Резюме. В общем случае, если требуется программная логика, то выстраивается следующая цепочка: файл страницы (или его псевдоним) — модель — библиотека функций. Связывание с моделью и включение библиотек происходит через реестры.

Осуществлено полное разделение на 4 компонента: содержимое (страницы, базы данных), вёрстка (модели), дизайн (CSS и графика), программная логика (библиотеки функций, ядро системы).


_________


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


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

Fairwork

В основном я закончил свой фреймворк.

Какие в нём особенности:


1. Полное разделение (а) содержания, (б) дизайна, (в) вёрстки и (г) программной логики. Содержание может храниться в текстовых файлах (особый формат с 4 тэгами), в БД разного типа (в т.ч. вида XML), в реестрах (редко).


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


3. Встроенная система администрирования. Обработкам сложных моделей назначены модули. Можно дописывать модули самостоятельно, можно исключать их из реестра, можно каждому пользователю назначать права на редактирование любого количества модулей (от 0 до всех). Кроме работы с моделями, есть управление пользователями, редактирование страниц и редактирование реестров. Всё, что угодно, можно поправить через реестры: настройки, состав пользователей, состав меню и т.п.


4. Интернационализация. Есть понятие языка по умолчанию, когда интерфейс и язык страниц определён изначально, и есть опциональные языки. По инициализации настройки (cookie или напрямую) активируется выбранный язык, если файл со словарём есть в системе. Если файла нет или в словаре нет термина, то термин берётся из словаря по умолчанию.

FairWork

Изображение

Фреймворк FairWork подходит к завершению. Мои новые пять сайтов, которые ожидаются в ближайшее время, будут построены на нём.

Сейчас импортирую блог iLyte в FairWork, всё происходит без особых моральных потерь с моей стороны.

Тагальский язык

С тагальским языком я познакомился лет в 16 в городской библиотеке в сборнике статей по лингвистической типологии.

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