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

Выключить кнопку купить у товаров, которых нету в наличии

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

Друзья, было дано задание деактивировать покупку товаров которых нет в наличии, при этом полностью убирать их из списков нельзя. 

Решил добавлением простого, немного костлявого js для шаблона product.tpl и quickview.tpl - все работает.

В коде просто зацепился регуляркой к строке "Нет в наличии".

 

В категориях, где товары выводятся без этой строки зацепиться не получается. 

 

Как же можно выключить кнопку "Купить" у товаров которых нет в наличии при выводе в каталоге ?

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


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

Нашёл участок php кода отвечающий за вывод кнопки "Купить"

<a href="javascript:openPopup('<?php echo $enquiry['popup_module']; ?>', '<?php echo $product['product_id']; ?>')" class="product-btn btn-add-cart button-enquiry">

 

В php совсем слаб. Как его исправить, чтобы соответствовал логике: если кол-во товара равно 0 , добавить к тегу класс btn-disabled, а так же установить href = "" (чтобы нельзя было кликнуть)?

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


Ссылка на сообщение
Поделиться на другие сайты
Только что, PaulKravchenko сказал:

Спасибо, к сожалению бюджет ограничен чуть меньшей суммой чем 0. И очень хотелось бы самому разобраться. Тем более ответ вроде бы близок

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


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

Пытаюсь заменить на такой блок кода 

 

<?php } else if ($product['quantity'] == 0) { ?>
<div class="product-btn btn-add-cart button-disabled"><i class="fa fa-shopping-cart"></i><span><?php echo $button_cart; ?></span></a>
<?php } else { ?>
<a onclick="cart.add('<?php echo $product['product_id']; ?>');" class="product-btn btn-add-cart"><i class="fa fa-shopping-cart"></i><span><?php echo $button_cart; ?></span></a>
<?php } ?>

в результате везде вывелся div с классом button-disabled. Вроде как $product['quantity'] используется в других файлах. Какую ошибку в условии я допустил ?

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

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


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

первый модуль бесплатен, то есть вписывается в ваш бюджет)

его функция Архивный товар делает то, что вам нужно.

Желание разобраться понятно, для этого можете посмотреть код модификатора - поймете в каком файле и какие изменения вносятся.

При этом вы не правите файлы движка, а это хорошо ибо правкой файлов только себе вредите.

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, PaulKravchenko сказал:

первый модуль бесплатен, то есть вписывается в ваш бюджет)

его функция Архивный товар делает то, что вам нужно.

Желание разобраться понятно, для этого можете посмотреть код модификатора - поймете в каком файле и какие изменения вносятся.

При этом вы не правите файлы движка, а это хорошо ибо правкой файлов только себе вредите.

 

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

все совершенно верно написали, и про правку движка и про остальное. но моё любопытство к сожалению или счастью всегда берет верх над рациональностью. с логикой разобрался и местом где править. все хорошо, только по неизвестной мне причине $product['quantity'] не определен в файле category.tpl. Т.е. другие поля - price, name и другие доступны, а вот quantity нет((( А он так нужен. Где копать ?

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


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

Порылся еще. Информации о кол-ве просто нету в переменной $product. Выглядит она так:

 

Array ( [product_id] => 520 [thumb] => http://xxxx0.jpg [name] => xxx [description] => Real Pharm Amino Rest – высококачественный аминокислотный комплекс, дополненный глютамином. Прием сп.. [price] => 1100р. [special] => [tax] => [minimum] => 1 [rating] => 5 [href] => xxxx )

 

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

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


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

добавьте в контроллер в массив данных товара переменную количества

catalog/controller/product/product.php

потом вызывайте ее в шаблоне (странице) товара

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


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

пример (мог что-то упустить)

catalog/controller/product/product.php

ищем: 'product_id'  => $result['product_id'],

добавляем после: 'quantity' => $result['quantity']

ищем: if ($product_info['quantity'] <= 0) {

добавляем перед:  $data['quantity'] = $product_info['quantity'];

 

catalog/view/theme/<тема>/template/product/product.tpl

используете условие, например так: <?php if $product_quantity <= 0{ ?>

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


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

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

на ку-ку оно вам надо столько сизифить?))

+ просто спрятать/отключить кнопку - это не все, вам же захочется чтоб отсутствующие товары не были вперемешку с наличествующими, захотите сортировать их последними например, ну и т.д. и т.п. :)

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


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

catalog/controller/product/product.php

ищем: 'product_id'  => $result['product_id'],

добавляем после: 'quantity' => $result['quantity']

найдено, добавлено. получается эти строчки в массиве 

	$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $rating,
					'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id']),
					'quantity'    => $result['quantity']
				);
Цитата

ищем: if ($product_info['quantity'] <= 0) {

добавляем перед:  $data['quantity'] = $product_info['quantity'];

тоже нашёл и добавил. получается записали в объект $product_info

 

а вот в .tpl оба вызова не работают. ни $product['quantity'] (мы же в него записали уже кол-во), ни $product_quantity (просто в переменную мы же и не писали, или же она берется из $data ? )

 

((

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


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

Что странно, попробовал посмотреть на $product через print_r - там как ожидается нету никакой ['quantity']

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


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

Всё !!! Разобрался. ПРЕОГРОМНЕЙШЕЕ ВАМ СПАСИБО !!! Это было незабываемо, честно. Настоящее путешествие в мир контроллеров, массивов данных, непонятных мне по сей день папок opencart'а !

 

Мы просто немного не тот контроллер правили, надо controller/category.php , а не страницы продукта. Добавил как вы написали в массив 'quantity' = $result['quantity'] и теперь есть доступ к количеству товаров !!!!

 

СПАСИБО !!!!!!!!!!!!!

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


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

сорри, я невнимательно прочел ваше первое сообщение и все примеры были нацелены на страницу товара, а не категории

но я рад, что вам понравилось)))

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


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

вам предстоит еще заняться остальными страницами))

помогу списком (контроллер / шаблон страницы):

 

catalog/controller/module/featured.php

catalog/view/theme/*/template/module/featured.tpl

 

catalog/controller/module/latest.php

catalog/view/theme/*/template/module/latest.tpl

 

catalog/controller/module/special.php

catalog/view/theme/*/template/module/special.tpl

 

catalog/controller/product/search.php

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

 

catalog/controller/product/special.php

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

 

catalog/controller/module/bestseller.php

catalog/view/theme/*/template/module/bestseller.tpl

 

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


Ссылка на сообщение
Поделиться на другие сайты
34 минуты назад, PaulKravchenko сказал:

вам предстоит еще заняться остальными страницами))

помогу списком (контроллер / шаблон страницы):

 

catalog/controller/module/featured.php

catalog/view/theme/*/template/module/featured.tpl

 

catalog/controller/module/latest.php

catalog/view/theme/*/template/module/latest.tpl

 

catalog/controller/module/special.php

catalog/view/theme/*/template/module/special.tpl

 

catalog/controller/product/search.php

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

 

catalog/controller/product/special.php

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

 

catalog/controller/module/bestseller.php

catalog/view/theme/*/template/module/bestseller.tpl

 

опа, а эти то зачем ? на сайте к счастью используется только Random products с заголовком Рекомендуемые товары))) его поправлю. Выводится через Advanced Grid

А как мне вам + в репу поставить , что то не нашел (

 

ХМ, файл ответственный за вывод Рекомендуемых товаров нашёл - это new_elements/product.tpl, а как найти его контроллер теперь ?

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

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


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

вообщем единственный вопрос, который по данной теме остался не закрытым это какой контроллер у Advanced Grid. 

Потому как именно через AG происходит вывод в Лучшая цена(файлов bestseller{tpl | php}  нигде нету), Рекомендуемые товары.

За это ответственен файл catalog\view\theme\porto\template\extension\module\advanced_grid\products\products_grid_with_carousel.tpl, 

в котором загружается шаблон new_elements/product.tpl. Вот где искать теперь его контроллер ? 

 

Структура файлов у AG какая-то ужасная, просто набор папок от 1 до 22, внутри которых одни и те же файлы, и попробуй разберу где-что.....

 

магия... стоит сформулировать вопрос и ответ находится... еще не проверил но скорее всего оно - controller/extension/module/advanced_grid.php

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

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


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

 

3 часа назад, FeranD сказал:

Друзья, было дано задание деактивировать покупку товаров которых нет в наличии, при этом полностью убирать их из списков нельзя. 

Решил добавлением простого, немного костлявого js для шаблона product.tpl и quickview.tpl - все работает.

В коде просто зацепился регуляркой к строке "Нет в наличии".

 

В категориях, где товары выводятся без этой строки зацепиться не получается. 

 

Как же можно выключить кнопку "Купить" у товаров которых нет в наличии при выводе в каталоге ?

 

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


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

Спасибо за предложение, но я уже описал выше отношение по этому поводу.

 

<?php foreach ($module['content']['products'] as $product) { ?>

вот так происходит получение $product. В файле controller/extension/module/advanced_grid.php

не нашел описание объекта $module. Где оно хранится и как добавить в него количество товара quantity ?

 

Всё, ребят. Кто помогал , спасибо. Сделал. Вывел $module['content'] на страницу, затем нашёл его по полям в advanced_grid.php и там уже добавил quantity через $result['quantity'] 

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

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


Ссылка на сообщение
Поделиться на другие сайты
18 часов назад, FeranD сказал:

а эти то зачем ?

как минимум в эти добавьте:

catalog/controller/product/search.php

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

это страница результатов поиска

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

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Вы комментируете как гость. Если у вас есть аккаунт, пожалуйста, войдите
Ответить в этой теме...

×   Вы вставили контент с форматированием.   Удалить форматирование

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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

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

×

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

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