Возникла необходимость приделать в замечательный магазин Prestashop фичу, позволяющую выставлять для всех товаров без исключения скидку. Удобная штука для, например, праздников. Вообще, удивительно, почему этой функции изначально нет в админке. Пришлось делать самому. Ничего в этом сложного нет, можете пользоваться способом тоже. Но сразу предупрежу. На длительном промежутке времени тестов, естественно, не проводилось и как в дальнейшем это все скажется на, например, обновлении магазина — неизвестно. Ну да ладно, приступим к описанию.
Для того, чтобы в Prestashop сделать скидку на все товары, необходимо зайти в MySQL и сделать следующее:
1. Немного поправим таблицу ps_product (ну или какой там у вас префикс :)) и добавим в нее новое поле discount. При создании поля должно получиться вот такое:
2. Чуть поправим настройки таблицы ps_specific_price и добавим полям значения по умолчанию, чтобы структура в итоге выглядела так:
3. Ищем файлик /admin/tabs/AdminCatalog.php. Папка админ — это та папка, которую советуют переименовать в целях безопасности и она у вас может называться по другому. Ищем в этом файлике в самом низу ищем строки
echo ‘<h2>’.$this->l(‘Products in this category’).’</h2>’;
$this->adminProducts->display($this->token);
И между этими строчками втыкаем следующее:
echo ' <strong>Добавить скидку всем товарам: <span style="color: red; font-weight: bold;">(Это уничтожит все текущие скидки для всех товаров!)</span></strong>
‘; if (isset($_POST['discount'])) { $discount = (int)$_POST['discount']/100; $link = mysql_connect(‘DATABASE_ADDR’, ‘DB_USER’, ‘DB_PASS’); if (!$link) { die(‘Could not connect to database: ‘ . mysql_error()); } $setProducDisc = mysql_query(‘UPDATE `ps_product` SET `discount` = ‘.$discount.»); if (!$setProducDisc) { die(‘Fail during discount setting in ps_product table’ . mysql_error()); } $emptySP = mysql_query(‘TRUNCATE TABLE `ps_specific_price`’); if (!$emptySP) { die(‘Fail during clearing ps_specific_price table’ . mysql_error()); } $setDiscount = mysql_query(‘INSERT INTO ps_specific_price (id_product, reduction) SELECT id_product, discount FROM ps_product ‘); if (!$setDiscount) { die(‘Fail during setting discount in ps_specific_price table’ . mysql_error()); } mysql_close($link); echo ‘Discount successfuly added’; }
Где:
DATABASE_ADDR — адрес, куда стучаться для коннекта к базе. Часто localhost
DB_USER — пользователь вашей престовской БД
DB_PASS — пароль к БД
В результате должно получиться следующее:
УСТАНОВКА СКИДКИ ТАКИМ СПОСОБОМ УДАЛИТ ВСЕ СТАРЫЕ СКИДКИ, НАСТРОЕННЫЕ ДЛЯ ЕДИНИЧНЫХ ТОВАРОВ!
В коде все, думаю, открыто и прозрачно. Так что при желании можно допилить всяких полезностей, типа, установки скидки для категории и т.д. и т.п.
Здравствуйте!
Скажите пожалуйста, вы еще работаете с prestashop? Мне как раз нужен модуль или дополнение (ну или мануал), чтобы создавать скидки для категорий для групп клиентов.
Запили мне кнопку «Купить»! :)