Атрибуты в Ubercart. Как сделать автоимтическое присвоение значений?

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

Аватар пользователя N-N N-N 23 декабря 2009 в 10:45

Использую атрибуты для получения доп. сведений при оформлении заказа. Все хорошо, но мне нужно, чтобы один из атрибутов получал значение из поля SKU автоматически, без участия пользователя. Как это сделать?

Комментарии

Аватар пользователя N-N N-N 23 декабря 2009 в 12:53

Nikit, прошу извинить, но я ничего похожего найти не смог. Возможно из-за того, что не совсем умею пользоваться своеобразным поиском на этом сайте. Находит он много чего, еще бы находил нужное - цены бы ему не было Smile Не могли бы вы указать ссылку на эту тему? Заранее спасибо.

Аватар пользователя Обухов Никита Обухов Никита 23 декабря 2009 в 17:59

1) hook_form_alter - добавляете свою функцию обработки формы product_node_form

function mymodule_form_alter(&$form, $form_state, $form_id) {
if ($form_id == product_node_form) {
$form['#submit'][] = 'my_form_submit';
}
}

2)

<?php
my_form_submit
($form, &$form_state) {
  
// тут надо глянуть значения формы и найти SKU
  
drupal_set_message('Values: ' print_r($form_state['values'], 1));
  
// К примеру оно хранится в $form_state['values']['sku'];
  
$sku $form_state['values']['sku'];
  
$nid $form_state['values']['nid']; 
  
// тут парсите $sku и получаете значение AID атрибута и OIDs опций из артикула
  // К примеру, AID = 1, OIDs = array(1, 2)
  
$aid 1;
  
$oids = array(12);
  
// Загрузка атрибута
  
$attr uc_attribute_load($aid);
  if (
$attr) {
   
//  Если нужен всего 1 атрибут
    
db_query("UPDATE {uc_product_attributes} SET aid = %d, label = '%s' WHERE nid = %d"$aid$attr->label$nid);
    if (!
db_affected_rows()) {
      
// Вставляем новую запись
      
[user=db_query]db_query[/user]("INSERT INTO {uc_product_attributes} (nid, aid, label) VALUES (%d, %d, '%s')"$nid$aid$attr->label);
    }
    foreach (
$attr->options as $oid => $option) {
      if (
in_array($oid$oids)) {
        
// Добавляем опции к продукту
        
db_query("INSERT IGNORE INTO {uc_product_options} (nid, oid) VALUES (%d, %d)"$nid$oid);
        }
    }
  }
}
?>

Надо проверять конечно, попробуйте так для начала.

Кроме того, нужна будет запись в таблице uc_product_adjustments, чтобы Уберкарт отличал товары с разными опциями. Т.е. нужен будет еще SubSKU

Аватар пользователя N-N N-N 23 декабря 2009 в 17:56

Обухов Никита, спасибо большое, буду пробовать. Хотя сначала надо будет понять, куда это все записывать и что этот код делает Smile (я новичек в веб-программировании на РНР вообще и в друпале в частности). Может, кто нибудь знает уже готовый модуль, который это делает?

Аватар пользователя N-N N-N 24 декабря 2009 в 12:47

Спасибо за инфу, буду разбираться. Я когда искал ответ по моей теме, наткнулся на на эту http://www.ubercart.org/forum/support/590/dynamic_attributes. Но в силу слабого знания друпала так и не понял, подойдет это мне или нет. Это случайно не еще один способ решения моего вопроса? Насколько я понял, в этом варианте в качестве значений атрибутов можно назначить результат Views. Проверить опять же не смог, т.к. не понял, как поставить этот патч, который amitaibu тут предлагает - http://drupal.org/node/271928 .