Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено, спасибо krumax] Подружить модули (скидки/наценки и автоматический перенос покупателей в другую группу)


Kitson

Recommended Posts

Пытаюсь подружить два модуля Customer Group Discounts и Customer Group Auto Switcher with email alert

Версия Opencart 1.5.1.3

Изначально возникли следующие ошибки (настройки модуля Customer Group Auto Switcher with email alert вообще не отображались):

2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_customer_group_id in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 198
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_value in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 210
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_value in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 211
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_customer_group_id in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 198
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_value in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 210
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_value in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 211
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_customer_group_id in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 198
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_value in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 210
2012-07-11 11:00:08 - PHP Notice:  Undefined index:  reach_value in /home/s/snabvlzru/public_html/vqmod/vqcache/vq2-admin_controller_sale_customer_group.php on line 211

Покопавшись в xml файлах модулей увидел, что оба модуля меняют одни и те же строки в admin/model/sale/customer_group.php:

в xml файле Customer Group Discounts:

<operation>
<search position="replace"><![CDATA[customer_group SET]]></search>
<add><![CDATA[customer_group SET discount = '" . (($data['discount'] != '') ? (float)$data['discount'] : '') . "',]]></add>
</operation>

в xml файле Customer Group Auto Switcher:

<operation>
<search position="replace"><![CDATA[$this->db->query("INSERT INTO " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "'");]]></search>
<add><![CDATA[$this->db->query("INSERT INTO " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "', reach_value = '" . (float)($data['reach_value']) . "', reach_customer_group_id = '" . (int)($data['reach_customer_group_id']) . "', reach_order_status_id = '" . (int)($data['reach_order_status_id']) . "', admin_notify = '" . (isset($data['admin_notify']) ? (int)$data['admin_notify'] : 0) . "', customer_notify = '" . (isset($data['customer_notify']) ? (int)$data['customer_notify'] : 0) . "'");]]></add>
</operation>
<operation>
<search position="replace"><![CDATA[$this->db->query("UPDATE " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "' WHERE customer_group_id = '" . (int)$customer_group_id . "'");]]></search>
<add><![CDATA[$this->db->query("UPDATE " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "', reach_value = '" . (float)($data['reach_value']) . "', reach_customer_group_id = '" . (int)($data['reach_customer_group_id']) . "', reach_order_status_id = '" . (int)($data['reach_order_status_id']) . "', admin_notify = '" . (isset($data['admin_notify']) ? (int)$data['admin_notify'] : 0) . "', customer_notify = '" . (isset($data['customer_notify']) ? (int)$data['customer_notify'] : 0) . "' WHERE customer_group_id = '" . (int)$customer_group_id . "'");]]></add>
</operation>

Я удалил коды из обоих файлов, а вместо этого изменил вручну стандартный код движка (файл admin/model/sale/customer_group.php) на:


public function addCustomerGroup($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "',	  discount = '" . (($data['discount'] != '') ? (float)$data['discount'] : '') . "' ,	 reach_value = '" . (float)($data['reach_value']) . "', reach_customer_group_id = '" . (int)($data['reach_customer_group_id']) . "', reach_order_status_id = '" . (int)($data['reach_order_status_id']) . "', admin_notify = '" . (isset($data['admin_notify']) ? (int)$data['admin_notify'] : 0) . "', customer_notify = '" . (isset($data['customer_notify']) ? (int)$data['customer_notify'] : 0) . "'");
$this->cache->delete('product');
}

public function editCustomerGroup($customer_group_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "',	discount = '" . (($data['discount'] != '') ? (float)$data['discount'] : '') . "',   reach_value = '" . (float)($data['reach_value']) . "', reach_customer_group_id = '" . (int)($data['reach_customer_group_id']) . "', reach_order_status_id = '" . (int)($data['reach_order_status_id']) . "', admin_notify = '" . (isset($data['admin_notify']) ? (int)$data['admin_notify'] : 0) . "', customer_notify = '" . (isset($data['customer_notify']) ? (int)$data['customer_notify'] : 0) . "' WHERE customer_group_id = '" . (int)$customer_group_id . "'");
$this->cache->delete('product');
}

На всякий случай вот стандартный код:

public function addCustomerGroup($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "'");
}

public function editCustomerGroup($customer_group_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "customer_group SET name = '" . $this->db->escape($data['name']) . "' WHERE customer_group_id = '" . (int)$customer_group_id . "'");
}

Выше описанные ошибки исчезли. В группах покупателей могу задать скидки/наценки и порог после которого следует переводить покупателя в другую группу.

Пробую сделать заказ - всё до последнего этапа работает нормально. При нажатии кнопки "Оформить заказ" появляется ошибка:

2012-07-11 13:12:34 - PHP Notice:  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order WHERE customer_id = '2' AND order_status_id = '5'' at line 1<br />Error No: 1064<br />SELECT total FROM order WHERE customer_id = '2' AND order_status_id = '5' in /home/s/snabvlzru/public_html/system/database/mysql.php on line 49

При этом заказ магазин принимает, но покупателя в другую группу не переводит.

О чём говорит ошибка и как можно это исправить? Может быть где-то попутал с точками, запятыми, кавычками?

Надіслати
Поділитися на інших сайтах


У Вас не проходит запрос в базу - синтаксическая ошибка.

Может быть где-то попутал с точками, запятыми, кавычками?

возможно так и есть, нужно смотреть сам запрос.
  • +1 1
Надіслати
Поділитися на інших сайтах


О чём говорит ошибка и как можно это исправить? Может быть где-то попутал с точками, запятыми, кавычками?

Имя таблицы в кавычки заключить надо. Или префикс к таблицам использовать.

  • +1 1
Надіслати
Поділитися на інших сайтах


Если я правильно понял, то ошибка:

Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order WHERE 'customer_id' = '6' AND order_status_id = '0'' at line 1
Error No: 1064
SELECT total FROM order WHERE 'customer_id' = '6' AND order_status_id = '0' in /home/s/snabvlzru/public_html/system/database/mysql.php on line 49
возникает из-за этого:

public function getOrderTotalValue($order_status_id) {
  $query = $this->db->query("SELECT total FROM " . DB_PREFIX . "order WHERE customer_id = '" . (int)$this->customer->getId() . "' AND order_status_id = '" . (int)$order_status_id . "'");
  return $query->rows;
}

Подскажите, пожалуйста, что там не так?

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

Надіслати
Поділитися на інших сайтах


Если я правильно понял, то ошибка:

Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order WHERE 'customer_id' = '6' AND order_status_id = '0'' at line 1
Error No: 1064
SELECT total FROM order WHERE 'customer_id' = '6' AND order_status_id = '0' in /home/s/snabvlzru/public_html/system/database/mysql.php on line 49
возникает из-за этого:

public function getOrderTotalValue($order_status_id) {
  $query = $this->db->query("SELECT total FROM " . DB_PREFIX . "order WHERE customer_id = '" . (int)$this->customer->getId() . "' AND order_status_id = '" . (int)$order_status_id . "'");
  return $query->rows;
}

Подскажите, пожалуйста, что там не так?

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

значит уберите из запроса добавление префикса и будит Вам счастье)

$query = $this->db->query("SELECT total FROM order WHERE customer_id = '" . (int)$this->customer->getId() . "' AND order_status_id = '" . (int)$order_status_id . "'");

  • +1 1
Надіслати
Поділитися на інших сайтах


Попробовал убрать префикс отовсюду из модуля где только можно - та же самая ошибка.

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

Я же взял для теста чистый опенкарт в установке вбил префикс и затем закатал его модуль - работает. Потом сделал всё тоже самое только поле префикса, во время установки опенкарт оставил пустым - результат эта же ошибка.

Что вы думаете после этого? Где-то в коде модуля синтаксическая ошибка (и нужно копать в направлении отсутствующих кавычек), либо это ещё что-то может быть?

Надіслати
Поділитися на інших сайтах


Пробуйте так

public function getOrderTotalValue($order_status_id) {
$query = $this->db->query("SELECT total FROM " . DB_PREFIX . "'order' WHERE customer_id = '" . (int)$this->customer->getId() . "' AND order_status_id = '" . (int)$order_status_id . "'");
return $query->rows;
}

  • +1 1
Надіслати
Поділитися на інших сайтах


Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''order' WHERE customer_id = '7' AND order_status_id = '5'' at line 1

Error No: 1064

SELECT total FROM 'order' WHERE customer_id = '7' AND order_status_id = '5' in /home/s/snabvlzru/public_html/system/database/mysql.php on line 49

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.