Однако, надо обладать хоть какими-то познаниями и, например, не каждый дизайнер или верстальщик сможет, да и захочет, с ней разбираться.
Периодически я вижу, что на сайтах, например, заявки или каталог, наполняемый с фронтенда реализуется с помощью ресурсов. Но ресурсы не всегда подходят для этого. Сегодня я покажу, как просто и быстро добавить новый объект в MODX. Да, в очередной раз =)
Сегодня речь пойдет о компоненте customExtra. С его помощью мы будем сохранять просьбы перезвонить в админке.
customExtra — это полностью то же самое, что и modExtra, только в нем помимо полей name, description и active добавлено 10 строковых полей, 10 числовых полей (integer) и 5 тестовых областей (textarea). Ну, и еще этот компонент размещен в репозитории, чтобы можно было скачать и установить, а не «собирать».
После установки в системных настройках нужно указать, сколько полей каждого вида нам надо.
Там же можно указать, какие из чекбоксов вам нужны, и в каком порядке их выводить в окнах создания и редактирования.
Все заголовки полей редактируются в словарях
В форме заявок нужно добавить хук, назовём его, к примеру saveRequest
[[!FormIt? &hooks=`spam,saveRequest,email,redirect` &emailTo=`ilyautkin@mail.ru` &emailSubject=`Заказ обратного звонка` &emailTpl=`tpl.mail.contact` &redirectTo=`5` ]]В сниппете создадим объект и сохраним его
<?php $modx->addPackage('customextra', $modx->getOption('core_path').'components/customextra/model/'); $request = $modx->newObject('customExtraItem'); $request->set('name', $_POST['name']); $request->set('string1', $_POST['contact']); $request->set('description', $_POST['text']); $request->save(); return true;У меня используется FormIt, но будет работать и с AjaxForm.
Теперь заявки не только отправляются на почту, но и сохраняются в базе данных, причем их можно увидеть в админке:
Созданные объекты можно вывести и на самом сайте — с помощью pdoTools. Нужно только указать класс объектов и по какому полю сортировать:
[[pdoResources? &class=`customExtraItem` &loadModels=`customextra` &sortby=`id` &tpl=`tpl.requests` ]]
Подскажите, а будет ли работать параметр &where? И как правильно его указать?
А можно ли сделать для нескольких форм?
в голову приходит только скрытое поле, для каждой формы. Но было бы круто сделать фильтр по этому полю как в FormSave, чтобы можно было выбрать необходимую форму.
В админке фильтров нет, но есть сортировка по любому полю.
Если надо иметь один функционал и один набор полей на нескольких сайтах, то нужно брать modExtra и писать свой компонент.
customExtra нужен для быстрой реализации каконо-то кастомного функционала, который вряд ли где-то еще понадобится копировать.
Например, недавно надо было реализовать генерацию номера заявки — вот, просто сохраняешь заявки в базе и на основе id-шника присваиваешь заявке номер.
Для этого, к сожалению, придется MIGX использовать…
Во-первых — спасибо тебе большое за твой труд!!! Молодец!!! Очень много интересной, а, главное, полезной информации.
Вот у меня вопрос, а точнее небольшой затык.
Может быть и не сюда мне нужно писать, но я незнаю куда правильно написать, а вопрос в следующем:
ты пишешь «Например, недавно надо было реализовать генерацию номера заявки — вот, просто сохраняешь заявки в базе и на основе id-шника присваиваешь заявке номер.» А можешь поподробнее рассказать как это сделано.
Вот что я хочу добиться у себя на сайте:
Есть ряд форм (AjaxForm+FormIt), в которых указываются имя, телефон, емайл и прикрепляется файл. И при успешной отправке, на странице нужно выводить сообщение "[[Имя]], Ваша заявка принята. Номер Вашей заявки [[Номер заявки]]." И информацию из заполненных полей формы записывать в БД.
Так вот вопрос (я не очень селен в бэкэнде, да и с xPDO только начал разбираться), как реализовать во всплывающем сообщении показ присвоенного номера заявки? И, если не составит труда, расскажи, как записать файл в БД. (Или как сохранить файл в какую-нибудь директорию на сервере, а в БД записать путь к этому файлу).
Спасибо!
Тогда сначала будет выполнен этот сниппет. А в сниппете уже писать код, который сохранит и выведет все поля (в статье пример есть).
Но, конечно, без навыков программирования, реализовать это будет сложно. Если хочется разобраться самому, то не надо жалеть времени и читать, пробовать. Если нужно для коммерческого сайта реализовать, проще написать объявление о работе на modx.pro — там немало специалистов, готовых помочь даже в такой мелкой проблеме.
Вот если я пишу вот так:
Вызов формы:
Сниппет «SaveOrder»:
то в БД запись происходит, но вот вывод значения в плейсхолдер numord не происходит.
Я думаю, что я где-то близко, только не пойму, что я не так делаю.
Если не трудно, можешь поделиться опытом, и подсказать что я делаю не так?
Спасибо!!!
Чтобы заказы удалились, вместе с пользователем.