Уберкарт - Продажа аккредитации на матч, ч. 2
Итак, продолжим описывать нашу гипотетическую ситуацию о том, как Василий Уткин покупал аккредитацию на матч Россия - Аргентина через наш сайт.
Следующее, что нам нужно сделать, это ассоциировать тип материала Журналист (registrant_profile) с текущим событием, то есть с матчем Россия - Аргентина, на который мы и продаём аккредитацию.
Следуем на страницу /admin/store/settings/node-checkout. Это страница настроек Node Checkout. Среди типов материалов, перечисленных там, выбирает тип материала Журналист и нажимаем на edit (редактировать) напротив этого типа. В поле Product NID - нужно ввести ID ноды, которая является тем самым событием. Если вы не знаете номер, то его можно посмотретьна страницы ноды (например, node/1 - 1 значит и будет являться нашим NID).
Далее, среди Restricted Node fields (Ограниченные поля ноды) нужно выбрать оба поля (Статус и ID), таким образом эти поля будут скрыты от всех, кто не имеет разрешения редактировать ноды данного типа.
Теперь попробуйте выйти и зайти на сайт как простой смертный (т.е. как незарегистрированный пользователь). Попробуйте создать тип материала Журналист. Как видите, при его создании полей Cтатус и ID Вам не видно.
Последнее что нужно сделать для того, чтобы получить полностью работающую систему, это использовать модуль Conditional Actions. То есть, нам нужно прописать некое действие как реакцию на событие - реакцией в данном случае будет то, что кто-либо оплатил аккредитацию на матч. Мы это сделаем путём использования полей Статус и ID - в поле статуса будем записывать 1 (как символ того, что человек на матч аккредитован). А в поле ID будет записан ID заказа, который будет выдаваться при покупке аккредитации. Итак, проходите на страницу настроек Conditional Actions (By Trigger) /admin/store/ca. Щёлкаем на кнопке Add predicate (Добавить утверждение):

То есть в наши скрытые поля будет что-то записано только тогда, когда аккредитация будет куплена (Customer completes checkout). Теперь добавляем некое состояние(условие) Add a condition, нажимая на вкладке Conditions на странице настроек утверждения Обновляем статус журналиста. Ну и там будет кнопка Add condition, нажимаем её и вводим то, что нам нужно:

При добавлении кондиции важно выбрать из списка Check an order's products. В списке продуктов (товаров) выбираем наш event01.
Выбираем всё это - сохраняем изменения. Теперь необходимо зайти на вкладку Actions (Действия) и выбрать "Execute Custom PHP code" (Исполнить PHP-код). Изменить заголовок можете на "Изменить поля профиля" и ввести нижеследующий PHP-код:
if (isset($order)) {
foreach ($order->products as $product) {
if (isset($product->data['node_checkout_nid'])) {
$node = node_load($product->data['node_checkout_nid']);
$node->field_status['0']['value'] = 1;
$node->field_id['0']['value'] = $order->order_id;
node_save($node);
}
}
}
if (isset($order)) {
foreach ($order->products as $product) {
if (isset($product->data['node_checkout_nid'])) {
$node = node_load($product->data['node_checkout_nid']);
$node->field_status['0']['value'] = 1;
$node->field_id['0']['value'] = $order->order_id;
node_save($node);
}
}
}Как видите мы здесь просто находим все продукты соответствующего заказа, выбираем поля ноды field_status и field_id и присваиваем им необходимые значения. Всё. Сохраняйте все изменения.
Теперь у нас есть полностью работающая система. Пробуйте купить аккредитацию на матч (можете использовать для этого механизм Test Gateway). После того как у Вас несколько человек купят аккредитацию - появится будет ряд нод типа Журналист, у которых будут заполнены поля Статус и ID (в поле Статус будет записано значение 1). Можете использовать Views и вывести в блоке или на любой странице Вашего сайта вид, в котором будут указаны все те журналисты, которые купили у Вас аккредитацию (для этого например можно использовать фильтр - Статус=1). Если не получится что-либо, можете задавать вопросы - я отвечу.
Оригинал адптированной статьи .
Спасибо за внимание. Играйте в футбол! :)


