Однако, надо обладать хоть какими-то познаниями и, например, не каждый дизайнер или верстальщик сможет, да и захочет, с ней разбираться.
Периодически я вижу, что на сайтах, например, заявки или каталог, наполняемый с фронтенда реализуется с помощью ресурсов. Но ресурсы не всегда подходят для этого. Сегодня я покажу, как просто и быстро добавить новый объект в 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? И как правильно его указать?
[[pdoResources? &class=`customExtraItem` &loadModels=`customextra` &sortby=`id` &where=`{"active":1,"string1:LIKE":"%@mail.ru%","id1:>":1000}` &tpl=`tpl.requests` ]]А можно ли сделать для нескольких форм?
в голову приходит только скрытое поле, для каждой формы. Но было бы круто сделать фильтр по этому полю как в FormSave, чтобы можно было выбрать необходимую форму.
<?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']); switch ($modx->resource->id) { case 16: $request->set('string2', 'Форма на странице контактов'); break; case 21: $request->set('string2', 'Форма в футере'); break; default: $request->set('string2', 'Другая форма'); break; } $request->set('description', $_POST['text']); $request->save(); return true;В админке фильтров нет, но есть сортировка по любому полю.Если надо иметь один функционал и один набор полей на нескольких сайтах, то нужно брать modExtra и писать свой компонент.
customExtra нужен для быстрой реализации каконо-то кастомного функционала, который вряд ли где-то еще понадобится копировать.
Например, недавно надо было реализовать генерацию номера заявки — вот, просто сохраняешь заявки в базе и на основе id-шника присваиваешь заявке номер.
Для этого, к сожалению, придется MIGX использовать…
Во-первых — спасибо тебе большое за твой труд!!! Молодец!!! Очень много интересной, а, главное, полезной информации.
Вот у меня вопрос, а точнее небольшой затык.
Может быть и не сюда мне нужно писать, но я незнаю куда правильно написать, а вопрос в следующем:
ты пишешь «Например, недавно надо было реализовать генерацию номера заявки — вот, просто сохраняешь заявки в базе и на основе id-шника присваиваешь заявке номер.» А можешь поподробнее рассказать как это сделано.
Вот что я хочу добиться у себя на сайте:
Есть ряд форм (AjaxForm+FormIt), в которых указываются имя, телефон, емайл и прикрепляется файл. И при успешной отправке, на странице нужно выводить сообщение "[[Имя]], Ваша заявка принята. Номер Вашей заявки [[Номер заявки]]." И информацию из заполненных полей формы записывать в БД.
Так вот вопрос (я не очень селен в бэкэнде, да и с xPDO только начал разбираться), как реализовать во всплывающем сообщении показ присвоенного номера заявки? И, если не составит труда, расскажи, как записать файл в БД. (Или как сохранить файл в какую-нибудь директорию на сервере, а в БД записать путь к этому файлу).
Спасибо!
[[!FormIt? &hooks=`saveRequest,email` ]]Тогда сначала будет выполнен этот сниппет. А в сниппете уже писать код, который сохранит и выведет все поля (в статье пример есть).Но, конечно, без навыков программирования, реализовать это будет сложно. Если хочется разобраться самому, то не надо жалеть времени и читать, пробовать. Если нужно для коммерческого сайта реализовать, проще написать объявление о работе на modx.pro — там немало специалистов, готовых помочь даже в такой мелкой проблеме.
Вот если я пишу вот так:
Вызов формы:
Сниппет «SaveOrder»:
<?php $order = $modx->newObject('Orderform'); $order->set('name', $_POST['name']); $order->set('email', $_POST['email']); $order->set('phone', $_POST['phone']); $order->set('fromform', $_POST['fromform']); $order->save(); $num = $order->get('id'); $modx->setPlaceholder('numord', $num); return true;то в БД запись происходит, но вот вывод значения в плейсхолдер numord не происходит.Я думаю, что я где-то близко, только не пойму, что я не так делаю.
Если не трудно, можешь поделиться опытом, и подсказать что я делаю не так?
Спасибо!!!
Чтобы заказы удалились, вместе с пользователем.