МойнМойн использует систему подключаемых тем, которая позволяет гибко настраивать внешний вид и поведение без изменения основного кода сервера. Пользователь может выбирать используемую тему из списка предустановленных1 в своих настройках (это может быть недоступно в случае, если администратор принудительно указал определённую тему и запретил возможность её смены).
Установка тем
Различные дополнительные темы доступны в репозитории тем, откуда их можно скачать в виде архивов. Перед скачиванием необходимо удостовериться, что тема совместима с используемой версией МойнМойн.
Обычно для установки темы недостаточно просто скопировать содержимое архива в каталог themes. Для установки настоятельно рекомендуется следовать инструкциям, указанным автором темы. Обычно, затрагиваются два места:
- Каталог, где хранятся статические файлы темы.
Сюда следует поместить каталог с файлами темы (содержащий подкаталоги css/, img/ и, возможно, некоторые другие).
Каталог data/plugin/theme, где хранятся исполняемые части тем.
Сюда следует поместить скрипт (он имеет то же имя, что и тема и расширение «.py»).
После выполнения указанных действий тема должна быть доступна для использования. Возможно, для того, чтобы она появилась в списке доступных тем потребуется очистить кэш или повторно войти в вики. Для опций конфигурации см. КакНастраивать.
Изменение тем
Можно свободно изменять предустановленные темы, но лучше использовать копию. Для её создания необходимо выполнить следующее (здесь в качестве примера используется тема modern):
Создать копию каталога modern в каталоге со статическим содержимым и назвать её, например, mytheme.
Скопировать скрипт темы MoinMoin/theme/modern.py в data/plugins/theme/mytheme.py.
Отредактировать файл mytheme.py, как минимум, сменив значение переменной name (с name = "modern" на name = "mytheme").
После проделанных действий тема должна стать доступной. Если это не так (например, если используется постоянно запущенный процесс МойнМойн), необходимо перезапустить HTTP-сервер.
- После этого можно начать редактировать файлы в каталоге статического содержимого темы.
Местонахождение каталога со статическими файлами зависит от настроек и установки вики:
Если адресный префикс, указанный в параметре url_prefix_static, обрабатывается HTTP-сервером, то местонахождение можно узнать из его конфигурации (обычно, он отображён в каталог в файловой системе с помощью директивы Alias или аналогичной)
Если же префикс, указанный в параметре url_prefix_static, обрабатывается МойнМойн с использованием встроенного сервера статических файлов, то необходимо проверить место, в коде, где создаётся WSGI-сервер:
«shared=True» означает, что используются статические файлы из MoinMoin/web/static/htdocs/.
«shared=False» означает, что используются статические файлы из специально указанного каталога.
Лучший способ изменить визуальное оформление вики — унаследоваться от одной из тем МойнМойн по умолчанию и изменить только необходимые сущности. Это поможет избежать работы по копированию новых стилей, добавленных во время разработки в изменённые таблицы стилей. Чтобы реализовать эту схему, достаточно использовать директиву CSS @import следующим образом:
@import url("/moin_static190/modern/css/common.css"); h1,h2,h3,h4,h5 { background-color: #88CCFF; }
В первой строке происходит импортирование общих для разных способов представления (для экрана, для печати...) классов по умолчанию, распространяемых в составе дистрибутива МойнМойн. Возможно, необходимо поменять URL в соответствии с конфигурацией вики и/или версией МойнМойн.
В последующих строках происходит непосредственно задание собственных стилей, конкретно изменение цвета фона заголовков. Вот и всё.
За дополнительной информацией можно обратиться в вики css-discuss.
Красивая идея, позволяющая сделать CSS редактируемыми на вики, показана на вики esw.w3.org.
Параметры конфигурации вики
Параметр |
Значение по умолчанию |
Описание |
page_footer1 |
"" |
HTML-разметка, которую необходимо поместить перед стандартным подвалом страницы. |
page_footer2 |
"" |
HTML-разметка, которую необходимо поместить после стандартного подвала страницы. |
page_header1 |
"" |
HTML-разметка, которую необходимо поместить перед стандартной шапкой страницы, но после открывающего тега <body>. |
page_header2 |
"" |
HTML-разметка, которую необходимо поместить после стандартной шапки страницы (и открывающего тега <body>). |
stylesheets |
[(media, csshref), ...] |
Список кортежей вида (способ показа, ссылка CSS) для вставки после CSS темы, но перед пользовательской. |
html_head |
"" |
Дополнительные теги в <head> для всех страниц. |
html_head_posts |
robots: noindex,nofollow |
Дополнительные теги в <head> для страниц, возвращаемых в ответ на POST-запросы. |
html_head_index |
robots: index,follow |
Дополнительные теги в <head> для немногочисленных индексных страниц. |
html_head_normal |
robots: index,nofollow |
Дополнительные теги в <head> для большинства обычных страниц. |
html_head_queries |
robots: noindex,nofollow |
Дополнительные теги в <head> для страниц, возвращаемых в ответ на GET/HEAD-запросы с указанным параметрами в URL (например, для страниц вызова действий). |
Можно настроить внешний вид вики, задавая следующие параметры конфигурации (применимо только к стандартным стилям, для других стилей параметры могут отличаться):
<head>
config.html_head добавляется в тег <head> для всех страниц
config.html_head_index, config.html_head_normal, config.html_head_queries, config.html_head_posts добавляются в зависимости от вида страницы (см. выше)
<body>
Можно использовать фрагменты HTML-разметки для дополнения страниц, генерируемых МойнМойн (далее указаны возможности для стандартных тем, другие темы могут отличаться в плане конфигурации) — далее показана последовательность, в которой формируется страница
- Шапка страницы:
config.page_header1
config.logo_string – можно использовать для задания собственного логотипа.
- Форма поиска.
Имя пользователя (расположено на боковой панели в теме rightsidebar), имя ИнтерВики, заголовок страницы.
- Последние посещённые страницы (page trail).
Панель иконок действий (используется только в теме classic).
config.navi_bar – список страниц, которые будут добавлены в шапку. Если значение равно «None», то панель навигации добавлена не будет. В теме rightsidebar список располагается на боковой панели.
- Сообщение
config.page_header2 (в теме rightsidebar эта разметка будет добавлена перед разметкой боковой панели и сообщением)
- Содержимое страницы
- Подвал:
- Информация о странице
config.page_footer1
Панель редактирования (в теме rightsidebar она находится на боковой панели), форма поиска (только в теме classic), действия (только в теме classic)
config.credits
- Информация о версии
config.page_footer2
- Пользователь вики может переопределять стили путём задания URL собственной CSS в настройках учётной записи — эта CSS будет загружена после CSS темы, что позволяет переопределить всё, что необходимо. Файл CSS должен быть в кодировке UTF-8 (ASCII также подходит, так как является подмножеством UTF-8).
page_header1, page_header2, page_footer1 и page_footer2 могут быть функциями от одного аргумента, которым передаётся параметр «request» (также необходимо принимать произвольные именованные аргументы для совместимости с будущими возможными изменениями).
Создание новой темы
При желании можно также создать новую тему. Лучший способ сделать это — скопировать существующую тему (например, modern). После чего необходимо переименовать скрипт и изменить параметр name в нём. Можно также написать некую логику на языке Python в рамках этой темы, создав новый пользовательский интерфейс. При обновлении МойнМойн новые темы не затрагиваются — они будут работать с новой версией либо сразу, либо после небольших изменений, связанных с изменениями в API. Для дополнительной информации см. MoinDev/ThemeDevelopment.