Использую атрибуты для получения доп. сведений при оформлении заказа. Все хорошо, но мне нужно, чтобы один из атрибутов получал значение из поля SKU автоматически, без участия пользователя. Как это сделать?
Nikit, прошу извинить, но я ничего похожего найти не смог. Возможно из-за того, что не совсем умею пользоваться своеобразным поиском на этом сайте. Находит он много чего, еще бы находил нужное - цены бы ему не было Не могли бы вы указать ссылку на эту тему? Заранее спасибо.
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(1, 2); // Загрузка атрибута $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
Обухов Никита, спасибо большое, буду пробовать. Хотя сначала надо будет понять, куда это все записывать и что этот код делает (я новичек в веб-программировании на РНР вообще и в друпале в частности). Может, кто нибудь знает уже готовый модуль, который это делает?
Спасибо за инфу, буду разбираться. Я когда искал ответ по моей теме, наткнулся на на эту http://www.ubercart.org/forum/support/590/dynamic_attributes. Но в силу слабого знания друпала так и не понял, подойдет это мне или нет. Это случайно не еще один способ решения моего вопроса? Насколько я понял, в этом варианте в качестве значений атрибутов можно назначить результат Views. Проверить опять же не смог, т.к. не понял, как поставить этот патч, который amitaibu тут предлагает - http://drupal.org/node/271928 .
Комментарии
только недавно (3-4 дня назад) спрашивали. Поиск.
Nikit, прошу извинить, но я ничего похожего найти не смог. Возможно из-за того, что не совсем умею пользоваться своеобразным поиском на этом сайте. Находит он много чего, еще бы находил нужное - цены бы ему не было Не могли бы вы указать ссылку на эту тему? Заранее спасибо.
извиняюсь, не так понял вопрос.
а там был ответ на тему http://www.ubercart.org/contrib/4307 которая ок-сь не втему.
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(1, 2);
// Загрузка атрибута
$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
Обухов Никита, спасибо большое, буду пробовать. Хотя сначала надо будет понять, куда это все записывать и что этот код делает (я новичек в веб-программировании на РНР вообще и в друпале в частности). Может, кто нибудь знает уже готовый модуль, который это делает?
Это в вашем собственном модуле. Как его создать ищите в гугле.
Непонятные функции смотрите на http://php.net & http://api.drupal.org
Вряд ли есть такой модуль. http://drupalmodules.com/ - в помощь.
Спасибо за инфу, буду разбираться. Я когда искал ответ по моей теме, наткнулся на на эту http://www.ubercart.org/forum/support/590/dynamic_attributes. Но в силу слабого знания друпала так и не понял, подойдет это мне или нет. Это случайно не еще один способ решения моего вопроса? Насколько я понял, в этом варианте в качестве значений атрибутов можно назначить результат Views. Проверить опять же не смог, т.к. не понял, как поставить этот патч, который amitaibu тут предлагает - http://drupal.org/node/271928 .