2015-07-02 4 views
0

Im в настоящее время работает на объекте opencart. Я написал пользовательскую калькуляцию цены php, в зависимости от того, какие параметры выбраны по порядку. Эта работа прекрасна, когда опции выбраны, радио с флажками. Но ..Расчет цены на Opencart, таможенный расчет

У меня есть опция, где клиент может вводить число с текстовым полем. Я использую это число в расчете цены, поэтому в зависимости от этого значения, opencart рассчитать цену. Я отправляю этот номер с помощью SESSION в system/library/cart.php, где я использую его для вычисления. Это работает отлично, когда заказ клиента только один раз.

Когда клиент уже имеет продукт в своей корзине и хочет сделать другой заказ, opencart перезапишет значение сеанса, и это будет пересчитывать цену за элемент, уже находящийся в корзине.

есть ли какой-либо хороший способ хранить отдельно эти значения сеанса?

Вот моя измененная система/библиотека/cart.php:

if ($product_id == '65') { 

        $pqty = $_SESSION['pqty']; 
        $contents = file_get_contents("http://somepage.com/system/library/calculate.php?&qty=".$quantity."&pqty=".$pqty."&pnh=".$pnh."&czp=".$czp."&czt=".$czt."&bnd=".$bnd."&covcho=".$covcho."&covczp=".$covczp."&covczt=".$covczt."&lam=".$lam); 
        $contents = utf8_encode($contents); 
        $calcprice = json_decode($contents); 

        $this->data[$key] = array(
         'key'    => $key, 
         'product_id'  => $product_query->row['product_id'], 
         'name'   => $product_query->row['name'], 
         'model'   => $product_query->row['model'], 
         'shipping'  => $product_query->row['shipping'], 
         'image'   => $product_query->row['image'], 
         'option'   => $option_data, 
         'download'  => $download_data, 
         'quantity'  => $quantity, 
         'minimum'   => $product_query->row['minimum'], 
         'subtract'  => $product_query->row['subtract'], 
         'stock'   => $stock, 
         'price'   => $calcprice/quantity, 
         'total'   => $calcprice,       
         'reward'   => $reward * $quantity, 
         'points'   => ($product_query->row['points'] ? ($product_query->row['points'] + $option_points) * $quantity : 0), 
         'tax_class_id' => $product_query->row['tax_class_id'], 
         'weight'   => ($product_query->row['weight'] + $option_weight) * $quantity, 
         'weight_class_id' => $product_query->row['weight_class_id'], 
         'length'   => $product_query->row['length'], 
         'width'   => $product_query->row['width'], 
         'height'   => $product_query->row['height'], 
         'length_class_id' => $product_query->row['length_class_id'], 
         'recurring'  => $recurring 
        ); 
+0

Вы можете использовать массив и сохранить его в сеансе, чтобы сделать это. И этот массив должен иметь ключ uqniue, чтобы можно было вычислить его цену. $ this-> session-> data ['custom_price_multiplier'] [unique key] = 'customer input'' –

+0

Я действительно не понимаю этот метод. Можете ли вы объяснить немного больше? – peszo

ответ

1

Вы создали if ($product_id == '65') { в файловой системе. Это означает, что вы должны сделать код для каждого product id, что невозможно.

Мое предложение состоит в том, что вы должны создать сеансовый массив, такой как $this->session->data['custom_price']['your_product_id'] = value entered by customer. И используя это, вы должны рассчитать цену за каждый товар.

+0

Хорошо, но у меня проблема с другим идентификатором, просто когда вы заказываете 2 разных типа продукта с ID 65, например. – peszo

+0

В этом случае вам нужно назначить некоторый уникальный индекс, поэтому 'opencart' будет совать его как уникальное. Как и в случае с опцией продукта. Пример того же продукта, но другой вариант добавит два продукта со своими опциями в вашей корзине. –

Смежные вопросы