Минимальная цена заказа 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: я попробовал это, но появилось всплывающее окно с сообщением об ошибке и кнопке «ОК» <?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 для проверки и должен загружать категории для всех продуктов в корзине. После первого совпадения возвращается истина, если совпадения нет, возвращается ложь. Теперь вы можете использовать этот метод следующим образом:

<?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 user3003829 Я полностью изменил метод, который был в system/library/cart.php - пожалуйста, обновите, попробуйте и дайте мне знать ;-) Теперь он должен работать нормально (и должен быть немного быстрее). - person shadyyx; 21.11.2013
comment
ура! ты мой герой... это работает... но если я добавляю еще один товар из другой категории и все еще ниже 10, он не работает (несколько товаров в одном заказе) - person Nix; 21.11.2013
comment
Потому что у вас есть товар из разрешенной категории в корзине... Я подумал из-за описания, что невозможно иметь в корзине товар из разрешенной категории и другой товар, а общая сумма меньше 10 долларов... Или, может быть, я не понимаю... Как он себя ведет и как Вы хотите, чтобы он себя вел...? - person shadyyx; 21.11.2013
comment
Он ведет себя именно так, как я хотел ... Я хочу, чтобы все было просто, как сейчас, поскольку сценарий, о котором я говорю, будет редким, я думаю ... Большое спасибо за помощь. - person Nix; 21.11.2013