Янис

Янис

Был в сети 26 октября 2020, 15:14
Заказы не принимаю
ОК. Я не программист. И даже не учусь :)

BTW. Мой клиент чуть расширил задачу и мне понадобилось передать [[+url]] дальше. Пришлось урл закодировать. Так появились еще две строчки:
// Новая опция для urlencode 
$urlEncode = $modx->getOption('urlEncode', $scriptProperties, false);
// И как обычно, перед сбросом в чанк --  URL-кодирование строки. 
if ($urlEncode) 
        $itemArr['urlencode'] = urlencode($itemArr['url']);
Насколько оно надо другим, не скажу. Но если надо — пользуйтесь.
На тему вывода даты загруженного файла. Мне понадобилось и я добавил пару строк (версия 1.0.8):
// Определяем дополнительную опцию
$showDate = $modx->getOption('showDate', $scriptProperties, false);
// Перед сбросом данных в чанк определяем дату файла
if ($showDate) $itemArr['filedate'] = filectime($item->getFullPath());
Теперь у нас есть еще одна опция &showDate=`1` и еще один плейсхолдер [[+filedate]], что содержит дату файла.
Виталий, внесете дополнения в сниппет FileAttach?
Как я уже писал: «Я пока все-таки поставил вариант с другим именем класса для полей. » Т.е. я дополнил default.js. Изменений не много:
После строчки
form.find('.error').removeClass('error');
Вставил
form.find('.field-error').removeClass('field-error');
Строку
form.find('[name="' + key + '"]').addClass('error');
Изменил на
form.find('[name="' + key + '"]').addClass('field-error');
После сроки
form.find('.error').removeClass('error');
Добавил
form.find('.field-error').removeClass('field-error');
И блок
$(document).on('keypress change', '.error', function () {
  var key = $(this).attr('name');
  $(this).removeClass('error');
  $('.error_' + key).html('').removeClass('error');
});
Изменил на
$(document).on('keypress change', '.error, .field-error', function () {
  var key = $(this).attr('name');
  $(this).removeClass('error field-error');
  $('.error_' + key).html('').removeClass('error');
});
Т.е. теперь инпутам, селектам и прочим полям присуждается класс .field-error, вместо .error.
Ну и css слегка подправить нужно.
> form.find('.error').html(''); выполняется для спана с текстом ошибки, а не для самого элемента.
И где вы это увидели? В строке про span нет ни слова. Обнуляются всё html содержимое елементов с классом .error. Обычные инпуты и текстареа не имеют html содержимого, поэтому их это не задевало. А вчера — сошлись звезды и понадобилась мне аджакс форма с селектом.
Тоже не комильфо́, сообщения с ошибками не обнуляются. Я пока все-таки поставил вариант с другим именем класса для полей. И установил AjaxForm локально, чтобы он обновления не искал.

Главное — проблема локализована. Как ее решить с наименьшими потерями для всех, вряд ли подскажу, как я уже писал — не особо я разбираюсь в js, чуть-чуть jQuery умею. Время есть, а если кто-то столкнётся с проблемой, то хоть не будет биться головой об стенку, как я вчера.

Если нужна помощь в тестировании — всегда пожалуйста.
Скажу сразу — я в js, как свинья в апельсинах. Но вот что я нарыл:

Строка, из-за которой опустошается селект, была найдена быстро (default.js)
54. form.find('[name="' + key + '"]').addClass('error');
А вот дальше начались танцы с бубном и призывом грома — я попробовал не находить строчку, а фильтровать, пробовал искать по атрибуту «name», ничего не изменилось. А потом покурил, стукнул в бубен и спросил: «О великий селект, почему ты глючишь?» И ответил селект: «А мне имя класса не нравится!» Вот тут я выпал в осадок, но поменял строчку
54. form.find('[name="' + key + '"]').addClass('field-error');
и всё заработало. На всякий случай убрал все стили (мало ли). Те же яйца, вид сбоку.

Итого: Василий с ГитХабом у меня еще хуже, чем с js, сможешь изменить класс «error» для полей на какой нибудь другой, например на «field-error»?