Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 120 комментариев

Вячеслав Варов
Вячеслав Варов
Докрутил, ранее не подтягивались настройки если запрашивать из одного контекста настройки другого
<?php
switch ($modx->event->name) {
    case 'OnHandleRequest':
        // Функция для загрузки настроек из файлов
        function loadSettings($directory) {
            $settings = [];
            if (file_exists($directory) && is_dir($directory)) {
                foreach (glob($directory . '*.inc.php') as $file) {
                    $response = require($file);
                    if (is_array($response)) {
                        $settings = array_merge($settings, $response);
                    }
                }
            }
            return $settings;
        }

        // Загрузка общих настроек
        $site_all = MODX_CORE_PATH . 'config/settings/';
        $globalSettings = loadSettings($site_all);

        // Конфигурация для сайта с конфигом MODX_CONFIG_KEY
        $site_dir = MODX_CORE_PATH . 'config/settings/' . MODX_CONFIG_KEY . '/';
        $configKeySettings = loadSettings($site_dir);

        // Конфигурация для текущего контекста
        $context_key = $modx->context->get('key');
        $context_dir = MODX_CORE_PATH . 'config/settings/' . $context_key . '/';
        $contextSettings = loadSettings($context_dir);

        // Объединение всех настроек
        $allSettings = array_merge($globalSettings, $configKeySettings, $contextSettings);

        // Применение настроек к текущему контексту
        foreach ($allSettings as $key => $value) {
            $modx->context->setOption($key, $value);

            // Сохранение настроек в базе данных
            $setting = $modx->getObject('modContextSetting', [
                'context_key' => $context_key,
                'key' => $key
            ]);
            if (!$setting) {
                $setting = $modx->newObject('modContextSetting');
                $setting->set('context_key', $context_key);
                $setting->set('key', $key);
            }
            $setting->set('value', $value);
            $setting->save();
        }
        break;
}
?>
Наумов Алексей
Наумов Алексей
Добрый день. Да ничем в принципе)
Замените на button. В js скрипте в первых строчках файла есть селектор для элемента, отправляющего форму, замените и его тоже.
Alexey
Alexey
В системных настройках админки есть опция «enable_dragdrop», которая запрещает/разрешает перетаскивание в дереве меню админки. Если необходимо отключить перетаскивание для конкретной группы пользователей, то можно попробовать в плагине на событие OnMODXInit проверять группу текущего пользователя и — если группа подходит — как-то так:

$modx->setOption('enable_dragdrop', 0);

Возможно, для этой цели есть более «точные» события, внимательно не смотрел
Артур Шевченко
Артур Шевченко
Не выношу папку core и, должен сказать, за 6 лет проблем с безопасностью не было.

теперь эта папка доступна извне
Эта проблема решается настройкой конфигурации сервера.
Konstantin
Konstantin
Подскажите как быть если по соображениям безопастности папка core находится в другом месте и переименована? при установке пакета sendit белый экран. Простой перенос файлов из автосозданной при установке пакета папки core в мою core ничего не изменилось — белый экран, заработало только когда вернул папку core в корень сайта. Но теперь эта папка доступна извне что не безопасно, Подскажите как решаете этот вопрос вы?
Сергей
Сергей
Можно поинтересоваться чем обусловлено использование input[type=«submit»] вместо button. Мало того что форма сейчас просто не отправляется — обновляется страница, в предыдущих версиях работало отправка по button (бог с ним про disable и тд) — проверки кнопки не было.
Но как использовать input, если переписывать с button, если кнопка нужна двустрочная или текст с картинкой. Попалось сейчас пару проектов таких при обновлении.
Вячеслав Варов
Вячеслав Варов
попробуй c указанием пространства, например у меня есть пространство имен
mynamespace внутри него есть все ключи и заданы они как mynamespace.key_name

в итоге вывожу
{'mynamespace.key_name' | lexicon}


Плагин на загрузку лексикона выглядит так

<?php
$lang = $modx->getOption('cultureKey');
$modx->setOption('cultureKey',$lang);
$modx->lexicon->load($lang.':mynamespace:default');
Запуск на системные события OnParseDocument и OnLoadWebDocument
Ivan
Ivan
Вообще странные они ребята кто это придумал. Если у человека кастомные настройки нужны, то там же есть выбор Advanced Installation Package. В 99% случаев $_SERVER['DOCUMENT_ROOT'] всем подойдет. Остальные CMS всегда используют эту переменную, но только MODX решил выделиться)))
Артур Шевченко
Артур Шевченко
Если все сайты, которые ты делаешь, будут всегда работать на сервере, который ты сам настраивал, и ты уверен, что их не перенесут на шаред с неизвестными настройками, то конечно используй константу.
Вячеслав Варов
Вячеслав Варов
Этот ответ из gpt я уже читал и мне не показалось это чемто критичным, однако все таки решил спросить)

У меня сайт на nginx все пути прописывал сам, поэтому если это никак не отражается то в целом действительно проще использовать серверную константу