Я пытаюсь реализовать функциональность в opencart, где можно будет ввести пользовательскую цену на странице продукта через текстовую область, и когда товар будет добавлен в корзину, если введена пользовательская цена, будет применена цена, указанная в поле пользовательской цены. Аналогичный вопрос был задан здесь em> кто-то любезно предоставил хорошее решение, применимое к OpenCart 1.5.x. Однако я безуспешно пытался следовать этому подходу на OpenCart 2. Я проверял все снова и снова в течение последних нескольких дней, но, похоже, я не могу заставить это работать, поскольку я новичок в мире программирования. Мне интересно, может ли кто-нибудь указать мне правильное направление к тому, что я могу быть отсутствующий. У меня есть поиск в Интернете, но я не могу найти никакой соответствующей информации
Я проверил и заметил, что запрос AJAX изменен на #product div в 2.x, поэтому я ввел свою цену в этом div под количеством.
<input name="custom_price" id="custom_price" value="" title="custom_price" class="input-text custom_price" type="textarea">
Затем я перешел к контроллеру checkout/cart/add в методе Add(). Я добавил этот код
if(isset($this->request->post['custom_price'])) {
$custom_price = $this->request->post['custom_price'];
} else {
$custom_price = false;
}
Далее я изменил эту строку
$this->cart->add($this->request->post['product_id'], $this->request->post['quantity'], $option, $recurring_id);
to:
$this->cart->add($this->request->post['product_id'], $this->request->post['quantity'], $option, $custom_price, $recurring_id);
Затем в system/library/cart.php
я изменил определение метода Add()
на следующее
public function add($product_id, $qty = 1, $option = array(), $recurring_id = 0, $custom_price = false) {
Перед окончанием метода Add() я добавил следующее
if($custom_price) {
if(!isset($this->session->data['cart']['custom_price'])) {
$this->session->data['cart']['custom_price'] = array();
}
$this->session->data['cart']['custom_price'][$key] = $custom_price;
}
В GetProduct() я добавил эти строки
if(isset($this->session->data['cart']['custom_price'][$key])) {
$price = $this->session->data['cart']['custom_price'][$key];
}
сразу после этой строки:
$price = $product_query->row['price'];
Наконец, после массива, где цена продукта установлена как цена + цена опциона
'price' => ($price + $option_price),
Я добавил следующее
if(isset($this->session->data['custom_price'][$key])) {
$this->data[$key]['price'] = $this->session->data['custom_price'][$key];
}
$this >isCustomPriceValid($this->request->post['custom_price']))
- должно быть$this->isCustomPriceValid($this->request->post['custom_price']))
- обратите внимание на$this
стрелкуisCustomPriceValid(...)
. - person shadyyx   schedule 18.02.2015Cart::ad()
, находится в следующем порядке: 1. product_id, 2. количество, 3. вариант, 4. custom_price, 5. recurring_id, а то, чтоCart::add()
ожидает, должно идти в следующем порядке: 1. product_id, 2. количество, 3. вариант, 4. recurring_id, 5. custom_price. Вы видите разницу? - person shadyyx   schedule 18.02.2015if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; }
и изменил порядок, как показано ниже, но не уверен, почему он ожидает их в этом порядке, потому что $custom_price реализуется после опции и до $recurring_id$this->cart->add($this->request->post['product_id'], $this->request->post['quantity'], $option, $recurring_id, $custom_price);
, однако все еще не я не работаю - person msd79   schedule 18.02.2015echo 'true';
в частьif
и/илиecho 'false';
в частьelse
или используйтеvar_dump($some_object_or_array)
, чтобы увидеть содержимое переменной. Иногда полезно использоватьvar_dump()
даже для строк или логических значений, потому что в случае пустой строки или false PHP ничего не печатает в браузере. Если это запрос AJAX, это будет напечатано в ответе, из-за которого запрос не будет выполнен, поэтому проверьте вкладку Console или Net в FireBug. - person shadyyx   schedule 18.02.2015var_dump($custom_price);
и получилbool(false)
, что, как мне кажется, подтверждает мои подозрения. На данный момент я предполагаю, что что-то не так с тем, как я настраиваю вещи в product.tpl, и product_price не публикуется. - person msd79   schedule 18.02.2015unserialize(): Error at offset 0 of 8 bytes in system\library\cart.php line 179
Undefined index: product_id system\library\cart.php in line 181
Есть идеи по этому поводу? - person msd79   schedule 19.02.2015