Opencart минимална цена за поръчка изключва една категория

Използвам opencart и успешно добавих минимална цена за поръчка за всички транзакции. Това е кодът, който използвах:

<?php if ($this->cart->getSubtotal() >= 10) { ?>
<div id="payment"><?php echo $payment; ?></div>
<?php } else { ?>
<div class="warning">Minimum 10 Euro to checkout</div>
<?php }  ?> 

Сега искам да изключа една категория от нея, така че да може да се купи продукт за $9 от тази категория.

Актуализация 1: Благодаря ви много за помощта shadyyx

Опитах метода shadyyx, но получавам тази грешка: unexpected T_BOOLEAN_OR в този ред

<?php if ($this->cart->getSubtotal() >= 10 || $this->cart->productsAreInCategory(1)) { ?>

Актуализация 2: Опитах това, но се появи изскачащ прозорец, който казва само грешка и бутон OK <?php if (($this->cart->getSubtotal() >= 10) || $this->cart->productsAreInCategory(1)) { ?>

Опитах това <?php if (($this->cart->getSubtotal() >= 10) || ($this->cart->productsAreInCategory(1))) { ?>, то не даде никаква грешка и върши същата работа (минимална сума за всички поръчки, независимо от идентификатора на категорията)


person Nix    schedule 18.11.2013    source източник
comment
Не мисля, че има някакъв бърз метод за това. Трябва да добавите elseif условие между тях, за да проверите дали категорията на съществуващия продукт е същата като категорията, която искате да изключите.   -  person Sankar V    schedule 18.11.2013


Отговори (1)


Бих тръгнал по този начин:

Разширете system/library/cart.php и добавете метод:

public function productsAreInCategory($category_id) {
    $product_ids = array();
    foreach($this->getProducts() as $product) {
        $product_ids[] = $product['product_id'];
    }

    $categories = $this->db->query('SELECT category_id FROM ' . DB_PREFIX . 'product_to_category WHERE product_id IN (' . implode(',', $product_ids) . ')')->rows;

    $category_ids = array();
    foreach($categories as $category) {
        $category_ids[] = $category['category_id'];
    }

    if(in_array($category_id, $category_ids) {
        return true;
    }

    return false;
}

Този метод трябва да приема параметър $category_id за тестване и трябва да зарежда категории за всички продукти в количката. След първото съвпадение се връща true, ако няма съвпадение, се връща false. Сега можете да използвате този метод по следния начин:

<?php if (($this->cart->getSubtotal() >= 10) || $this->cart->productsAreInCategory(1)) { ?>
<div id="payment"><?php echo $payment; ?></div>
<?php } else { ?>
<div class="warning">Minimum 10 Euro to checkout</div>
<?php }  ?>

Просто заменете идентификатора на категорията в $this->cart->productsAreInCategory(1) с правилния.

person shadyyx    schedule 18.11.2013
comment
Благодаря за помощта. Получавам тази грешка Грешка при анализиране: синтактична грешка, неочаквано T_BOOLEAN_OR в - person Nix; 20.11.2013
comment
Добре, и в къде? Моля, в бъдеще ни предоставете цялото съобщение за грешка... Редактирайте въпроса си, добавете съобщението за грешка за това решение и добавете също частта от кода, където се появява грешката... Благодаря. - person shadyyx; 20.11.2013
comment
Добре, може да съм сляп или тъп, но не виждам проблема там. Както и да е, опитайте се да поставите първата част на условие $this->cart->getSubtotal() >= 10 в скоби, като това: ($this->cart->getSubtotal() >= 10) - проверете също редактирания ми отговор... - person shadyyx; 20.11.2013
comment
@user3003829 Напълно промених метода, който беше в system/library/cart.php - моля, актуализирайте, опитайте и ме уведомете ;-) Сега трябва да работи добре (и трябва да е малко по-бързо). - person shadyyx; 21.11.2013
comment
yipee! ти си моят герой... работи... но ако добавя друг продукт от друга категория и все още е по-нисък от 10, той не работи (няколко продукта в същия ред) - person Nix; 21.11.2013
comment
Тъй като имате продукта от позволената категория в количка... Помислих си поради описанието, че не е възможно в количката да има продукт от разрешена категория и друг продукт и общата сума да е по-малка от $10... Или може би аз не разбирам... Как се държи и как искаш да се държи...? - person shadyyx; 21.11.2013
comment
Държи се точно както исках... Искам да го запазя просто, както е сега, тъй като сценарият, който споменавам, би бил рядък, предполагам... Благодаря ви много за помощта - person Nix; 21.11.2013