Контексты (Contexts) позволяют надстроить конфигурацию MODx, расширить, изолировать, или разделить между доменами, суб-доменами, под-сайтами, мульти-сайтами, регионозависимыми-подразделами, специфическими веб-приложениями и прочее.
[Комментарий] А проще и грубо говоря поддерживать много абсолютно разных сайтов через одну систему управления контентом[/Комментарий]
Контекст легко создаётся в пункте меню
Contexts меню
Tools. Контекст будет показан в вашем дереве ресурсов (документов). Ресурсы могут легко быть перенесены между контекстами.
Ресурсы наследуют конфигурационные настройки контекста.
Создание Контекcта
Для начала заходим в
Contexts page, через
System -> Contexts. Потом нажимаем
«Создать новый» в таблице. У вас запросят идентификатор и описание. Потом правый клик по созданному контексту и жмём
«Обновить контекст».
Это выведет окно с контекстом и пустой таблицей настроек. Здесь можно добавить контекстно-специфические настройки, которые заменят соответсвующие системные настройки.
Создаём субдомен из папки используя Virtual Hosts
Управление множеством субдоменов из одной инсталяции МОДх возможно используя механизм комнтекстов (Contexts). В данном примере будет рассмотрено создание субдомена на примере
dev.modxcms.com
Создаём Контекст
Для начала идём в
System -> Contexts и создаём там новый контекст, назвав его "
dev".
Далее создадим документ "
Dev Home" и поместим в созданный контекст "
dev", также создадим документ "
Dev Docs" с alias «documentation». Дерево будет выглядеть примерно так:

Правый клик по контексту "
dev" в дереве, и нажмите
«Update Context». Отобразится таблица Настроек Контекста. Вам нужно добавить пару настроек:
*
site_start — меняем на ID «Dev Home».
*
base_url — установить это на "/" (без кавычек) т.к. это становится root директорией.
*
http_host — пропишем «dev.modxcms.com»
*
site_url — сюда соответсвенно «
dev.modxcms.com/». Не забываем про последний слэш, адрес строится по схеме (scheme+http_host+base_url).
Можно добавлять контекстно-специфические настройки, такие как error_page, unauthorized_pageи другие «по вкусу».
Note: If you're going to be linking back to the 'web' context from this context, you'll want to add those same Context Settings (with 'web'-specific values, of course) to the 'web' context. This allows MODx to know where to redirect 'web' context URLs back to.
[Комментарий]Какая-то каша получилась здесь, похоже для того чтобы потом из разных контекстов нормально строились ссылки на базовый контекст web — ему тоже нужно жестко прописать приведённые выше настройки контекста[/Комментарий]
После всего этого очистите кэш сайта.
Создаём Virtual Host
Теперь нужно немного пошаманить с Apache (Если вы не используете Apache, то вы по крайней мере поймёте идею требуемых действий). Откройте Apache's httpd.conf файл и добавьте следующие строки:
NameVirtualHost dev.modxcms.com
<VirtualHost dev.modxcms.com>
ServerAdmin dev@modxcms.com
DocumentRoot /home/modxcms.com/public_html/dev
ServerName dev.modxcms.com
ErrorLog logs/devmodxcms-error_log
TransferLog logs/devmodxcms-access_log
</VirtualHost>
Некоторые версии Apache предпочитают, что бы им вводили IP сервера в параметре VirtualHost и NameVirtualHost — и это нормально; Важное поле здесь — ServerName.
Конечно же создавая субдомен отличный от
dev.modxcms.com вам нужно изменить этот адрес на свой.
Замечательно! Теперь перезагрузите свой сервер.
Файлы суб-домена
Теперь нужно создать реальные файлы для загрузки на суб-домен. Создайте папку "
dev/" в
/home/modxcms.com/public_html/ (в корневой директории вашего сервера).
Вам нужно скопировать 3 файла и корневой директории MODx Revolution's:
* index.php
* .htaccess
* config.core.php
Скопируйте их в папку
dev/.
Теперь нужно отредактировать их.
index.php
В index.php, найдите эту линию:
$modx->initialize('web');
Измените '
web' на '
dev'. Сохраните и закройте.
.htaccess
Найдите эту строку:
RewriteBase /
Убедитесь, что там именно "/", а не что-либо ещё. Оно должно соответсвовать настройке контекста «base_url», которую вы ввели ранее.
Последние шаги
Очистите кэш снова, обновите дерево ресурсов и нажмите 'Preview' в документе "
Dev Home". Теперь вам должена быть показана страница с URL —
dev.modxcms.com/
Создайте ссылку
[[~135]] к "
Dev Docs" в документ "
Dev Home". Перезагрузите страницу и увидите, что ссылка строится правильно —
dev.modxcms.com/documentation.html
Вот собственно и всё!
Использование плагина одного шлюза для управления мультидоменной системой
У вас несколько вариантов для распределения одной БД и системы управления на несколько доменов. Можно выбрать чтобы главный фронтенд контекст (по умолчанию 'web') управлял всеми доменами или можно создать уникальный шлюз-файл для каждого домена для прямого управления его контекстом. Используя единый шлюз (первый случай) вам нужно применить плагин переключения контекстов, примерно следующий:
<?php
switch ($modx->getOption('http_host')) {
case 'domain2.tld:80':
case 'domain2.tld':
// if the http_host is of a specific domain, switch the context
$modx->switchContext('domain2.tld');
break;
default:
// by default, don't do anything
break;
}
?>
Во втором случае вам нужно создать копии файла
index.php из контекста по-умолчанию
web (вместе с файлами
core.config.php и
.htaccess для соответсвенного изменения правил чпу) в другой директории и изменить след. линию:
$modx->initialize('web');
на
$modx->initialize('aContextNameOfYourChoice');
Вы даже можете скопировать index.php в ту же самую директорию и переименовать его, но вы должны позаботиться, чтобы rewrite rules были достаточно продуманы, чтобы правильно передать запрос требуемому контексту.
[Комментарий]Осталось сделать себе плагин по парсингу РСС лент и можно приступать к клепанию сотни сплогов на одном движке :))) Вот такие чудеса и блага нам сулит новая версия[/Комментарий]
Компиляция из оригинальных доков
http://svn.modxcms.com/docs/display/revolution/Contexts
Комментарии (26)
RSS свернуть / развернутьbullder
Но есть заготовка пункта Context Permissions тоесть можно предположить, что механизм распределения доступа пользователей по котекстам будет.
Вобще-то для разных случаев может понадобиться как единая база пользователей, так и разная для каждого контекста. Думаю разработчики это тоже понимают и предоставят нам, как всегда :), гибкий механизм.
iJack
Залез в админку Security -> Access Permissions , а там полный фарш.
Доступ группам пользователей можно задавать как по ресурсу, так и по контексту. Мало того можно делать Custom Access Policies, но блин… как обычно широкие возможности порождают то, что в них порой можно запутаться :))
iJack
Надеюсь, что потом целую пачку из этого автоматизируют, а точка входа будет единой, что позволит нам использовать алиас *.mydomen.ru, а пока половина хостингов подобной штукой пользоваться нам не дадут.
Интересно, а как выглядит ссылка на документ в другом контексте?
Carw
Для того, чтобы править ВиртуалХостс нужен свой сервер походу (я не видел ни одного обычного виртуального хотинга, который бы это позволял)
А ссылка на документ в другом контексте выглядит как ссылка на другой под-домен походу типа dev.modxcms.com?id=245, я не уверен, но раз всё в одной БД, то логично было было сделать сквозную нумерацию ID для всех контекстов (чтобы ИД не повторялись в разных контекстах, тогда можно не парясь использовать везде [~245] и парсер автоматом создаст правильную сылку).
И с ВируталХостс как я понял можно не париться. Просто создаёшь суб-домен (или аттачишь доп. домен) через CPanel, например, заливаешь в папку суб-домена * index.php .htaccess config.core.php (соответсвенно подправленные).
Как я понял — главное чтобы всё это находилось на одном сервере, потому что в config.core.php забит абсолютный адресс в файловой системе сервера до управляющего ядра МОДх.
Так что всё имхо более чем реально, на любом платном хостинге.
iJack
А вот с этими виртуал-хостами надо будет разобраться подробнее, так как вполне возможно, что предложенный вариант по созданию под-домена не сработает. Допустим если где-то пути относительно индексного файла считаются. Если ядро, допустим, напрямую прицепится, а все остальное нет, то это будет не очень хорошо.
Carw
после:
добавить:
В конфиге апача можно новые домены прописать через ServerAlias.
nep
Просто у меня такая проблема с контекстами: первый документ в контексте всегда создаётся вида «dev.modxcms.com/dev.modxcms.com», т.е. как пункт меню он пишется полностью, а должно было бы "/" и всё =/
И в метатег base подставляется без http://
Вот такие косяки пока что были мной замечены в общем-то. Хотя может и я что-то в настройках упустил, хотя вроде всё по инструкции сделал.
Pahom-ka
yar-it
Я не сомневаюсь в том, что вы прекрасно разбираетесь в MODx, и вы отличный программист, но ваше навязывание собственного сайта несколько раздражает, уж простите за прямоту.
По сабжу: На вашем сайте настройки не особо разнятся с этими, да и я уже сам экспериментировал с разными комбинациями, и всё равно остаётся эта противная ссылка «dev.modxcms.com/dev.modxcms.com» :(
Pahom-ka
да и проверено мультисайтовость работает. вот вам наш «скромный» пример isot-rggu.1gb.ru
— сквозные ссылки с разных доменов
— копирование содержания страниц с основного контекста на остальные при необходимости.
— раздельная регистрация пользователей и разграничение прав на ресурсы.
Dronowar
Dronowar
Можно этот момент поподробнее?
Pahom-ka
yar-it
А вот со слешем, без?
Кагбэ и с вашими настройками всё также, осталась эта противная ссылка :( конечно в тексте её можно «вылечить» подставив вначала «http://», но при генерации меню она всё равно получается кривой.
И не надо обижаться, пиар, я всё понимаю.
Pahom-ka
yar-it
Dronowar
Допустим я хочу на одной инсталляции разворачивать сайты для совершенно разных компаний. С плагином шлюза разобрался, попробовал, всё хорошо.
1) Очевидно, что пользователь фирмы А не должен иметь какого-либо доступа к содержимому сайта фирмы Б. Это можно решить посредством прав доступа к контексту, правильно я понимаю?
2) У фирмы А — сайт-визитка, у фирмы Б — портал. Фирме Б требуются дополнительные плагины и функциональные возможности. Простейший пример: есть плагин, который в конце страницы выводит букву «Z». Вот для сайта фирмы Б этот плагин нужен, а вот в сайте фирмы А — нет. Но плагин у нас привязывается к системному событию. А возможно ли каким-либо образом «отключать» плагин для одного контекста (для одного домена) и «включать» для другого?
Этот же вопрос отнесу к остальным элементам: чанкам, сниппетам, TV, шаблонам. Ещё один пример для понимания сути задачи: продвинутому пользователю сайта Б нужно дать права на изменение шаблонов, сделанных для этого сайта. Но при этом он не должен видеть шаблоны сайта А.
Perceive
Когда дошел до создания нового параметра контекста, то в появившемся окне отобразились поля: Ключ, Имя, Тип поля, Пространство имён, Запись словаря для раздела, Значение, Описание.
Куда вписывать http_host, site_url и др. параметры фигурирующие в инструкции так и не нашел. Может я что-то не так понял?
На этой картинке показано окно какое и высвечивается.
Полей с для http_host и site_url нет, но пишется, что их тоже надо заполнить.
Подскажите пожалуйста, так куда же, что и как надо прописать, чтобы правильно все настроилось?
wifr
Но появилась другая проблема.
Поддомен сгенерировал через панель управления DirectAdmin.
Пока в директории поддомена находились родные файлы, то главная страница поддомена грузилась.
После очистки файлов из каталога поддомена и копирования туда файлов index.php, .htaccess и config.core.php и внесения изменений в них как написано выше поддомен стал выдавать ошибку 503.
Есть ли уже где-то готовый рецепт как это лечить?
wifr
asx
2 домена в одной папке (publik_html),
в /saite1.ru стоит modx.
3 файла перекинул в /saite2.ru и поправил, как написано,
создал 2-й контекст.
Вышла Error503, но поправил config.core.php в /sate2.ru
:1 define('MODX_CORE_PATH', dirname(__FILE__). '/core/');
на
:1 define('MODX_CORE_PATH', saite1.ru(__FILE__). '/core/');
и, 503 не стало, но saite2.ru всё равно не отражается…
хотя Шаблон и ресурс, повторяюсь, для 1-ой сраницы указаны.
Браузер показывает абсолютно пустую страницу.
Теперь бьюсь с этим…
oleg
asx
valikras
asx
1. Была опечатка в настройках контекста.
2. «дочерние» домены должны находится в папке основного, а не паралельно (или, тогда необходимы доп. настройки...)
oleg
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.