Баха Волков · 11 февраля 2019, 16:23 Позвольте переписать ваш чанк ajaxForms: {'!AjaxForm' | snippet : [ 'form' => $form, 'hooks' => $hooks !: 'email,FormItSaveForm', 'emailSubject' => $emailSubject !: 'Тема письма', 'emailTo' => $emailTo !: $_modx->config.callback_email, 'validationErrorMessage' => $validationErrorMessage !: 'В форме содержатся ошибки!', 'successMessage' => $successMessage !: '<div class="name">Спасибо</div><p>Ваше сообщение успешно отправлено</p>', 'vTextMaxLength' => $vTextMaxLength !: '<div>Проверьте правильность заполнения</div>', 'vTextMinLength' => $vTextMinLength !: '<div>Проверьте правильность заполнения</div>', 'vTextRequired' => $vTextRequired !: 'Это поле обязательно для заполнения', 'validate' => $validate !: 'name:required', 'formName' => $formName !: 'Имя формы', 'formFields' => $formFields !: 'name,pageId,pagetitle,email,message,file', ]} Так ведь намного лучше Готовые решения / Хватить это терпеть! Или зачем столько чанков в FormIt!? 21 +5 4
Николай · 11 февраля 2019, 16:04 Выложу свой способ управления множеством форм для сниппета ajaxForm, может пригодится. Создаём чанк ajaxForms: {if !$form} {set $form = ''}{/if} {if !$hooks} {set $hooks = 'email,FormItSaveForm'}{/if} {if !$emailSubject} {set $emailSubject = 'Тема письма'}{/if} {if !$emailTo} {set $emailTo = $_modx->config['callback_email']}{/if} {if !$validationErrorMessage} {set $validationErrorMessage = 'В форме содержатся ошибки!'}{/if} {if !$successMessage} {set $successMessage = '<div class="name">Спасибо</div><p>Ваше сообщение успешно отправлено</p>'}{/if} {if !$vTextMaxLength} {set $vTextMaxLength = '<div>Проверьте правильность заполнения</div>'}{/if} {if !$vTextMinLength} {set $vTextMinLength = '<div>Проверьте правильность заполнения</div>'}{/if} {if !$vTextRequired} {set $vTextRequired = 'Это поле обязательно для заполнения'}{/if} {if !$validate} {set $validate = 'name:required'}{/if} {if !$formFields} {set $formFields = 'name,pageId,pagetitle,email,message,file'}{/if} {if !$formName} {set $formName = 'Имя формы'}{/if} {if !$validationErrorMessage} {set $validationErrorMessage = 'В форме содержатся ошибки!'}{/if} [[!ajaxForm? &form=`{$form}` &hooks=`{$hooks}` &emailSubject=`{$emailSubject}` &emailTo=`{$emailTo}` &validationErrorMessage=`{$validationErrorMessage}` &successMessage=`{$successMessage}` &vTextMaxLength=`{$vTextMaxLength}` &vTextMinLength=`{$vTextMinLength}` &vTextRequired=`{$vTextRequired}` &validate=`{$validate}` &validationErrorMessage=`{$validationErrorMessage}` &formName=`{$formName}` &formFields=`{$formFields}` &fieldNames=`{$fieldNames} ` ]] Это единый чанк, в котором вызывается сниппет ajaxForm с необходимыми параметрами. В моём случае каждая отдельная форма — это отдельный чанк. Если эти чанки мало чем различаются, то можно использовать extends из fenom, переписывая лишь изменяющиеся значения, а остальное не трогать. И далее в шаблоне страницы вызов нужной формы: {include 'ajaxForms' form='callback' emailSubject='Обратный звонок' validate='name:required,phone:required' formFields='name,phone,pagetitle' formName='Обратный звонок' } В нём мы подменили значения, передающиеся в чанк ajaxForm. Пример чанка callback с формой: <div style="display: none;" id="{block 'id'}callback{/block}" class="popup"> <div class="title">{block 'title'}Заказать обратный звонок{/block}</div> <div class="desc">{block 'desc'}Оставьте заявку, и мы свяжемся с вами в самое ближайшее время{/block}</div> <form role="form" method="POST" action="[[~[[*id]]]]" enctype="multipart/form-data"> <input type="hidden" name="pagetitle" value="[[*pagetitle]] ([[*id]])"> <input type="text" name="name" value="[[!+fi.name]]" placeholder="Ваше имя" required="required" /> <span class="error error_name">[[+fi.error.name]]</span> <input type="tel" name="phone" value="[[!+fi.phone]]" placeholder="Ваш телефон" required="required" /> <span class="error error_phone">[[+fi.error.phone]]</span> <div class="privacy">Отправляя заявку, Вы соглашаетесь на обработку персональных данных согласно <a href="{29|url}">Пользовательскому соглашению</a></div> <button class="button-yellow" type="submit" value="{md5(rand())}" name="submit">Отправить</button> </form> </div> Если нужно вызвать похожую форму но с другим заголовком и другими параметрами, то создадим чанк question, который наследует чанк callback: {extends 'callback'} {block 'id'}question{/block} {block 'title'}Задать вопрос{/block} {block 'desc'}Задайте свой вопрос, и мы с вами свяжемся{/block} И вызов этой формы в шаблоне страницы: {include 'ajaxForms' form='question' emailSubject='Задать вопрос' validate='name:required,phone:required' formFields='name,phone,pagetitle' formName='Задать вопрос' } Таким образом, для всех форм мы можем задать единые параметры вызова сниппета ajaxForm, и при необходимости перезаписать их. А также под каждую форму либо создать отдельные чанки, либо унаследовать от одного чанка кучу других с индивидуальными параметрами. Дополнительно я скрываю уведомления jgrowl js-скриптом: $(document).on('af_complete', function(event, response) { if (response.success) { $.fancybox.close(); $.fancybox.open({ src : '#popup-success', type : 'inline', opts : { afterShow : function( instance, current ) { // console.info( 'done!' ); } } }); } else { for (var prop in response.data) {} } response.message=''; }); Все уведомления об ошибках показываются под полями форм, в коде span c классом error. А если форма успешно отправлена, то с помощью скрипта выше мы скрываем popup-форму, если она была открыта, и показываем другое popup-окно: <div style="display: none;" id="popup-success" class="popup"> <div class="title">Данные успешно отправлены</div> <div class="success"> <img src="/assets/img/success.png" alt=""> </div> </div> Оно же всплывает и при отправке обычных не popup-форм. Да, насчёт popup-окон, актуально при использовании flexbox3. Готовые решения / Хватить это терпеть! Или зачем столько чанков в FormIt!? 21 +1 4
Александр Янк · 31 января 2018, 12:39 Спасибо большое, искал подходящий canonical, а тут вы на Fenom'e яркий пример привели, спасибо большое: <link rel="canonical" href="{$_modx->makeUrl($_modx->resource.id, '', '', 'full')}"> Вопросы / Символические ссылки в MODX 2 0 1
Наумов Алексей · 04 января 2018, 14:05 1. {$_modx->resource['id'] | url}2. В форму добавляете скрытое поле <input type="hidden" name="page" value="{$_modx->resource['id']}"/>а в чанке письма уже{$page | url} Вопросы / Как перенести этот код [[~[[*id]]]] на fenom? 12 0 1
Илья Уткин · 27 мая 2017, 21:21 На всякий случай презентация Новости и события / Видео с MODX Meetup Almaty 2017 27 +2 1
Сергей Шлоков · 15 ноября 2016, 12:12 Это из-за этого. Можно закомментировать пока не исправят. Не думаю, что это повлияет на безопасность. Новости и события / Срочные исправления безопасности в MODX 2.5.2 90 +4 2
Виталий Валерьевич · 08 июля 2016, 13:02 [[!pdoPage? &element=`pdoResources` &loadModels=`ms2gallery` &class=`msResourceFile` &tpl=`@INLINE <a href="[[+url]]" target="_blank"><img src="[[+120x90]]" /></a>` &where=`{"parent": СЮДА ID РОДИТЕЛЯ,"active":1}` &limit=`10` &sortby=`id` &sortdir=`ASC` &leftJoin=`{ "120x90":{"class":"msResourceFile","alias":"120x90", "on":"120x90.parent=msResourceFile.id AND 120x90.path LIKE '%/120x90/'"} }` &select=`{ "msResourceFile":"*", "120x90":"120x90.url as 120x90" }` ]] [[!+page.nav]] Заменить «СЮДА ID РОДИТЕЛЯ» на реальный ID, подставить свои значения по размерам изображений. Да, это пример взятый из документации с pdoPage (постраничной навигацией), можно вывести просто через pdoResources Вопросы / Как правильно вывести несколько галерей? 6 +1 2
Максим Кузнецов · 29 февраля 2016, 13:46 Для fenom: {set $canonical_url = $_modx->makeUrl($_modx->resource.id, '', '', 'full')} <link rel="canonical" href="{$canonical_url}" /> <meta property="og:url" content="{$canonical_url}" /> Тегами modx: <link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" /> <meta property="og:url" content="[[~[[*id]]? &scheme=`full`]]" /> Или, например, вот так (не помню для чего, но как-то возникла проблема с предыдущим вариантом, которая решилась нижеописанным примером): [[++site_url]][[*id:isnot=`[[++site_start]]`:then=`[[~[[*id]]]]`]] Вопросы / Почему 404 страница не всегда выбивает? 12 +2 4
Максим Кузнецов · 10 декабря 2015, 10:14 $modx->regClientStartupHTMLBlock('<meta name="viewport" content="width=device-width, initial-scale=1">'); Подробнее (eng) Вопросы / Какой компонент нужен сообществу? 101 +4 1
Максим Кузнецов · 10 декабря 2015, 10:09 <?php if ($modx->event->name != 'OnManagerPageInit') return; $modx->regClientCSS('/путь/media.css'); Вопросы / Какой компонент нужен сообществу? 101 +3 1
[videoGallery] Видео галерея YouTube, Vimeo Невозможно установить пакет с подписью: videogallery-1.4.0-beta Ошибка установки Error в /core/packages/videogallery-1.4.0-beta/modCategory/7fc931a7772edc9752c16e9c41eb5e52.reso...
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Привет, добавил пользователя в группу mxBoard(4), создал токен. Добавляю все в postman пишет: rest: { «success»: false, «message»: «Недействительный токен.», «data...
Релиз miniShop2 ver. 4.4.1 & 4.4.2 Подскажите пожалуйста, может я что-то не знаю или упустил. Но есть ли решение по глюку с radio? Указываешь свое radio c одинаковым name и в результате при переключении получаешь вс...
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Расскажите пожалуйста как вы настраиваете сайт на MODX 3 чтобы был dev, prod, stage. Можете описать workflow? Допустим у меня 80% — это магазины, там клиенты, продажи, все онлай...
MaxNotify Обновление компонента 1.3.0-pl (22.07.2026) — добавлено автоматическое получение полей через msOrder->toArray(); — массивы и объекты безопасно пропускаются; — стандартные...
MyFavorites MyFavorites — 3.0.0-beta Первая версия для MODX Revolution 3.x — компонент полностью переписан с нуля (PHP >= 8.4, namespaced-ядро MODX 3, PSR-4, сервис-ориентированная архит...
Так ведь намного лучше
Создаём чанк ajaxForms:
Это единый чанк, в котором вызывается сниппет ajaxForm с необходимыми параметрами.
В моём случае каждая отдельная форма — это отдельный чанк. Если эти чанки мало чем различаются, то можно использовать extends из fenom, переписывая лишь изменяющиеся значения, а остальное не трогать.
И далее в шаблоне страницы вызов нужной формы:
В нём мы подменили значения, передающиеся в чанк ajaxForm.
Пример чанка callback с формой:
Если нужно вызвать похожую форму но с другим заголовком и другими параметрами, то создадим чанк question, который наследует чанк callback:
И вызов этой формы в шаблоне страницы:
Таким образом, для всех форм мы можем задать единые параметры вызова сниппета ajaxForm, и при необходимости перезаписать их. А также под каждую форму либо создать отдельные чанки, либо унаследовать от одного чанка кучу других с индивидуальными параметрами.
Дополнительно я скрываю уведомления jgrowl js-скриптом:
Все уведомления об ошибках показываются под полями форм, в коде span c классом error. А если форма успешно отправлена, то с помощью скрипта выше мы скрываем popup-форму, если она была открыта, и показываем другое popup-окно:
Оно же всплывает и при отправке обычных не popup-форм. Да, насчёт popup-окон, актуально при использовании flexbox3.
2. В форму добавляете скрытое поле
а в чанке письма уже
Заменить «СЮДА ID РОДИТЕЛЯ» на реальный ID, подставить свои значения по размерам изображений.
Да, это пример взятый из документации с pdoPage (постраничной навигацией), можно вывести просто через pdoResources
Тегами modx:
Или, например, вот так (не помню для чего, но как-то возникла проблема с предыдущим вариантом, которая решилась нижеописанным примером):
Подробнее (eng)