<div class="product-layout">. То баннеры не добавятся и следовательно их надо скрывать. Так вот как лучше сделать ?if ($('.product-layout:nth-child(30)').length < 0) {
           $('#banner-0').hide();
           $('#banner-1').hide();
           $('#banner-2').hide();
} esleif ($('.product-layout:nth-child(60)').length < 0) {
           $('#banner-1').hide();
           $('#banner-2').hide();
} elseif ($('.product-layout:nth-child(90)').length < 0) {
           $('#banner-2').hide();
}require_once(DIR_SYSTEM . 'library/ColorExtractor/Color.php');
require_once(DIR_SYSTEM . 'library/ColorExtractor/ColorExtractor.php');
require_once(DIR_SYSTEM . 'library/ColorExtractor/Palette.php');$img_path = realpath('image/' . $result['image']);
                
$palette = Palette::fromFilename($img_path);
$rgb = $palette->getMostUsedColors(1);foreach ($results as $result) {
$data['products'][] = array(
					'product_id'  => $result['product_id'],
'item_class'  => $imgclass // Тут сразу задается один из этих классов  grid-1 grid-2v grid-2h grid-4
				);
}class уже менять нельзя. [0] => Array
        (
            [product_id] => 11
            [item_class] => grid-2h
        )
    [1] => Array
        (
            [product_id] => 15
            [item_class] => <b>grid-4</b>
        )
    [2] => Array
        (
            [product_id] => 16
            [item_class] => <b>grid-4</b>
        )
    [3] => Array
        (
            [product_id] => 16
            [item_class] => grid-2v
        )[item_class] не должен повторятся. То есть строки менялись местами. [item_class]. А сам [item_class] определяется размером картинки.  И поэтому, если элементы с одинаковым [item_class] находятся рядом, то одинаковые блоки сетки находятся рядом, что не должно быть так.        if (!empty($data['filter_date_from'])) {
                    $sql .= " AND DATE_FORMAT(o.date_added, '%d.%m.%Y') >= '" . $this->db->escape($data['filter_date_from']) . "'";
                }
                if (!empty($data['filter_date_to'])) {
                    $sql .= " AND DATE_FORMAT(o.date_added, '%d.%m.%Y') <= '" . $this->db->escape($data['filter_date_to']) . "'";
                }if (!empty($data['filter_date_from'])) {
                    $sql .= " AND DATE_FORMAT(o.date_added, '%d.%m.%Y') >= DATE_FORMAT('" . $this->db->escape($data['filter_date_from']) . "', '%d.%m.%Y')"; // 1 условие
                }
                if (!empty($data['filter_date_to'])) {
                    $sql .= " AND DATE_FORMAT(o.date_added, '%d.%m.%Y') <= DATE_FORMAT('" . $this->db->escape($data['filter_date_to']) . "', '%d.%m.%Y')"; // 2 условие
                }
public function edit() {
		$this->load->language('checkout/cart');
		$json = array();
		// Update
		if (!empty($this->request->post['quantity'])) {
			foreach ($this->request->post['quantity'] as $key => $value) {  //Ошибка тут
				$this->cart->update($key, $value);
			}
			$this->session->data['success'] = $this->language->get('text_remove');
			unset($this->session->data['shipping_method']);
			unset($this->session->data['shipping_methods']);
			unset($this->session->data['payment_method']);
			unset($this->session->data['payment_methods']);
			unset($this->session->data['reward']);
			$this->response->redirect($this->url->link('checkout/cart'));
		}
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}<button onclick="cart.remove('<?php echo $product['product_id']; ?>');" class="count-down"></button>cart.remove('<?php echo $product['cart_id']; ?>');