Kostikch

[Решено] Отображение статуса о наличии товара в категории

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

Kostikch    0

Всем дорогого времени суток!

 

 Я столкнулся с такой проблемой, что, находясь в каталоге, клиент выбирает нужный ему товар, затем заходит в карточку товара и тут он видит, что его уже НЕТ в наличии! Получается очень не удобно. Нужно сделать так, чтобы в самой категории уже было видно какой товар есть, а какого нет в наличии, и который под заказ.

 

Погуглил вот : http://www.unemployed.in.ua/redaktirovanie-opencart-nalichie-tovara-v-2/

 

Результат по проделанной инструкции:

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

Вариантов не много либо я что-то напортачил, или код нужно править.

 

 

Дополнительная информация:

ocStore Версия 1.5.5.1.2

- без доп. модулей

- внесенные изменения в код

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

Открываем catalog/controller/product/category.php

 
Ищем строки и делаем как ниже указано:
if (isset($this->request->get['sort'])) {
 $sort = $this->request->get['sort'];
} else {
 //$sort = 'p.sort_order';
 $sort = 'p.quantity';
}
 
if (isset($this->request->get['order'])) {
 $order = $this->request->get['order'];
} else {
 //$order = 'ASC';
  $order = 'DESC';
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

Для начала добавим в языковой файл наши три статуса.
Открываем:
/catalog/language/russian/product/product.php

Находим строки:

$_['text_stock'] = 'Наличие:';
$_['text_instock'] = 'В наличии';

и добавляем:

$_['text_outstock'] = 'Нет в наличии';
$_['text_minstock'] = 'Заканчивается';

Теперь, если вы захотите поменять надпись «Заканчивается», на «Остался последний!» вам надо всего лишь зайти в языковой файл и заменить нужную строку.

 

Основные изменения:

Начинаем самый сложный процесс icon_wink.gif Работаем с контроллером категории.
Открываем для редактирования:
/catalog/controller/product/category.php

Почти в самом верху подтягиваем наш языковой файл.
После строк:

<?php
class ControllerProductCategory extends Controller {
    public function index() {
 
        $this->language->load('product/category');

Вставляем:

$this->language->load('product/product');

 

Где-то в районе 240-250 строк после строки:

$rating = false;
}

вставляем этот код:

if ($result['quantity'] <= 0) {
$stock = $this->language->get('text_outstock');
} elseif ($this->config->get('config_stock_display')) {
$stock = $result['quantity'];
} elseif ($result['quantity'] >= 1 AND $result['quantity'] <= 3) {
    $stock = $this->language->get('text_minstock');
} else {
    $stock = $this->language->get('text_instock');
}

 

и последний штрих, где-то в районе 270 строки, между строк:

'thumb' => $image,
'name' => $result['name'],
'description' => utf8_truncate(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 200, ' …', true),
'price' => $price,

вставляем строку:

'stock' => $stock,

 

Вывод результата в списке товара:

И непосредственно сам вывод нужной информации на сайте.
Открываем:
/catalog/view/theme/ваша_тема/template/product/category.tpl

Я предлагаю разместить информацию о наличии сразу под ценой.
Для этого, находим строки:

<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>

и перед последним /div вставляем:

<br /><?php echo $product['stock']; ?>

 

Делаем красиво:

А тем кто хотят, чтоб это было ещё и красиво, можем назначить уникальный стиль для надписей.

В последнее наше изменение, вставляем не просто строчку

<br /><?php echo $product['stock']; ?>

а вот такую:

<span class="stock"><br /><?php echo $product['stock']; ?></span>

Заходим в:
/catalog/view/theme/ваша_тема/stylesheet/stylesheet.css

Находим строчку:

.product-list .price-tax {
    font-size: 12px;
    font-weight: normal;
    color: #BBBBBB;
}

и вставляем после неё:

.product-list .stock {
    font-size: 13px;
    font-weight: normal;
}

или подгоняем под свой стиль.

А вот чтоб надписи были разного цвета, возвращаемся в наш языковой файл:
/catalog/language/russian/product/product.php

и уже известные нам строки

$_['text_stock'] = 'Наличие:';
$_['text_instock'] = 'В наличии';
$_['text_outstock'] = 'Нет в наличии';
$_['text_minstock'] = 'Заканчивается';

меняем на что-то типа такого:

$_['text_stock'] = 'Наличие:';
$_['text_instock'] = '<font style="color: green;"><b>В наличии</b></font>';
$_['text_outstock'] = '<font style="color: #f00;">Нет в наличии</font>';
$_['text_minstock'] = '<font style="color: green;">Заканчивается</font>';

 
Подробнее:http://www.unemployed.in.ua/redaktirovanie-opencart-nalichie-tovara-v-2/

Поиск, Акции, и Производители…

По выше изложенной схеме исправим ещё парочку файлов, чтобы наличие товара отображалось и в поиске и в списке производителя и в акциях.

В каталоге /catalog/controller/product/
меняем файлы:
manufacturer.php — Список товаров определенного производителя
search.php — Поиск. Список найденных товаров
special.php — Специальные акционные предложения

изменения вносим такие же как в category.php (Основные изменения)
Думаю, разберетесь.

 

Вновь заходим в папку: /catalog/view/theme/ваша_тема/template/product/
И добавляем уже известную нам строку:

<span class="stock"><br /><?php echo $product['stock']; ?></span>

в файлы:
manufacturer_info.tpl
search.tpl
special.tpl

P.S. У меня почему-то только в списке по производителю, выдаёт не результат, а наш полуготовый instock/outstock… попробую разобраться…
Подробнее:http://www.unemployed.in.ua/redaktirovanie-opencart-nalichie-tovara-v-2/

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


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

Спасибо за совет, но это немного не то. Мне нужен вывод статуса "в наличии" ,"нет в наличии", "предзаказ" под ценой, а НЕ КОЛИЧЕСТВО оставшегося товара на складе.

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


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

catalog/controller/product/category.php

 

перед

$this->data['products'][] = array(

добавить

$stock_status = $result['stock_status'];

после

$this->data['products'][] = array(

добавить

'stock_status'       => $stock_status,

catalog/view/theme/*/template/product/category.tpl

 

добавить в нужном месте

<?php echo $product['stock_status']; ?>

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


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

Спасибо все работает! :eek: Этим же способом по аналоги сделал отображения наличия в поиске.

О добавлении в нужном месте)))

catalog/view/theme/*/template/product/category.tpl

Я добавил  эту строчку <?php echo $product['stock_status']; ?>   в

<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>

ПОЛУЧИЛОСЬ вот так:

 

<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 } ?>
      <br /><br /><?php echo $product['stock_status']; ?>
      </div>

 

P.S.: В конечном итоге получилось что под ценой отображается статус товара как я и хотел. 8-) 

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


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

Три строчки и столько счастья))))

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


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

Подскажите, пожалуйста, как убрать отображение пустых категории.

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


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

смотря, что вы имеете ввиду под "убрать отображение".

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


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

Добрый день!

 А как сделать чтоб только для определенной категории товара выводился статус "в наличии", даже если товара нет на складе. А для всех остальных категорий если нет товаров, то и выводилось бы что их "нет в наличии"? Ставлю фильтр в /catalog/controller/product/category.php  как if ($result['category_id']='72') не срабатывает. Нужно в какой-то ещё файл вносить изменения? Или я в принципе не так делаю? Я только учусь ещё..../product/category.php

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


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

Всем привет!

Помогите пожалуйста!

Если я правильно понимаю, stock_status - это статус товара при отсутствии на складе?

Тогда получается, что по последней инструкции в категории будет выводиться именно этот статус, даже если товар есть в наличии. (у меня так получилось)

Если сделать по первой инструкции отсюда , то выводится цифра с остатком, даже если в настройках стоит "показывать остаток на складе" - "нет".

А можно ли сделать так, чтобы когда товар есть в наличии выводилось "есть в наличии", а когда его нет, то его stock_status?

Спасибо! 

Изменено пользователем andreypoltorak

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


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


<?php if ($product['stock_qty'] <= 0) { ?>

     <?php echo $product['stock_status']; ?>                                                                  

  <?php } else { ?>

    Есть в наличии                                          

 <?php } ?>

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


Ссылка на сообщение
Поделиться на другие сайты
<?php if ($product['stock_qty'] <= 0) { ?>  
     <?php echo $product['stock_status']; ?>                                                                  
  <?php } else { ?>
    Есть в наличии                                           
 <?php } ?>

Спасибо! Получилось!!!

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


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

Добрый день.
Подскажите, пожалуйста, если делать все как вы написали, все отлично работает. Но есть одно но. У меня на сайте стоит фильтр (FilterPro v2.4.2.4.2 seo). И этот фильтр скрывает отображение статуса. Если отключить данный фильтр все работает отлично. Помогите разобраться в каком файле нужно еще произвести замены, чтобы отображение статуса было и при работающем фильтре. Спасибо.
 

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


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

В контролере фильтра...

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


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

Ребята, а как сделать цветным 'stock_status'?

Если выводить 'stock' по системе Kostikch, то все понятно, назначаем цвет в  языковом product.php

А где назначить цвет 'stock_status', который выводится по системе Tomа?

Спасибо!

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


Ссылка на сообщение
Поделиться на другие сайты
Tom    1 928
<?php if ($product['stock_qty'] <= 0) { ?>
       <span style="color:......."><?php echo $product['stock_status']; ?></span>                                              
  <?php } else { ?>
      <span style="color:......."><?php echo $product['stock_status']; ?></span>                                        
 <?php } ?>

естественно точки заменить своими цветами.

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


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

Спасибо, Tom!

В принципе, уже все хорошо. Но нет предела совершенству.

Может можно таким же легким движением руки присвоить свой цвет каждому статусу?

Есть такой модуль, который должен был решать все эти вопросы. Но он не работает, и автор явно на него забил.

А было бы так здорово, если бы "нет в наличии" было красным, "предзаказ" оранжевым, а "в пути" например синим.

Спасибо!

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


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

Подскажите пожалуйста, голова кругом

$_['text_outstock'] = 'Нет в наличии';
$_['text_minstock'] = 'Заканчивается';

в начале темы сказано, что при добавлении этих строк в языковой файл product.php и на странице товара эти переменные начинают работать. И у автора темы типа все получилось со страницей товара. Но у меня ничего не работает, и что-то я сомневаюсь что все так просто.

 

Ниразу не встречал понятия "text_minstock" в опенкарте, а значит просто добавить текстовую переменную не получится, или я не прав?

Изменено пользователем pasha77

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


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

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

в файле catalog/controller/module/filterpro.php я добавил            

                $stock_status = $result['stock_status'];                
                $this->data['products'][] = array(                
                'statuses'    => $statuses['category'], //это для модуля стикеры товара
                'stickers'    => $statuses['category_stickers'], //это для модуля стикеры товара
                'stock_status'       => $stock_status,
                'product_id'  => $result['product_id'],
                'thumb'       => $image,
                'name'        => $result['name'],
                'description' => $description,
.........

и в файл template/module/filterpro_products.tpl добавил

<div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
  <div class="description"><?php echo $product['description']; ?></div>
  <div class="statuses"><?php echo $product['statuses']; ?></div> <!--это вывод модуля стикеров-->
  <?php echo $product['stock_status']; ?> <!--ЭТО 12 СТРОКА-->
  <?php if ($product['price']) { ?>
  <div class="price">
     <?php if (!$product['special']) { ?>
    <?php echo $product['price']; ?>
    <?php } else { ?>

при выдаче ошибка

Notice: Undefined index: stock_status in ***/catalog/view/theme/default/template/module/filterpro_products.tpl on line 12

 

 

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


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

Ну а сделать правки в контроллере filterpro?

 

Контроллер filterpro.php по-умолчанию не передаёт "stock_status" никуда..

Объявите в нём в массиве...

$this->data['products'][] = array(

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


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

Предыдущее мое сообщение, фигня, не внимательно прочитал Ваше. 

 

В файле filterpro_products.tpl

<?php echo $product['stock_status']; ?>

Заключите в div, например:

<div class="stock_status"><?php echo $product['stock_status']; ?></div>

В файле filterpro_container.tpl после 2-х строк

html += '  <div class="description">' + $(element).find('.description').html() + '</div>';

вставьте

html += '  <div class="stock_status">' + $(element).find('.stock_status').html() + '</div>';

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


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

теперь выводится везде "Нет в наличии", даже у товаров в наличии.

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


Ссылка на сообщение
Поделиться на другие сайты
symbol95    0
<?php if ($product['stock_qty'] <= 0) { ?>  
     <?php echo $product['stock_status']; ?>                                                                  
  <?php } else { ?>
    Есть в наличии                                           
 <?php } ?>

 

У меня на ocStore Версия 1.5.5.1.2

не работает такой вариант

вначале лезет ошибка, что нет stock_qty

если ввести stock_qty

ошибка уходит,

но выводится все по старому, т.е. выводится статус 

не подскажите как решить...

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

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