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

Sergey (Sentinel)
30 июля 2024, 18:01
+1
Будет ли тест компонентов на 24 часа?
Дмитрий
30 июля 2024, 13:22
0
Можно немного усложнить задачу для спамеров на стандартном синтаксисе. Т.к. случайная строка генерируется и не меняется при обновлении страницы. Решить этот вопрос можно через плейсхолдер. Я делал форму на FetchIt, поэтому приведу код на нём:

[[!randString:toPlaceholder=`randString`]]
[[!FetchIt?
    &snippet=`FormIt`
    &submitVar=`popup`
    &form=`popup.form.tpl`
    &emailTpl=`emailForm.tpl`
    &hooks=`FormItSaveForm,email,sendTelegram`
    &emailSubject=`Заявка на обратный звонок`
    &emailTo=`[[++email_to]]`
    &emailFrom=`test@test.ru`
    &randString=`[[!+randString]]`
    &validate=`antispam:contains=^[[!+randString]]^,name:required,phone:required,popup_request_conditions:required`
    &validationErrorMessage=`Необходимо заполнить все поля формы!`
    &successMessage=`Спасибо! Ваша заявка отправлена!`
    &errTpl=`Необходимо согласиться с обработкой персональных данных`
]]

В чанке popup.form.tpl необходимо добавить в форму скрытое поле:

<input type="hidden" name="antispam" style="display:none" data-antispam="[[!+randString]]">

ну и также прикрутил js отсюда modx.pro/howto/23926#comment-139070
adminixi
30 июля 2024, 09:35
0
Спасибо! Поменяла на pdoResources.
Наумов Алексей
30 июля 2024, 09:09
0
Сниппет pdoMenu создан для построения дерева, как сказал Артур. В вашем случае, если дерево не нужно, используйте pdoResources.
Дмитрий Иванов
30 июля 2024, 03:31
0
Я не использую) Я изучаю возможность использования. А вообще «западные хостеры» зачастую просто убирают поддержку старых версий ПХП, так что скоро видимо придётся отказываться от него (Articles)
Артур Шевченко
29 июля 2024, 22:36
0
pdoMenu строит дерево и сортирует ресурсы по уровням, так что вряд ли у тебя получится сделать задуманное стандартным сниппетом.
Артур Шевченко
29 июля 2024, 20:41
0
Очевидно код компонента не адаптирован для работы с PHP 8. Вообще не очень понятно с какой целью ты используешь с Modx 2 PHP 8, чтобы жить стало лучше и веселее?
Вячеслав Варов
29 июля 2024, 17:24
0
Докрутил, ранее не подтягивались настройки если запрашивать из одного контекста настройки другого
<?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;
}
?>
Наумов Алексей
29 июля 2024, 09:07
0
Добрый день. Да ничем в принципе)
Замените на button. В js скрипте в первых строчках файла есть селектор для элемента, отправляющего форму, замените и его тоже.
Сергей Фещуков
29 июля 2024, 08:19
0
В properties записывается cf.from_city с ID города, можно его использовать в письме. Вроде как так:
{$properties['cf.from_city']}
Но могу ошибаться.
Роман
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
ну вот меня это и смутило, отсюда и задался вопросом — вдруг это как-то для безопасности или еще чего сделано)