[rdy] Как удалить атрибут у товара?

Втр, 02/08/2011 - 13:41

в идеале хочется удалить все атрибуты у товара c nid. или атрибут aid у товара c nid.
Знает кто-нибудь как?

0 Спасибо

Комментарии

Аватар пользователя Cozmi
5 лет 8 months назад Cozmi #

cпс. но на чистом VBO вроде нету такой возможности. из полезного там только: публиковать -не публиковать и удаление

0 Спасибо
Аватар пользователя Sun-fire
5 лет 8 months назад Sun-fire #

По идее копать нужно в эту сторону:

Rules can be used to create custom actions to use with Views Bulk Operations. It can also be used to call bulk operation views programmatically.

0 Спасибо
Аватар пользователя Cozmi
5 лет 8 months назад Cozmi #

я понимаю это. если бы была сама ф-я, которая удаляла бы атрибут например uc_delete_attribute($aid, $nid); то остальное не проблема

0 Спасибо
Аватар пользователя CSoft
5 лет 8 months назад CSoft #

Прям такой готовой функции нет, но я думаю, что на основе функции uc_attribute_delete_confirm_submit смастерить свою для данной цели не будет сложно.

Простые запросы к базе, это можно сделать и вообще самому:

db_query("DELETE FROM {uc_product_attributes} WHERE aid = %d AND nid = %d", $aid, $nid);

И не забыть опции ухватить за собой, второй запрос написать.

0 Спасибо
Аватар пользователя Xermit
5 лет 8 months назад Xermit #

Думаю смотреть надо функцию uc_attribute_delete_confirm_submit
да и дергать лучше ее же, передав нужные аргументы.

function uc_attribute_delete_confirm_submit($form, &$form_state) {
  if ($form_state['values']['confirm']) {
    db_query("DELETE FROM {uc_class_attribute_options} WHERE EXISTS (SELECT * FROM {uc_attribute_options} AS ao WHERE {uc_class_attribute_options}.oid = ao.oid AND ao.aid = %d)", $form_state['values']['aid']);
    db_query("DELETE FROM {uc_class_attributes} WHERE aid = %d", $form_state['values']['aid']);
    db_query("DELETE FROM {uc_product_options} WHERE EXISTS (SELECT * FROM {uc_attribute_options} AS ao WHERE {uc_product_options}.oid = ao.oid AND ao.aid = %d)", $form_state['values']['aid']);
    db_query("DELETE FROM {uc_product_adjustments} WHERE EXISTS (SELECT * FROM {uc_product_attributes} AS pa WHERE {uc_product_adjustments}.nid = pa.nid AND pa.aid = %d)", $form_state['values']['aid']);
    db_query("DELETE FROM {uc_product_attributes} WHERE aid = %d", $form_state['values']['aid']);
    db_query("DELETE FROM {uc_attribute_options} WHERE aid = %d", $form_state['values']['aid']);
    db_query("DELETE FROM {uc_attributes} WHERE aid = %d", $form_state['values']['aid']);
    drupal_set_message(t('Product attribute deleted.'));
  }
}
0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

CSoft -- там не одна таблица в том то и дело.
Xermit я тоже находил эту ф-ю, однако в ней нет упоминания о ноде. придется просматривать все эти таблицы и искать там nid.

0 Спасибо
Аватар пользователя CSoft
5 лет 7 months назад CSoft #
Cozmi написал:
CSoft -- там не одна таблица в том то и дело.

Посмотрел Ваш профиль - столько времени на сайте, разве не можете несколько простых запросов к базе оформить?

Таблицы, которые Вам нужны:

uc_product_adjustments
uc_product_attributes
uc_product_options

Удалите оттуда все строки, что связаны с Вашей нодой и нужным атрибутом. По готовым функциям из самого модуля uc_attribute подсмотрите запросы, добавьте в них условие отбора по nid.

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

могу, но иногда бывает лениво, хочется пообщаться на русскоязычном форуме. спасибо

0 Спасибо
Аватар пользователя Xermit
5 лет 7 months назад Xermit #
0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

спасибо за поддержку, так и сделаю.

0 Спасибо