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

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


FeranD

Recommended Posts

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

Решил добавлением простого, немного костлявого 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 ? )

 

((

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


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

  • 3 weeks later...

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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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