Всего 123 768 комментариев

Роман
28 июля 2024, 14:25
0
Алексей, спасибо! Проблему настройка действительно решает — не так уж она и для админа нужна. А если вдруг понадобится, проще «мигнуть» ей.
Alexey
28 июля 2024, 12:31
0
В системных настройках админки есть опция «enable_dragdrop», которая запрещает/разрешает перетаскивание в дереве меню админки. Если необходимо отключить перетаскивание для конкретной группы пользователей, то можно попробовать в плагине на событие OnMODXInit проверять группу текущего пользователя и — если группа подходит — как-то так:

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

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

теперь эта папка доступна извне
Эта проблема решается настройкой конфигурации сервера.
Rrp2010
28 июля 2024, 10:31
0
$freedeliverysumm = $delivery->get('free_delivery_amount');
Konstantin
28 июля 2024, 10:29
0
Подскажите как быть если по соображениям безопастности папка core находится в другом месте и переименована? при установке пакета sendit белый экран. Простой перенос файлов из автосозданной при установке пакета папки core в мою core ничего не изменилось — белый экран, заработало только когда вернул папку core в корень сайта. Но теперь эта папка доступна извне что не безопасно, Подскажите как решаете этот вопрос вы?
Сергей
28 июля 2024, 09:05
0
Можно поинтересоваться чем обусловлено использование input[type=«submit»] вместо button. Мало того что форма сейчас просто не отправляется — обновляется страница, в предыдущих версиях работало отправка по button (бог с ним про disable и тд) — проверки кнопки не было.
Но как использовать input, если переписывать с button, если кнопка нужна двустрочная или текст с картинкой. Попалось сейчас пару проектов таких при обновлении.
Павел Романов
27 июля 2024, 18:46
+1
Добавлю пять копеек )
Если указать $_SERVER['DOCUMENT_ROOT'], то, к примеру, скрипты, использующие подключение API MODX не будут работать, если они запускаются по CRON.
Вячеслав Варов
27 июля 2024, 18:36
0
попробуй 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
Вячеслав Варов
27 июля 2024, 17:28
0
ну вот меня это и смутило, отсюда и задался вопросом — вдруг это как-то для безопасности или еще чего сделано)
Сергей Макаров
27 июля 2024, 15:30
0
подскажите а как вывести информацию в письме tpl.msEmail в какой город был выбран и сделан заказ*? Заранее спасибо!
Ivan
27 июля 2024, 14:49
0
Вообще странные они ребята кто это придумал. Если у человека кастомные настройки нужны, то там же есть выбор Advanced Installation Package. В 99% случаев $_SERVER['DOCUMENT_ROOT'] всем подойдет. Остальные CMS всегда используют эту переменную, но только MODX решил выделиться)))
Вячеслав Варов
27 июля 2024, 14:26
0
Супер, да речь об одном конкретном сайте, спасибо!)
Артур Шевченко
27 июля 2024, 14:18
+1
Если все сайты, которые ты делаешь, будут всегда работать на сервере, который ты сам настраивал, и ты уверен, что их не перенесут на шаред с неизвестными настройками, то конечно используй константу.
Вячеслав Варов
27 июля 2024, 13:51
0
Этот ответ из gpt я уже читал и мне не показалось это чемто критичным, однако все таки решил спросить)

У меня сайт на nginx все пути прописывал сам, поэтому если это никак не отражается то в целом действительно проще использовать серверную константу
Никита Боднар
27 июля 2024, 12:12
0
Удалось решить вопрос, указав загрузку лексикона в каждом чанке, до этого загрузка лексикона стояла глобально для каждой страницы.
Никита Боднар
27 июля 2024, 11:55
0
babel:translate
Артур Шевченко
27 июля 2024, 11:48
0
  1. Разные серверные окружения: Значение $_SERVER['DOCUMENT_ROOT'] может отличаться в разных серверных окружениях. Например, на одном сервере оно может быть установлено как /var/www/html, а на другом — как /usr/local/apache/htdocs. Если ваш код зависит от конкретного значения $_SERVER['DOCUMENT_ROOT'], то он может работать неправильно на разных серверах.
  2. Символические ссылки: Если ваш сайт использует символические ссылки, то $_SERVER['DOCUMENT_ROOT'] может указывать на физический путь, а не на путь, который вы ожидаете. Например, если ваш сайт находится в /var/www/html/mywebsite, а $_SERVER['DOCUMENT_ROOT'] указывает на /var/www/html, то $_SERVER['DOCUMENT_ROOT'] не будет указывать на корневую папку вашего сайта.
  3. Безопасность: Использование $_SERVER['DOCUMENT_ROOT'] напрямую может привести к уязвимостям безопасности. Например, если ваш код использует $_SERVER['DOCUMENT_ROOT'] для создания путей к файлам, то злоумышленник может использовать это для получения доступа к файлам, которые не должны быть доступны.
  4. Поддержка разных версий PHP: Значение $_SERVER['DOCUMENT_ROOT'] может отличаться в разных версиях PHP. Например, в PHP 5.3 и выше оно может быть установлено как /var/www/html, а в более ранних версиях — как /var/www. Если ваш код зависит от конкретного значения $_SERVER['DOCUMENT_ROOT'], то он может работать неправильно на разных версиях PHP.
Артур Шевченко
27 июля 2024, 11:43
+1
В каком пространстве имён эти записи лежат?
Madao
27 июля 2024, 01:17
0
modx 3.0.5 — при загрузке картинок удаляет точку перед расширением файла (получается вместо imagename.png — imagenamepng), соответственно картинка не работает. это норма или надо править где-то к конфиге? пробовал убирать точку из friendly_alias_trim_chars — ничего не поменялось. в friendly_alias_restrict_chars_pattern точка отсутствует.
Вячеслав Варов
27 июля 2024, 00:56
1
0
Отвечаю на свой же вопрос — можно вот так

<?php
switch ($modx->event->name) {
    case 'OnHandleRequest':
        // Загрузка общих настроек
        $site_all = MODX_CORE_PATH . 'config/settings/';
        if (file_exists($site_all) && is_dir($site_all)) {
            foreach (glob($site_all . '*.inc.php') as $file) {
                $response = require($file);
                if (is_array($response)) {
                    $modx->config = array_merge($modx->config, $response);
                }
            }
        }
        
        // Конфигурация для сайта с конфигом MODX_CONFIG_KEY
        $site_dir = MODX_CORE_PATH . 'config/settings/' . MODX_CONFIG_KEY . '/';
        
        if (file_exists($site_dir) && is_dir($site_dir)) {
            foreach (glob($site_dir . '*.inc.php') as $file) {
                $response = require($file);
                if (is_array($response)) {
                    $modx->config = array_merge($modx->config, $response);
                }
            }
        }
        
        // Конфигурация для текущего контекста
        $context_key = $modx->context->get('key');
        $context_dir = MODX_CORE_PATH . 'config/settings/' . $context_key . '/';
        
        if (file_exists($context_dir) && is_dir($context_dir)) {
            foreach (glob($context_dir . '*.inc.php') as $file) {
                $response = require($file);
                if (is_array($response)) {
                    $modx->config = array_merge($modx->config, $response);
                }
            }
        }
        break;
}
?>
Структура папок
core/
└── config/
    └── settings/
        ├── common.inc.php           // Общие настройки
        ├── config1/
        │   └── config1-settings.inc.php   // Настройки для MODX_CONFIG_KEY = config1
        ├── config2/
        │   └── config2-settings.inc.php   // Настройки для MODX_CONFIG_KEY = config2
        ├── web/
        │   └── web-settings.inc.php       // Настройки для контекста web
        └── en/
            └── en-settings.inc.php        // Настройки для контекста en
Вид настроек например для
core/config/settings/en/en-settings.inc.php
<?php
return [
    'site_url' => 'https://your-uz-site-url.com/',
    // Добавьте другие настройки контекста здесь
];
?>