Перейти к содержанию
dmitrievmsk

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

Рекомендуемые сообщения

Как в 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в 2.x как обстоят дела по данному вопросу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в 2.x как обстоят дела по данному вопросу?

так же. только в 2.х для категории тоже надо в контроллер править.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

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) { ?>

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в шаблоне продукта надо менять строку

<?php if ($price) { ?>

на

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

в шаблоне продукта надо менять строку

<?php if ($price) { ?>

на

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

спасибо, вы гений!))

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по какому вопросу? сортировки или скрытия цены?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.