Übercart opciók alapértelmezése legyen mindig az aktuális

aboros képe

A bolt képeket árul. Nem minden képet lehet minden méretben kapni, viszont minden képnek azonos az ára azonos méret esetén. 8-10 képméret van, 30x30cm, 40x40cm, .. 100x100cm stb.

Bekapcsoltam az 'Attribute modult' és létrehozam egy 'Méret' nevű paramétert, amiben opciókként létrehoztam a megadott méreteket. Mindegyikhez beírtam a bekerülési költségét és az árát. A termékek ára 0,- az árak csak a méret paramétertől függnek.
Mikor beküldök egy képet, hozzáadom a 'Méret' paramétert, és beikszelem, hogy melyik méreteket lehet rendelni az adott képből.

Eddig ez rendben is van és szuperül működik is, a problémám akkor van, ha valaminek változik az ára. Ha a paraméterek adminisztrációjánál valamelyik méret árát átírom, mert mondjuk infláció, akkor a már létező termékek erre nem reagálnak, marad a régi ár azoknál. Csak akkor frissül, ha eltávolítom a paramétert és újra megadom azt, ami már néhány tucat terméknél is idegesítő, többszáz képnél őrület lesz, ha mondjuk emelkedik a 80x80 -as méret ára, akkor minden egyes terméknél be kell írnom azt?

Milyen megoldás felé kutassak? Sajnos sehol nem tudtam olyat beállítani, hogy egy adott paraméter ára nem változtatható minden egyes node-nál, hanem fix. :(

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
formatester képe

Az ár tömeges változtatásának lehetősége nincs benne az alap ubercartban, az attributumok paraméterei csak alapértelmezett értékként szolgálnak egy új termék létrehozása során amit tetszőlegesen felül lehet írni. Amit neked módosítani kell az az uc_product_options tábla megfelelő értékei, egy kisebb modullal vagy ha ritkán van szükség akár egy sql script segítségével.

üdv: B
http://nunu.hu

0
0
aboros képe

miközben d.o -ra küldtem support request issue -t, rájöttem, hogy egy egyszerű modullal átlőhetek minden árat a jelenleg alapértelmezettre.
sajnos ez életem első übercart oldala, ezért néha még nem tudom, hogy mit-hogyan. azt gondoltam, hogy erre kell legyen valami out-of-the-box megoldás az übercartban, de nincs.

adatbázisban menet közben már megtaláltam az említett táblát (nem csak várom, hogy hátha jön a megoldás, hanem dolgozok rajta) úgyhogy már készül is az "attribute price resetter" modulom, igazából kész is csak még tesztelem. ha ok, megosztom.

de azért kösz ám! ;)

0
0

-
clear: both;

formatester képe

Kiváncsian várom a megoldásodat, ha kész lesz légyszi jelezd hol lesz elérhető!

0
0
aboros képe

aminek viszont nem találom az okát. iderakom az egész modult, hátha valakinek jó ötleteket adhat, mindenesetre problémám annyi, hogy az update lekérdezésem szépen lefut, de maki vagyok és nem tudom a db_num_rows -t rendesen használni, elhasal azzal a hibaüzenettel, hogy:

mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given - /home/... .../includes/database.mysqli.inc - 202. sor.

modulom:

function uc_price_reset_menu($may_cache) {
	$items = array();
	$items[] = array(
		'path' => 'admin/store/products/price_reset',
		'title' => t('Price reset'),
  	'callback' => 'uc_price_reset_adminpage',
  	'access' => user_access('administer products')
  );
	return $items;
}
function uc_price_reset_adminpage() {
	$content = '<p>The button below updates <em>Size</em> attribute prices to the current default of those.</p>';
	$content .= drupal_get_form('uc_price_reset_form');
	return $content;
}
function uc_price_reset_form() {
	$form['submit'] = array('#type' => 'submit', '#value' => t('Reset size prices now!'));
	return $form;
}
function uc_price_reset_form_submit($form_id, $form_values) {
	$options = db_query("SELECT * FROM {uc_attribute_options} WHERE aid=%d", 2);
	$items = array();
	while ($option = db_fetch_object($options)) {
		$update = db_query("UPDATE {uc_product_options} SET cost=%d, price=%d WHERE oid=%d", $option->cost, $option->price, $option->oid);
		$items[] = array(
			'option: ' . $option->name . ' set to',
			'children' => array(
				'cost: ' . $option->cost,
				'price: ' . $option->price,
				'products affected: ' . db_num_rows($update) #itt van a gyasz. elhagyom a db_num_rows -t es csak az $update -et biggyesztem oda, akkor '1' az ertek
			)
		);
	}
  drupal_set_message(theme('item_list', $items));
}

mindenesetre a dolgát megcsinálja, persze semennyire nem megosztható, inkább ilyen hekkmodul, például (egyelőre) bele van égetve, hogy a 2 idjű paramétert reseteli. :)

szeretném, ha valaki megmondaná miért boolean az $update értéke?
api -n ezt olvasom:

db_num_rows($result);

$result A database query result resource, as returned from db_query().

dehát pont ezt csinálom...

$update = db_query(...
$num = db_num_rows($update);

és nem. :(

0
0

-
clear: both;

aboros képe

api doksi szerint a db_query az eredménnyel tér vissza vagy FALSE -al, ha nem futott le a lekérdezés. akkor hogyan lehet 1 az értéke (TRUE??).. rejtély.

0
0

-
clear: both;

aboros képe

autodidaktizmus átka... :)

lehet, hogy az "UPDATE" típusú lekérdezés az nem ad vissza semmit csak egy truet ha lefut és ezt én nem tudom?
(mármint az lehet, hogy nem tudom, de az lehet, hogy ez a helyzet?)

többet nem uppolok. :D

0
0

-
clear: both;

york képe

Ha jol emlekszem d6-ban nem tamogatott a db_num_rows: http://drupal.org/node/114774#db-num-rows
UPDATE, INSERT es meg sokan masok csak TRUE/FALSE ertekkel ternek vissza.

0
0
aboros képe

de tuti az van igen, hogy az update csak truet ad.

0
0

-
clear: both;

Illyés Edit képe

aboros képe

köszi ez megszámolja tényleg.

tehát akkor az uc_price_reset.module:

function uc_price_reset_menu($may_cache) {
	$items = array();
	$items[] = array(
		'path' => 'admin/store/products/price_reset',
		'title' => t('Price reset'),
  	'callback' => 'uc_price_reset_adminpage',
  	'access' => user_access('administer products')
  );
	return $items;
}
function uc_price_reset_adminpage() {
	$content = '<p>The button below updates <em>Size</em> attribute prices to the current default of those.</p>';
	$content .= drupal_get_form('uc_price_reset_form');
	return $content;
}
function uc_price_reset_form() {
	$form['submit'] = array('#type' => 'submit', '#value' => t('Reset size prices now!'));
	return $form;
}
function uc_price_reset_form_submit($form_id, $form_values) {
 
#watch out!!! attribute id is directly entered into the query below!!!

	$options = db_query("SELECT * FROM {uc_attribute_options} WHERE aid=%d", 2);
	$items = array();
	while ($option = db_fetch_object($options)) {
		$update = db_query("UPDATE {uc_product_options} SET cost=%d, price=%d WHERE oid=%d", $option->cost, $option->price, $option->oid);
		$items[] = array(
			'option: ' . $option->name . ' set to',
			'children' => array(
				'cost: ' . $option->cost,
				'price: ' . $option->price,
				'products affected: ' . db_affected_rows($update)
			)
		);
	}
  drupal_set_message(theme('item_list', $items));
}
0
0

-
clear: both;