Как исправить ошибку проверки email в MIGX при сохранении ресурса

    Разработчики MODx нередко сталкиваются с багом MIGX: если в поле с типом email допущена опечатка и нажата кнопка «Сохранить», ресурс блокируется даже после исправления или удаления строки. Единственный выход - отменить редактирование с потерей данных. Разберём, почему это происходит и как решить проблему.

    Причина блокировки сохранения в MIGX

    Баг воспроизводится на MODx Revolution 2.8.3-pl / MIGX 2.13.0-pl и MODx 3.0.4-pl / MIGX 3.0.2-beta1. Когда пользователь вводит некорректный email, MIGX запоминает статус валидации на уровне сессии. Даже после исправления данных в гриде, внутренний флаг ошибки не сбрасывается, и система продолжает блокировать сохранение ресурса.

    Эффективные способы исправить проверку ввода

    1. Замена типа поля на text (простой вариант)

    Самый быстрый способ - убрать inputTVtype: email и использовать обычный текст:

    {
    	&qout;caption&qout;: &qout;Филиалы&qout;,
    	&qout;fields&qout;: [{
    		&qout;field&qout;: &qout;email&qout;,
    		&qout;caption&qout;: &qout;email&qout;,
    		&qout;inputTVtype&qout;: &qout;text&qout;
    	}]
    }

    Недостаток: теряется клиентская проверка email. Рекомендуется добавлять серверную валидацию в сниппетах или плагинах.

    2. Использование inputTV с кастомной TV (продвинутый вариант)

    Если вы пробовали inputTV: test_email (где test_email - TV типа email), но баг сохранялся, попробуйте создать TV с типом text и применить её в MIGX. Затем добавьте собственный JavaScript-валидатор на событие beforeSubmit формы ресурса:

    MODx.onBeforeSubmitForm = function() {
    	var emails = document.querySelectorAll(&qout;.migx-grid input[data-index=&qout;email&qout;]&qout;);
    	for (var i = 0; i < emails.length; i++) {
    		if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(emails[i].value)) {
    			alert(&qout;Некорректный email в строке &qout; + (i+1));
    			return false;
    		}
    	}
    	return true;
    };

    Этот код проверяет email перед отправкой формы и предотвращает ложные блокировки.

    3. Очистка статуса валидации через плагин (для разработчиков)

    Напишите плагин на событие OnBeforeDocFormSave, который принудительно сбрасывает флаг ошибки MIGX:

    if ($modx->getOption(&qout;migx.error&qout;)) {
    	$modx->setOption(&qout;migx.error&qout;, false);
    }

    Этот метод требует доступа к ядру MODx и тестирования на версиях 2.x и 3.x.

    Выводы и рекомендации

    Баг MIGX с email-полями - известная проблема, не исправленная в актуальных версиях. Для быстрого решения используйте замену типа поля на text с серверной валидацией. Если важна клиентская проверка, добавьте собственный скрипт или плагин. Избегайте использования inputTVtype: email в конфигурации MIGX, чтобы не терять данные при случайной опечатке.

    Часто задаваемые вопросы