And63 Posted December 27, 2013 Share Posted December 27, 2013 (edited) Jeśli dodajemy specjalne na dany produkt dla grup klientów to do wyboru mamy albo wszystkie grupy, albo dodawanie każdej grupy osobno. Jak zrobić żeby za jednym zamachem dodaś obniżkę ceny dla kilku grup za jednym zamachem. Moje próby nie przynoszą efektu. W częsci admina w templatkach, a konkretnie w \admin_123\themes\default\template\controllers\products\prices.tpl jest kod odpowiedzialny za formularz: <select name="sp_id_group" id="sp_id_group" > <option value="0">{l s='All groups'}</option> {foreach from=$groups item=group} <option value="{$group.id_group}">{$group.name} </option> {/foreach} </select> Zmieniłem go na: <select multiple name="sp_id_group" id="sp_id_group" size="8" > <option value="0">{l s='All groups'}</option> {foreach from=$groups item=group} <option value="{$group.id_group}">{$group.name} </option> {/foreach} </select> Efekt jest taki, że mogę dokonać multiwyboru grup klientów, ale jak dam zapisz to dodaje cenę specjalną tylko do jednej grupy klientów - do tej o najwyższym ID. chodzi dokładnie o ten formularz zaznaczony czerwoną ramką: Macie jakiś pomysł żeby zadziałał multiwybór ? Edited December 27, 2013 by And63 (see edit history) Link to comment Share on other sites More sharing options...
0 vekia Posted December 29, 2013 Share Posted December 29, 2013 tak, chodzi o funkcję: public function processPriceAddition() { // Check if a specific price has been submitted if (!Tools::getIsset('submitPriceAddition')) return; $id_product = Tools::getValue('id_product'); $id_product_attribute = Tools::getValue('sp_id_product_attribute'); $id_shop = Tools::getValue('sp_id_shop'); $id_currency = Tools::getValue('sp_id_currency'); $id_country = Tools::getValue('sp_id_country'); $id_group = Tools::getValue('sp_id_group'); $id_customer = Tools::getValue('sp_id_customer'); $price = Tools::getValue('leave_bprice') ? '-1' : Tools::getValue('sp_price'); $from_quantity = Tools::getValue('sp_from_quantity'); $reduction = (float)(Tools::getValue('sp_reduction')); $reduction_type = !$reduction ? 'amount' : Tools::getValue('sp_reduction_type'); $from = Tools::getValue('sp_from'); if (!$from) $from = '0000-00-00 00:00:00'; $to = Tools::getValue('sp_to'); if (!$to) $to = '0000-00-00 00:00:00'; if ($reduction_type == 'percentage' && ((float)$reduction <= 0 || (float)$reduction > 100)) $this->errors[] = Tools::displayError('Submitted reduction value (0-100) is out-of-range'); elseif ($this->_validateSpecificPrice($id_shop, $id_currency, $id_country, $id_group, $id_customer, $price, $from_quantity, $reduction, $reduction_type, $from, $to, $id_product_attribute)) { $specificPrice = new SpecificPrice(); $specificPrice->id_product = (int)$id_product; $specificPrice->id_product_attribute = (int)$id_product_attribute; $specificPrice->id_shop = (int)$id_shop; $specificPrice->id_currency = (int)($id_currency); $specificPrice->id_country = (int)($id_country); $specificPrice->id_group = (int)($id_group); $specificPrice->id_customer = (int)$id_customer; $specificPrice->price = (float)($price); $specificPrice->from_quantity = (int)($from_quantity); $specificPrice->reduction = (float)($reduction_type == 'percentage' ? $reduction / 100 : $reduction); $specificPrice->reduction_type = $reduction_type; $specificPrice->from = $from; $specificPrice->to = $to; if (!$specificPrice->add()) $this->errors[] = Tools::displayError('An error occurred while updating the specific price.'); } } w kodzie który zmodyfikowałeś, masz name="sp_id_group", jeżeli masz tam opcję "multiple" to przy wyborze kilku grup, zmienna $_POST['sp_id_group'] nie będzie w formacie int tylko będzie tablicą cały kod funkcji wkładamy w funkcję foreach foreach ($_POST['sp_id_group'] as $key=>$value) i w definicji cech obiektu zamiast $specificPrice->id_group = (int)($id_group); używamy $specificPrice->id_group = (int)($value) Link to comment Share on other sites More sharing options...
0 And63 Posted December 28, 2013 Author Share Posted December 28, 2013 Naprawdę nikt nie ma na to pomysłu? Problem jest naprawdę uciążliwy jak masz dodać specjalną cenę dla 10 produktów i dla 15 grup klientów... Robienie tego co tydzień to masakra, a tak zamiast 150 kliknięć myszą byłoby 10... Link to comment Share on other sites More sharing options...
0 vekia Posted December 29, 2013 Share Posted December 29, 2013 problem jest dość zagmatwany, głwónie z uwagi na fakt, że baza "cen specjalnych" nie jest przystosowana do przechowywania więcej niż 1 grupy klientów w związku z czym, trzeba by było zmodyfikować kontroler tak, aby wykonał "loop" na wszystkich wybranych grupach i dodał je do bazy jako "osobne". btw. "wszystkie grupy" nie spełnia Twoich wymagań? Link to comment Share on other sites More sharing options...
0 And63 Posted December 29, 2013 Author Share Posted December 29, 2013 No właśnie o to chodzi, że "wszystkie grupy" mi nie pasują, dlatego, że mam 2 grupy, które nie dostają rabatów. Opcja wszystkie grupy byłaby ok, gdyby było można wykluczyć z niej konkretne grupy o przykładowo ID 1 i 8, czyli jeśli mam 20 grup to cena specjalna byłaby dodawana do wszystkich oprócz tych dwóch - takie rozwiązanie też byłoby ok. może to byłoby łatwiej zrealizować? O którym kontrolerze piszesz w związku z loopem? - o tym: \controllers\admin\AdminProductsController.php ? Link to comment Share on other sites More sharing options...
0 vekia Posted December 29, 2013 Share Posted December 29, 2013 tam jeszcze jest funkcja validate specific price, trzeba ją zmienić aby sprawdzała grupę z array a nie int Link to comment Share on other sites More sharing options...
0 And63 Posted December 29, 2013 Author Share Posted December 29, 2013 Dzięki za podpowiedzi Link to comment Share on other sites More sharing options...
Question
And63
Edited by And63 (see edit history)
Link to comment
Share on other sites
6 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now