You are hereБлоги / Ёж's blog / Уберкарт - Продажа аккредитации на матч, ч. 2

Уберкарт - Продажа аккредитации на матч, ч. 2


Ёж 15 August 2009

Уберкарт - Продажа аккредитации на матч, ч. 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);
    }
  }
}

 Как видите мы здесь просто находим все продукты соответствующего заказа, выбираем поля ноды field_status и field_id и присваиваем им необходимые значения. Всё. Сохраняйте все изменения. 

 Теперь у нас есть полностью работающая система. Пробуйте купить аккредитацию на матч (можете использовать для этого механизм Test Gateway). После того как у Вас несколько человек купят аккредитацию - появится будет ряд нод типа Журналист, у которых будут заполнены поля Статус и ID (в поле Статус будет записано значение 1). Можете использовать Views и вывести в блоке или на любой странице Вашего сайта вид, в котором будут указаны все те журналисты, которые купили у Вас аккредитацию (для этого например можно использовать фильтр - Статус=1). Если не получится что-либо, можете задавать вопросы - я отвечу.

 Оригинал адптированной статьи тут.

 Спасибо за внимание. Играйте в футбол! :)  

  

 

]]>]]>

RSS-материал