Программа формирования сайта путем сборки из иерархических каталогов с файлами индексов
Основное предназначение программы - создавать индексные файлы сайта,
собирая их из шаблонов, формируя главное, левое и правое меню, путём
преобразования иерархической структуры каталогов с именами, начинающихся
с порядковыми номерами. Программа автоматически создаёт также страницу
"карта сайта" и может создавать страницы без помещения в навигацию,
например страница ошибки 404.
Сам сайт формируется в предыдущем каталоге ".."
Максимальная вложеность меню - 4, на пятом уровне могут быть конечные
странички с контентом. Главная страница '/' уровнем меню не считается,
но можно указать какой пункт меню выбрать как текущий для выделения
у главной страницы. Левое меню (далее - аккордеон) содержит выпадающие
пункты главного меню, каждый пункт левого меню может содержать выпадающие
пункты для индексов первого и второго уровня вложенности и как основные
пункты для индексов 3-го уровня. Четывертый уровень формируется как заголовки-ссылки
в основном контексте.
Программа создаёт временные файлы индекса, сравнивает результат с имеющимися
файлам индекса и переименовывает временный файл индекса только при различии,
тем самым не меняя дату файла, если результирующий индекс идентичен
предыдущему вызову. Для формирования файла контента можно также использовать
создаваемый скрипт с именем d_программа в конкрентном каталоге.
Имена каталогов в текущем рабочем каталоге (далее - каталоги содержимого),
должны начинаться с номеров и символа _ для задания порядка следования.
Например 00_index Подкаталоги без префикса "номер_" будут
проигнорированы. В каталоге сайта ".." будут создаваться каталоги без номеров.
Программа сканирует рабочие подкаталоги, распознаёт содержимое файлов
с именем var, где должны быть прописаны значения переменных для формирования
навигации, создаёт файлы навигации (для ускоренного обновления только
индексов по изменению только содержимого, см. описание ключа -c),
создаёт файл для просмотра работы программы, где можно посмотреть
результирующие созданные автоматически ссылки, (этот файл также используется
для ускоренного обновления только индексов по изменению только содержимого
и для удаления переименнованных или удаленных каталогов после предыдущего
вызова), создаёт файл для просмотра, где не найден контент
и будет использован контент по умолчанию. В зависимости от типа ссылок будет
созданы либо файлы в корне с именем подкаталога, либо подкаталоги на сайте
с файлами индексов. Расширение имени файла индекса берётся из расширения файла
содержимого в рабочем подкаталоге.
Самый первый рабочий каталог, например 00_index, имеет специальное значение.
Все подкаталоги данного файла не попадают в основное меню, аккордеон для
них будет сформирован свой, в карте сайта эти страницы будут выше главного
меню. Результирующие файлы будут помещены в корень сайта .. с именами
подкаталогов без номеров с расширением у файла контента в подкаталогах.
Для формирования специальных страничек с типами "карта сайта" и "ошибка 404"
смотрите описание значений переменной TYPE в файлах var.
Файлы индексов формируются из 18 частей. См. описание задания шаблонов.
Шаблоны будут взяты или из текущего каталога или из каталога программы,
если в текущем каталоге шаблон не помещен. Перед сборкой файла индекса при наличии
в каталоге скрипта с именем, указанным в переменной SCRIPT в файле var
он будет вызван из каталога программы с аргументами: имя файла контента
и имя выходного файла контента с путями от каталога программы. Для
копирования дополнительных файлов с подкаталогами необходимо также
использовать вызов скрипта, так как нижеприведённые встроенные скрипты
предназначены для копирования только файлов.
Для копирования дополнительных файлов из каталога контента в текущий каталог
индекса, в программу встроено две специальных переменных: COPY='mask'
и COPY2='file_from file_to', где mask - маска либо список файлов, которые будут
помещены в выходной каталог, а любое количество пар файлов для COPY2 копируются
с изменением имени из текущего каталога в выходной каталог.
Данные встроенные скрипты анализируют изменение даты файлов,
и копируют с сохранением даты изменения в выходной каталог только у которых
большая дата модификации. Типичное применение COPY2:
необходимо поместить из каталога 00_index в корневой каталог файл my.css,
но этот файл попадает под маску style_add="*.css", следовательно необходимо его
положить под другим именем, например, как 00_index/my_css и воспользоваться
встроенным скриптом COPY2, поместив строку COPY2='my_css my.css' в файл
00_index/var. Данный пример приведен в дистрибутиве программы. Маски и
первое имя в парах может содержать подкаталоги без префиска-номера, например
COPY='maps/*.jpg', при этом маска должна раскрываться в список обычных файлов,
копирование которых будет произведено в выходной каталог без подкаталогов.
Подкаталог может быть пропущен, например для наполнения контентов по годам
для уменьшения количества каталогов в одном подкаталоге, см. ниже описание
значений переменной TYPE в файлах var. На сайте будут как обычно созданы
все подкаталоги, каталог с TIPE=skip не будет помещён в навигационные меню,
и будет содержать копию индексного файла с предыдущего уровня. Стоит помнить,
что в имени подкаталога префикс "номер_" будет пропущен, поэтому имена годов
необходимо создавать как-то так: 2015_2015.
Для обновления индекса только из одного подкаталога, где вы произвели
изменения контента или скрипта для формирования контента, можно вызвать
скрипт из этого подкаталога с именем d_программа. Данный скрипт создаётся
в подкаталогах при вызове программы без ключей.
Опции использования программы
make_menu.sh [-D [-m]]
или
make_menu.sh -c [-1] [-m]|[-C]
или
make_menu.sh -C [-D]
- -c обновить индексные файлы если изменены контентные файлы. Структура сайта
при вызове с этим ключём не изменится. Если было изменение файлов var,
созданы либо удалены подкаталоги, необходимо вызывать программу
без ключей. Также производится вызов скрипта для формирования контента.
- -1 прекратить работу после обновления одного из индексных файлов. Данный
ключ требует вызов с ключём -c
- -m пересоздание карты сайта sitemap.html - карты сайта, которая также
создастся при вызове без ключей
- -C очистить каталоги от сформированных файлов. После чего вызов с любым
ключём невозможен, требуется полная генерация путем вызова без ключей.
Содержимое сайта при вызове с ключём -C не изменится.
Все файлы, необходимые для генерации останутся.
- -D очистка сайта. Будут удалены все сформированные программой каталоги
и индексы в корне сайта. Сожержимое рабочих каталогов не изменится.
ОСТОРОЖНО! Будут удалены все подкаталоги рекурсивно, имена первого уровня
которых формируются программой, помещённые Вами вручную файлы и каталоги
в таких подкаталогах изчезнут! Сайт станет нерабочим!
- Ключ -i уровень предназначен для вызова из подкаталога контента, скрипт вызова
формируется автоматически.
Обязательные рабочие переменные в корневом var
- out выходной файл для просмотра работы скрипта.
Используется при вызове программы с опциями
и для удаления переименнованных или удаленных
каталогов после предыдущего вызова;
- out_dirs_default_content выходной файл для просмотра работы скрипта
по поиску каталогов без файла контента, где был
включен файл контента по умолчанию;
Переменные, значения которых по умолчанию приведены в файле var дистрибутива
программы в виде коментариев
- ROOT имя каталога от корня сайта для создания ссылок,
эта переменная добавляется только как префикс для ссылок, формируемых программой
- findex имя результирующего файла. Указывайте без расширения, оно
берется у файла, найденного по маске в переменной content;
- fmenus имя файла для формирования главного меню;
- ftitles имя файла для формирования содержимого заголовка окна браузера;
- faccordions имя файла для формирования содержимого аккордеона навигации;
- fnav имя файла для формирования содержимого навигации в основном контенте;
- nav_sep содержимое для разделения ссылок при формировании навигации
в основном контенте;
- fnav4 имя файла для вставки меню 4-го уровня;
- ext_link_add текст, который будет добавлен к внешним ссылкам;
- prev_index_name имя файла в котором записывается имя файла индекса,
сгенерированного при предыдущем вызове, используется для
удаления если имя изменено в текущем вызове или при вызове
с ключём -D.
Переменные в корневом var распространяется на все последующие уровни
Файлы шаблонов для формирования страницы
Сборка осуществляется либо из файлов в каталоге контента
либо из каталога вызова программы. Переменные имён шаблонов могут содержать
glob маску:
- top_before_title начало каждой страницы до вставки заголовка окна браузера;
- style_add вставка специальных стилей для конкретной страницы;
- top_before_menu продолжение каждой страницы до вставки главного меню;
- top_before_accordion продолжение каждой страницы до вставки аккордеона;
- top_before_nav продолжение каждой страницы до вставки навигации;
- top_before_h продолжение каждой страницы до вставки заголовка основного контента;
- top_after_h продолжение каждой страницы после вставки заголовка основного контента;
- top_before_nav4 вставка типа списка со стилем до меню четвёртого уровня;
- top_after_nav4 завершение списка меню четвёртого уровня;
- top_before_content продолжение каждой страницы до вставки основного контента;
- content вставка этого контента, расширение (после последней точки) этого файла устанавливается и у файла индекса;
- top_after_content продолжение каждой страницы до вставки завершающего содержимого;
- footer завершающее содержимое.
Остальные переменные в корневом var глобальны для каталогов содержимого.
Переменные в файлах var в каталогах содержимого:
- MENU Содержимое меню/подменю. Обязательная переменная в каждом каталоге;.
- HR Текст заголовка основного контента. По умолчанию равно $MENU
Данный текст также используется для формирования меню в основном контенте;.
- TITLE Заголовок в статусной строке браузера. По умолчанию равно $HR;.
- PREV_HR Текст заголовка основного контента предыдущего уровня меню.
Для меню первого уровня перемеменная игнорируется (равно MENU);.
- LINK Указание особенной ссылки. По умолчанию формируется
автоматически. Если эта паременная установлена для головной страницей сайта
00_index, то и при формировании меню для index используется
class=current для пункта на эту ссылку.
Ссылки на текущий сайт должны начинаться с '/', каталоги
без парядковых номеров и не завершаться '/'. Пример: LINK=/novosti .
- TYPE=ext указание, что ссылка вне сайта. В таких каталогах
не формируются файлы заголовка, меню и навигации.
Ссылка будет с аттрибутом target=_blank, а к тексту
ссылки будет добавлено содержимое переменной $ext_link_add
<a target=_blank href=$LINK>$MENU$ext_link_add</a>
- TYPE=root указание, что ссылку не помещать в главное меню.
Данный тип добавляется автоматически, если не указан другой
для подкаталогов в головном идексе 00_index/*dirs*
Например, для страниц со ссылками из подвала.
Выходной файл формируется в корне сайта из имени каталога
без цифр с расширением у файла контента.
Ссылку можно получить из выходного файла $out
- TYPE=nonav указание, что ссылку не помещать в навигацию.
Например для страницы 404 с текстом о несуществующим URL.
Для помещения этой странички в корень сайта, создайте ее
в подкаталоге индекса, например 00_index/99_error
Ссылку можно получить из выходного файла $out
- TYPE=skip указание, что этот каталог надо пропустить,
например, для наполнения контентов по годам для уменьшения количества
каталогов в одном. Содержимое $MENU может быть любым.
- TYPE=sitemap указание, что этот специальный рабочий каталог
для автоматического формирования контента с картой сайта в файл $content.html.
Программа допускает такой тип подкаталога только в первом каталоге головного
индекса
- SCRIPT="name" указание, что необходимо вызвать этот скрипт
из каталога содержимого перед началом сборки файла индекса
- COPY='masks' встроенный скрипт по копированию дополнительных
файлов без изменения имён в выходной каталог
- COPY2='file_from file_to_pair' встроенный скрипт по копированию
дополнительных файлов с изменением имён в выходной каталог.
Установка других переменных в файлах var каталогах содержимого запрещены.
Предопределенные class и id:
- <ul id=sitemap> вставляется в формируемый html-файл карты сайта
- <a class=current ...> для ссылок на текущий раздел в главном меню.
Текущая страница - ссылка <a class=current href="#">
- <li class='right'> для последнего пункта главного меню
- <li class=current>Пункт подменю</li> содержимое выпадающего главного
подменю при текущей странице (ссылка не формируется)
- <li class=current>Пункт меню 4-го уровня</li> см выше, но для текущей
страницы 4-го уровня
- <ul class="left_menu2"> левое подменю (эмуляция аккордеона)
- <li class="left_menu_item"><a ...>ссылка</a></li> левое
меню (эмуляция аккордеона)
- <li class='left_menu_item current'>пункт аккордеона</li> тоже
при текущей страницы