[Решено] Отображение поля при условии, что заказ оплачен.

Главные вкладки

Аватар пользователя TurboPixel TurboPixel 16 августа 2012 в 17:10

Привет.
Настраиваю связку D7 + commerce. Вопрос вот в чем:
в продукте есть поле "Файлы". Для всех оно по умолчанию скрыто. Как его показать только для покупателя, чей заказ оплачен?

Не совсем до конца понимаю, как настроить рулзы. Event и Conditions установил следующие:
EVENТ - After updating an existing commerce order
ELEMENTS - Data comparison
Parameter: Data to compare: [commerce-order:status], Data value: Checkout: Completе.

А вот с actions пока не понял. Есть идеи? Или, может, этот вопрос можно решить по-другому, не трогая рулзы?

Буду признателен за помощь.

UPD:
Использовал вот это решение. Может, кому пригодится.

Комментарии

Аватар пользователя xxandeadxx xxandeadxx 16 августа 2012 в 17:28

с помощью Rules это вряд ли получится, можно в препроцессе поколдовать:

function themename_preprocess_node(&$vars) {
  if ($vars['type'] == 'product_display' && пользователь_не_купил_товар) {
    $vars['content']['имя_поля']['#access'] = FALSE;
  }
}
Аватар пользователя xxandeadxx xxandeadxx 16 августа 2012 в 17:51

1. найти все заказы юзера
2. обойти заказы и найти заказанные товары
3. обойти заказанный товары и найти нужный

Аватар пользователя TurboPixel TurboPixel 16 августа 2012 в 17:54

Нашел запрос к БД, который вытягивает все Product IDs, которые юзер купил и status = completed:

<?php
  
// Assuming we have $user populated with the user's ID:
  
$query db_select('commerce_order''cord');
  
$query->join('commerce_line_item''li''cord.order_id = li.order_id');
  
$query->join('field_data_commerce_product''prod''li.line_item_id = prod.entity_id');
  
$query->condition('cord.uid'$user'=')
        ->
condition('cord.status''completed''=')
        ->
fields('prod', array('commerce_product_product_id'));
  
$result $query->execute();
?>