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

Recommended Posts

1 минуту назад, Prooksius сказал:

да ладно, сколько там позиций в корзине-то..
А вот обращение к бд гораздо затратнее

1. Вы вероятно не работали с проектами где по 50-70 позиций в корзине бывает. А поверьте это создаст проблемы.
2. Обращение к БД в методе getProducts в корзине. Кол-во запросов в нем больше 10 как минимум и еще циклы для обработки. 
Мой же метод простой и быстрый.

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

5 минут назад, Prooksius сказал:

А вот обращение к бд гораздо затратнее

А т.е при 

$this->cart->getProducts();
Там нет обращений к бд совсем?

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

43 минуты назад, ocdev_pro сказал:

Там нет обращений к бд совсем?

одно, а у вас если в цикле - то будет много, особенно когда 50-70 позиций в корзине. Да еще и при 10 одновременных покупателях - весело будет. серверу

Ну а если с опциями - тут конечно в любом случае куча запросов, как ни крути.

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

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

одно, а у вас если в цикле - то будет много, особенно когда 50-70 позиций в корзине. Да еще и при 10 одновременных покупателях - весело будет. серверу

Ну а если с опциями - тут конечно в любом случае куча запросов, как ни крути.

Одно? Ну ясно)))

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

26 минут назад, ocdev_pro сказал:

Одно? Ну ясно)))

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

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

21 минуту назад, Prooksius сказал:

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

Минимум 8 запросов, и если найдены опции, запросит еще опции.. и в итоге при каждом обращении в корзину за методом getProducts выходит N товаров * 8 запросов
Если на странице 30 товаров, получаем 240 запросов только от 1 юзера. И только на корзину. А еще есть получение самих товаров, где LEFT JOIN product_description итд делаются в 1 запросе.. Огромном и тяжелом.. + модули итд. для БД много но мелких запросов обработать гораздо проще.
На магазине в 100 товаров оно может и не заметно согласен, но если взять магаз от 20000 да еще и с трафиком, то никаких ресурсов не хватит и будут тормоза

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

6 часов назад, ocdev_pro сказал:

Ну если по нормальному, то в system/library/cart/cart.php
Добавляем метод
 


	public function hasAdded($product_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart 
WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 
AND customer_id = '" . (int)$this->customer->getId() . "' 
AND session_id = '" . $this->db->escape($this->session->getId()) . "' 
AND product_id = '" . (int)$product_id . "'");

		if($query->num_rows){
			return true;
		}else{
			return false;
		}
	}

Затем из нужного места обращаемся к нему $this->cart->hasAdded($product_id); вернет bool значение

И не нужно обходить циклом всю корзину для подобной реализации. Потом страдают и говорят у меня корзина тупит

Всех благодарю за внимание и ответы. Если честно не получилось реализовать ни первый ни второй вариант.

Опишу свои шаги:

1. В system/library/cart/cart.php добавил в самом конце Ваш метод.

	public function hasAdded($product_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart 
WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 
AND customer_id = '" . (int)$this->customer->getId() . "' 
AND session_id = '" . $this->db->escape($this->session->getId()) . "' 
AND product_id = '" . (int)$product_id . "'");

		if($query->num_rows){
			return true;
		}else{
			return false;
		}
	}

2. В catalog/controller/product/product/php перед 
 

$data['products'][] = array(
                    'product_id'  => $result['product_id'],

Добавил $this->cart->hasAdded($product_id);

3. Что делать дальше не могу понять, я в php полный 0 - разобраться нет возможности, так как пишу сайт по вечерам (ночам) после работы, хочется уже добить этот момент и на хостинг.

 

Буду благодарен, если опишите подробнее, готов дать больше информации по коду, только скажите, что Вам потребуется.

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


Если говорить о первом варианте @Prooksius, то я видел похожее решение, но, повторюсь не сработало, в шаблоне постоянно выдаёт false.
Пробовал также такой способ:

Вроде бы ничего сложного, но видимо чего-то я не догоняю :?

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


43 минуты назад, Bdn сказал:

 

Вам в метод $this->cart->hasAdded(// сюда передаем id товара который проверяем);

 

если добавляете перед массивом $data['products']..
 

то определяем переменную $has_added = $this->cart->hasAdded($result['product_id']);
которая из запроса получить значение TRUE или FALSE

 

а в массив $data['products'] = array(

'added_to_cart' => $has_added,


потом в шаблоне где идет цикл

<?php foreach ($products as $product) { ?>

можно вызвать это значение и запустить в условие

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

ТОВАР в КОРЗИНЕ
<?php }else{ ?>

ТОВАР НЕ В КОРЗИНЕ

<?php } ?>


....
<?php } ?>

 

P.S Вам надо не пытаться понять Opencart, а учить просто язык программирования PHP,  Вы по матчасти просто не знаете ничего

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

В 05.02.2021 в 12:41, ocdev_pro сказал:

Затем из нужного места обращаемся к нему $this->cart->hasAdded($product_id);

Спойлер

 

22 часа назад, ocdev_pro сказал:

если добавляете перед массивом $data['products']..
 

то определяем переменную $has_added = $this->cart->hasAdded($result['product_id']);
которая из запроса получить значение TRUE или FALSE

 

а в массив $data['products'] = array(

'added_to_cart' => $has_added,


потом в шаблоне где идет цикл

<?php foreach ($products as $product) { ?>

можно вызвать это значение и запустить в условие

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

ТОВАР в КОРЗИНЕ
<?php }else{ ?>

ТОВАР НЕ В КОРЗИНЕ

<?php } ?>


....
<?php } ?>

 

В категориях работает.

 

А как в карточке товара завести?

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


1 минуту назад, Romti сказал:

В категориях работает.

 

А как в карточке товара завести?

А вьі тему попробуйте с начала прочесть

 

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


9 часов назад, Dimasscus сказал:

А вьі тему попробуйте с начала прочесть

А вы?

 

@Bdn  Задал вопрос

Спойлер
В 05.02.2021 в 03:49, Bdn сказал:

Подскажите кто-нибудь (немного не по теме, но всё же), нужно чтобы при нажатии на кнопку купить на странице товара - появлялась кнопка "В КОРЗИНЕ" с ссылкой на корзину (написать на js проблем не составило, но при обновлении страницы, естественно - опять кнопка "купить", тут нужен php, в котором совсем не шарю). Вопрос, может кто-то сказать, как реализовать данную функцию, либо подскажите подходящий модуль, спасибо.

ocsotre 3.0.2.0

 

Затем @Prooksius  и вы ответили...

Спойлер
В 05.02.2021 в 08:19, Prooksius сказал:

Я вот так иногда делаю: https://accent.md/

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

Сделать можно примерно так

В контроллере:



$cart_products = $this->cart->getProducts();
$product_id = <текущий ID товара>

$cart_added = false;
foreach ($cart_products as $cart_product) {
  if ($product_id == $cart_product['product_id']) {
	  $cart_added = true;
  	  break;
  }
}

а во view - примерно как вы написали.

 

Спойлер
В 05.02.2021 в 09:09, Dimasscus сказал:

Пример для 2.х 

 

Думаю под 3.х адаптируете без проблем.

 

А  @ocdev_pro предложил своё.

Спойлер
В 05.02.2021 в 12:41, ocdev_pro сказал:

Ну если по нормальному, то в system/library/cart/cart.php
Добавляем метод
 



	public function hasAdded($product_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart 
WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 
AND customer_id = '" . (int)$this->customer->getId() . "' 
AND session_id = '" . $this->db->escape($this->session->getId()) . "' 
AND product_id = '" . (int)$product_id . "'");

		if($query->num_rows){
			return true;
		}else{
			return false;
		}
	}

Затем из нужного места обращаемся к нему $this->cart->hasAdded($product_id); вернет bool значение

И не нужно обходить циклом всю корзину для подобной реализации. Потом страдают и говорят у меня корзина тупит

 

И сказал, что 'ваши' решения "не очень хорошие" и  @Prooksius согласился.

 

Вопрос вам  @Dimasscus , вы предлагаете использовать "не очень хорошие" решения?

 

 

Решение @ocdev_pro

Спойлер
Спойлер
В 05.02.2021 в 12:41, ocdev_pro сказал:

Ну если по нормальному, то в system/library/cart/cart.php
Добавляем метод
 




	public function hasAdded($product_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart 
WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 
AND customer_id = '" . (int)$this->customer->getId() . "' 
AND session_id = '" . $this->db->escape($this->session->getId()) . "' 
AND product_id = '" . (int)$product_id . "'");

		if($query->num_rows){
			return true;
		}else{
			return false;
		}
	}

Затем из нужного места обращаемся к нему $this->cart->hasAdded($product_id); вернет bool значение

И не нужно обходить циклом всю корзину для подобной реализации. Потом страдают и говорят у меня корзина тупит

Спойлер
В 05.02.2021 в 20:04, ocdev_pro сказал:

если добавляете перед массивом $data['products']..
 

то определяем переменную $has_added = $this->cart->hasAdded($result['product_id']);
которая из запроса получить значение TRUE или FALSE

 

а в массив $data['products'] = array(

'added_to_cart' => $has_added,


потом в шаблоне где идет цикл

<?php foreach ($products as $product) { ?>

можно вызвать это значение и запустить в условие

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

ТОВАР в КОРЗИНЕ
<?php }else{ ?>

ТОВАР НЕ В КОРЗИНЕ

<?php } ?>


....
<?php } ?>

 

Работает в категориях.

Как завести его в карточке товара?

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


9 часов назад, Romti сказал:

В категориях работает.

 

А как в карточке товара завести?

В product.php объявить переменную

$data['has_added'] =  $this->cart->hasAdded($product_info['product_id']);

А в шаблоне уже ее вызывать по примеру ранее
<?php if($has_added) { ?> .. итд

 

27 минут назад, Romti сказал:

Вопрос вам  @Dimasscus , вы предлагаете использовать "не очень хорошие" решения?

 

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

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

44 минуты назад, Romti сказал:

А вы?

 

@Bdn  Задал вопрос

  Показать контент

 

 

Затем @Prooksius  и вы ответили...

  Показать контент

 

 

  Показать контент

 

 

А  @ocdev_pro предложил своё.

  Показать контент

 

 

И сказал, что 'ваши' решения "не очень хорошие" и  @Prooksius согласился.

 

Вопрос вам  @Dimasscus , вы предлагаете использовать "не очень хорошие" решения?

 

 

Решение @ocdev_pro

  Показать контент
  Показать контент

 

  Показать контент

 

 

Работает в категориях.

Как завести его в карточке товара?

Вьі походу с чтением не в ладах? Где именно @ocdev_pro сказал что МОИ решения не очень хорошие, если я в ответе привел предложенное им решение? Вьі под чем то? Если вьі не понимаете разницьі между категорией и продуктом опенкарт- валите все на меня:))

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


11 минут назад, ocdev_pro сказал:

В product.php объявить переменную


$data['has_added'] =  $this->cart->hasAdded($product_info['product_id']);

А в шаблоне уже ее вызывать по примеру ранее
<?php if($has_added) { ?> .. итд

 

 

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

Єтому неформалу я указал на предложенньій вами вариант для карточки товара. Но он почему то решил что вариант МОЙ, да еще и неправильньій с ваших слов:))

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


21 минуту назад, ocdev_pro сказал:

В product.php объявить переменную


$data['has_added'] =  $this->cart->hasAdded($product_info['product_id']);

А в шаблоне уже ее вызывать по примеру ранее
<?php if($has_added) { ?> .. итд

Спасибо.

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


25 минут назад, Dimasscus сказал:

Вьі походу с чтением не в ладах? Вьі под чем то?

Ок, любите "это".

Спойлер

Да, как тут у вас "под таблетками", а сами не забыли?

 

23 минуты назад, Dimasscus сказал:

Єтому неформалу я указал на предложенньій вами вариант для карточки товара. Но он почему то решил что вариант МОЙ, да еще и неправильньій с ваших слов:))

 

Спойлер
В 05.02.2021 в 09:09, Dimasscus сказал:

Пример для 2.х 

 

Думаю под 3.х адаптируете без проблем.

 

Где там решение @ocdev_pro ??

тыкните плиз

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


14 минут назад, Romti сказал:

Ок, любите "это".

  Показать контент

Да, как у вас тут "под таблетками", а сами не забыли?

 

 

  Показать контент

 

 

Где там решение @ocdev_pro ??

тыкните плиз

Я все еще жду от вас тьіканья в МОИ неправильньіе решения:))

ТС - у я указал на вариант сокрьітия кнопки купить в товаре. Предложенньій oc_dev. Если вьі посмотрите внимательно, то возможно увидите.

 

Второму товарищу я предложил использовать решение из єтого модуля

Которьій тоже не мое решение :))

кстати оно рабочее, если что.  И не "плохое" судя по количеству скачанньіх копий.

 

так где же все таки МОЕ неправильное решение, которое я ВАМ предложил?

 

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


22 минуты назад, Dimasscus сказал:

ТС - у я указал на вариант сокрьітия кнопки купить в товаре. Предложенньій oc_dev. Если вьі посмотрите внимательно, то возможно увидите.

Так причем тут неформал?=)

Если я задал вопрос по другому вопросу...

 

22 минуты назад, Dimasscus сказал:

Второму товарищу я предложил использовать решение из єтого модуля

Я специально в кавычки занес=(

1 час назад, Romti сказал:

И сказал, что 'ваши' решения "не очень хорошие" и  @Prooksius согласился.

 

22 минуты назад, Dimasscus сказал:

Второму товарищу я предложил использовать решение из єтого модуля

Спойлер
В 05.02.2021 в 09:09, Dimasscus сказал:

Пример для 2.х 

 

Думаю под 3.х адаптируете без проблем.

вы цитировали целую тему.. и какое вы решение имели, я хз... (не проще модуль указать?)

Цитируйте сообщение плиз.

 

22 минуты назад, Dimasscus сказал:

так где же все таки МОЕ неправильное решение, которое я ВАМ предложил?

Согласен, не прав.

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


 

6 часов назад, Romti сказал:

вы цитировали целую тему.. и какое вы решение имели, я хз... (не проще модуль указать?)

а почитать тему, вера не позволяет?

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

1 час назад, fanatic сказал:

 

а почитать тему, вера не позволяет?

Вы чё все такие злые, Токсики?

Один не понял, другой завелся.. нет другого места погавкаться? 

Прекратите.

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

48 минут назад, ocdev_pro сказал:

Вы чё все такие злые, Токсики?

Один не понял, другой завелся.. нет другого места погавкаться? 

Прекратите.

Сорян. Вспьілил:)) Бьіл не сдержан. 

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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