Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] как в opencart сделать что бы товары которых нет в наличии отображались в конце


dmitrievmsk

Recommended Posts

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

Надіслати
Поділитися на інших сайтах


можно в контроллере категори написать цикл, которые переставляет в конец, массива товары, которых нет в наличии.

foreach($prods as $key=>$prod)
     if($prods['availability']==true)
     {
          $temp[]=$prod;
          unset($prods[$key]);
     }

а затем склеить массивы temp и prods

Надіслати
Поділитися на інших сайтах

можно в контроллере категори написать цикл, которые переставляет в конец, массива товары, которых нет в наличии.

foreach($prods as $key=>$prod)
     if($prods['availability']==true)
     {
          $temp[]=$prod;
          unset($prods[$key]);
     }

а затем склеить массивы temp и prods

 

это будет для каждой страницы отдельно

 

нужно при выборке делать

Надіслати
Поділитися на інших сайтах

в модели catalog/model/catalog/product.php

функция getProducts

надо найти такой код

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

и заменить его этим

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY p.quantity = 0, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY p.quantity = 0, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY p.quantity = 0, " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.quantity = 0, p.sort_order";	
		}

товар которого нет в наличии будет в конце списка

 

чтоб скрывалась цена. в шаблоне блок вывода цены обернуть в такую конструкцию

<?php if($product['quantity']) { ?>
  тут выводим цену
<?php } ?>
Змінено користувачем dade
  • +1 1
Надіслати
Поділитися на інших сайтах


 

в модели catalog/model/catalog/product.php

функция getProducts

надо найти такой код

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

и заменить его этим

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY p.quantity = 0, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY p.quantity = 0, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY p.quantity = 0, " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.quantity = 0, p.sort_order";	
		}

товар которого нет в наличии будет в конце списка

 

чтоб скрывалась цена. в шаблоне блок вывода цены обернуть в такую конструкцию

<?php if($product['quantity']) { ?>
  тут выводим цену
<?php } ?>

Можно по поводу цены по подробнее

Надіслати
Поділитися на інших сайтах


если цену надо скрыть на странице категории то ищите шаблон

catalog/view/theme/ваша тема/template/product/category.tpl

 

в этом шаблоне ищите приблизительно такие строки

      <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
        <?php if ($product['tax']) { ?>
        <br />
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
        <?php } ?>
      </div>
      <?php } ?>

и замените первую строку на 

<?php if ($product['price'] && $product['quantity']) { ?>

если надо на других страницах ищите в соответствующих шаблонах похожие конструкции и поступайте аналогично

  • +1 1
Надіслати
Поділитися на інших сайтах


если цену надо скрыть на странице категории то ищите шаблон

catalog/view/theme/ваша тема/template/product/category.tpl

 

в этом шаблоне ищите приблизительно такие строки

      <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
        <?php if ($product['tax']) { ?>
        <br />
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
        <?php } ?>
      </div>
      <?php } ?>

и замените первую строку на 

<?php if ($product['price'] && $product['quantity']) { ?>

если надо на других страницах ищите в соответствующих шаблонах похожие конструкции и поступайте аналогично

Спасибо, получилось, а вот в карточке товара не убралась, хотя сделал тоже самое в файле product.tpl

Надіслати
Поділитися на інших сайтах


да там немного иначе. надо контроллер еще править.

catalog/controller/product/product.php

где то под этой строкой

            $this->data['cfp'] = $this->config->get('blocs');

добавить

$this->data['quantity'] = $product_info['quantity'];

и тогда в шаблоне уже

<?php if ($price && $quantity) { ?>
Змінено користувачем dade
Надіслати
Поділитися на інших сайтах


 

да там немного иначе. надо контроллер еще править.

catalog/controller/product/product.php

где то под этой строкой

            $this->data['cfp'] = $this->config->get('blocs');

добавить

$this->data['quantity'] = $product_info['quantity'];

и тогда в шаблоне уже

<?php if ($price && $quantity) { ?>

У меня такой строки почему то нету, как быть в такой ситуации?

Надіслати
Поділитися на інших сайтах


У меня такой строки почему то нету, как быть в такой ситуации?

такие должны быть

$this->data['model'] = $product_info['model'];
$this->data['reward'] = $product_info['reward'];
$this->data['points'] = $product_info['points'];

там не так важно куда эту строку вставить. главное до рендера шаблона и после получения $product_info.

Змінено користувачем dade
Надіслати
Поділитися на інших сайтах


У меня такой строки почему то нету, как быть в такой ситуации?

поставил и в шаблоне заменил:

<?php if ($product['price']) { ?>

на

 

<?php if ($price && $quantity) { ?>

Цена по прежнему осталась

Надіслати
Поділитися на інших сайтах


Для 2.х и сортировки и скрытия цены (отдельно).

сортировка абсолютно аналогично везде после ORDER BY надо добавить p.quantity = 0,

 

для скрытия цены в категории необходимо в контроллере catalog/controller/product/category.php

 

в массив 

$data['products'][] = array(

добавить строку

'quantity'  => $result['quantity'],

и в шаблоне catalog/view/theme/default/template/product/category.tpl

строку

                <?php if ($product['price']) { ?>

заменить на

                <?php if ($product['price'] && $product['quantity']) { ?>
Змінено користувачем dade
  • +1 3
Надіслати
Поділитися на інших сайтах


  • 1 year later...
On 28.04.2016 at 5:32 PM, dade said:

в модели catalog/model/catalog/product.php

функция getProducts

надо найти такой код


		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

и заменить его этим


		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY p.quantity = 0, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY p.quantity = 0, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY p.quantity = 0, " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.quantity = 0, p.sort_order";	
		}

товар которого нет в наличии будет в конце списка

 

чтоб скрывалась цена. в шаблоне блок вывода цены обернуть в такую конструкцию


<?php if($product['quantity']) { ?>
  тут выводим цену
<?php } ?>

На версии 1.5.5 должно работать? Что-то у меня не пашет, поменяла, ничего не произошло.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.