Восьмибитный путь MODx,
часть 6:
Сказочная настройка доступов и классическая мультиязычность

Восьмибитный путь MODx
или

Сайт с нуля MODx revo, часть 6:
Сказочная настройка доступов и классическая мультиязычность.

Превосходным свойством системы, вполне безошибочно должно окрестить эластичную настройку прав доступа. Для таких задач, где потребно приоткрыть занавесу только к редактированию текста, и, надлежит утаить такие элементы администраторской деятельности как шаблоны, чанки, сниппеты и всю прочую, прочую исходную ересь, в modx, предусмотрено достаточно пригодных для сего инструментов. Элементарными словами: дабы «несведующий» человек

не сокрушил сайт
начисто к перцам собачьим

Следуй в Контроль доступаПолитики доступа. Скопируй Content Editor и назови ее Manager.

Скопируй Content Editor и назови ее Manager

Отредактируй, проставь галочки на следующих ключах:

С остальных ключей — флажки снимаем.

Сейчас, создай новую группу пользователей, Названиеmanager, Контексты: web, mgr; Политика панели управленияManager.

создай новую группу пользователей

Отредактируй эту новую группу, в Правах доступах, измени политику доступа на Manager.

измени политику доступа

Далее ступай в УправлениеПользователи. Создай нового пользователя с именем supermanager, флажок на Активный. Вкладка Права доступа и добавляем пользователя в группу manager, с ролью Member.

Создай нового пользователя

Следуй к МедиаИсточники файлов, измени источник Filesystem, в правах доступа добавь группу Administrator, роль: Super User – 0, политика: Media Source Admin.

измени источник

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

Пофик-си-льву-пле

Далее нужно немного изменить сниппет MIGX: migxResourceMediaPath.

найди:

if (empty($docid)) {
  $modx->log(MODX_LOG_LEVEL_ERROR, '[migxResourceMediaPath]: docid could not be determined.');
  return;
}

меняй на:

if (empty($docid)) {
    //$modx->log(MODX_LOG_LEVEL_ERROR, '[migxResourceMediaPath]: docid could not be determined.');
    if(empty($pathSource)) {
        return 'upload/';
    }else{
      return $pathSource;
    }
}

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

добавляй параметр pathSource

Дело в том, что исходный сниппет MIGX

возращает лишь пустоту

значит, что у группы манагера, при просмотре сего источника файлов из меню МедиаУправление медиа, будет загружаться корневая дирректория. А тебе это не нужно.

Годно: доступ к исходникам сайта спрятан полностью.

Создай индивидуальный виджет для манагеров, зайди в Панели и скопируй панель Default. Назови ее Manager и оставь только следующие виджеты: Проверка конфигурации, Пользователи онлайн, Недавно отредактированные ресурсы.

индивидуальный виджет для манагеров

Создай документ с названием Блокнот, Шаблон txt. В содержимом напиши TODO LIST. Сюда будешь записывать задачи, которые необходимо выполнить, например, по наполнению сайта. Скрой документ из меню, и сними с публикации.

Вернись в раздел Панели. Во вкладке Виджеты – создай новый виджет с названием Добро пожаловать, размер – на всю ширину.

<br/>
<a href="/megaadmin/?a=3">Посмотреть заполненные формы</a>
<hr/>
<a href="/megaadmin/?a=home&namespace=stercseo">301 редиректы</a>
<hr/>
<a href="/megaadmin/?a=resource/update&id=11">Редактировать блокнот:</a>
<hr/>
[[#11.content]]

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

Далее заходи в Контроль доступа и редактируй группу Manager, Панель управления выбирай: Manager.

Панель управления выбирай Manager

Вернись в раздел Панели, отредактируй панель Manager и добавь виджет Добро пожаловать, сразу после Проверки конфигурации (перемещать строки мышкой).

Теперь при заходе под пользователем supermanager – вот как выглядит главная страница админки:

вот как выглядит главная страница админки

Тот же виджет можешь добавить и к группе администраторов, на свой вкус короч.

Классическая
мультиязычность

Скачай, если не скачал компонент Babel, качай-качай. Устанавливай.

Копируй контекст Website, новый ключ – en. Отредактируй контекст, название: English. Настройки контекста, добавь ключ: cultureKey со значением: en. Сохраняй.

Отредактируй контекст

Следуй в Системные настройки и фильтруй на babel и добавь через запятую ключ контекста в настройку babel.contextKeys, вот как: web,en.

Пройдись по страницам контекста Website и свяжи страницы с англоязычной версией.

свяжи страницы с англоязычной версией

Добавь следующие ключи в контекст English:

Сайт http://en.example.test – должен являться алиасом основного домена.

Продублируй те же настройки для контекста Website.

Создай плагин, с названием switchContext на Системное событиеOnMODXInit. Содержимое плагина:

<?php
if($modx->event->name != 'OnMODXInit' || $modx->context->key == 'mgr') {
    return;
}

$host = $_SERVER['HTTP_HOST'];
$where = array(
    'key' => 'http_host',
    'value' => $host
);
$context = $modx->getObject('modContextSetting',$where);
$ctx = $context->get('context_key');
$modx->switchContext($ctx);

Готово, теперь есть два «разных» сайта, крутящихся на одной админке.

Добавим перелинковку для разноязычных страниц, в нужное место шаблона добавь:

<ul>
  [[BabelLinks?&showCurrent=`true`]]
</ul>

В идеале необходимо отредактировать чанк из настроек сниппета &tpl, и поменять код так - чтобы по плейсхолдеру [[+cultureKey]], подкручивалась нужная картинка.

да воцарится хаос и мрак!
да воцарится
хаос и мрак!



Содержание:


03 февраля 2019, 23:13
modx revolution