Новости Joomla

Совет по Joomla: $db->getQuery(true) стал устаревшим

Совет по Joomla: $db->getQuery(true) стал устаревшим

👩‍💻 Совет по Joomla: $db->getQuery(true) стал устаревшим.Раньше при создании запросов в базу данных мы всегда получали объект запроса с помощью метода

getQuery(). Если передавался параметр
$new =
true, то получали новый запрос. Если без - последний.

use Joomla\CMS\Factory;$db = Factory::getContainer()->get('DatabaseDriver');$query = $db->getQuery(new: true);// и строим запрос
Под капот Joomla 4 вошёл Joomla Framework (PHP фреймворк а-ля Laravel, Yii и т.д.), а для Joomla 5 он обновился - версия 3.4.1 вышла 6 октября 2023г. В методе фреймворка есть примечание о том, что параметр
$new, который передавался в метод
getQuery() помечен как устаревший и будет удалён в версии фреймворка 4.0.
The parameter $new is deprecated and will be removed in 4.0, use %s::createQuery() instead.В Joomla 4 версия Joomla Framework была 2.x., в Joomla 5 - 3.x. Поэтому есть предположение, что с выходом Joomla 6 обновится и версия фреймворка - станет 4.0. Поэтому для получения объекта для новых запросов следует использовать метод
createQuery(). Он уже представлен в ядре и широко используется. При этом метод
getQuery() останется, но, скорее всего, будет выполнять функцию только геттера - получения текущего запроса.
@joomlafeed#joomla #php #разработка

0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 9902 Просмотров
*

SamDecKs

  • Захожу иногда
  • 57
  • 3 / 0
Сразу оговорюсь чтобы не путать. Речь идет не о функции "Максимальное количество единиц товара в заказе ". Необходимо сделать чтобы пользователь мог заказать в магазине только 1 товар и не более. Как такое реализовать?? !
*

Sven

  • Захожу иногда
  • 107
  • 6 / 5
Присоединяюсь к данному вопросу, мне тоже это необходимо. Поясню зачем это нужно:
Например покупателю понравилось сразу несколько товаров, но купить он намерен только какой-то один из них, который ему больше понравится когда их привезет курьер. Поэтому его нужно ограничить, иметь возможность сделать допустим - в одном заказе может быть не более 5 позиций. Чтобы он не мог заказать сразу 10 разных вещей, заранее зная что купит только какую-то одну из них.
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Подскажите, как решили вопрос? Так понял, что с помощью "Максимального количество единиц товара в заказе" можно ограничить только количество ОДНОГО товара в корзине, а надо, чтобы нельзя было заказывать больше одного Любого товара. Т.е. один заказ - один товар, и не более того. Как это реализовать?
« Последнее редактирование: 06.01.2014, 21:37:53 от pH43 »
*

nevigen

  • Moderator
  • 10448
  • 863 / 25
  • http://n*****n.com
/administrator/index.php?option=com_jshopping&controller=config&task=checkout
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
/administrator/index.php?option=com_jshopping&controller=config&task=checkout

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

(продукты указаны для примера)
*

nevigen

  • Moderator
  • 10448
  • 863 / 25
  • http://n*****n.com
ааа...т.е. надо общее максимальное кол-во, а не не кол-во каждой позиции.
хм....
настроек вроде нету таких. обычно чем больше в корзине тем магазину лучше :)
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
А можно как-нибудь поставить проверку на количество товаров в корзине?
Чтобы при добавлении нового товара в корзину она предварительно полностью очищалась.
Т.е.

Код
<?php
if ( кол-воТоваров != 0)
     { очистить корзину }
     else
     { добавить товар }
?>

Подскажите пожалуйста, как это можно грамотно написать или хотя бы Где это нужно прописать?

Этот вариант подойдет и для пользователей SamDecKs и SamDecKs
« Последнее редактирование: 21.01.2014, 18:16:17 от pH43 »
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
или очистить кеш перед добавлением нового товара
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Можно как-нибудь отменить заказ, если человек начал оформление, но не закончил его и перешел на другую страницу?
*

nevigen

  • Moderator
  • 10448
  • 863 / 25
  • http://n*****n.com
хм...
а как ? по какому событию ?
он ведь может его продолжить.
а во вторых заказа еще нет, если его не оформили.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Согласен, не вариант.
Нашел на форуме функцию очистки корзины http://joomlaforum.ru/index.php?topic=259265.0

Теперь бы привязать её к кнопке "Купить" (у меня по клику сразу переходит в корзину) с условием ЕслиТоваров>0 то function refresh(){... (http://joomlaforum.ru/index.php?topic=259265.0)


Идея рабочая? Есть предложения?
« Последнее редактирование: 22.01.2014, 14:20:36 от pH43 »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
в принципе рабочая. попробуйте в \components\com_jshopping\controllers\cart.php в function add() после
Код
       $cart->load($to);        
добавить
Код
if (count($cart->products) > Максимальное количество-1) {
$cart->delete(0);
}

по идее должно работать таким образом, что если в корзине уже лежит максимальное количество наименований, то при добавлении нового первый будет удален
« Последнее редактирование: 22.01.2014, 14:50:48 от dmitry_stas »
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Вставил, получилось так (отрывок кода)

Код

  
        $cart = &JModel::getInstance('cart', 'jshop');
        $cart->load($to);
if (count($cart->products) > 1) {
$cart->delete(0);
}
        if (!$cart->add($product_id, $quantity, $jshop_attr_id, $freeattribut)){
            if ($ajax){
                print getMessageJson();
                die();
            }


Не работает, что-то не так сделал?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну если максимальное количество=2 то так
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Проверил еще раз, Первый раз точно срабатывает, то есть если добавляешь следующий товар, то один лишний стирается, а вот если добавлять третий, четвертый раз и т.п., то все товары добавляются, сколько бы их ни было
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Разобрался! Поставил  $cart->clear(); вместо  $cart->delete(0)
т.е. получилось так:

Код

if (count($cart->products) > Максимальное количество-1) {
$cart->clear();
}



т.е. если нужно, чтобы заказчик мог сделать только один заказ, код будет таким

Код

if (count($cart->products) > 0) {
$cart->clear();
}


dmitry_stas +в репу! Спасибо!
« Последнее редактирование: 22.01.2014, 15:41:17 от pH43 »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Цитировать
если добавлять третий, четвертый раз и т.п., то все товары добавляются
забыл, что ключи в массиве не пересортировываются после удаления. рабочий код такой:
Код
if (count($cart->products) > Максимальное количество-1) {
$cart->delete(key($cart->products));
}
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
забыл, что ключи в массиве не пересортировываются после удаления. рабочий код такой:
Код
if (count($cart->products) > Максимальное количество-1) {
$cart->delete(key($cart->products));
}

Кардинально отличается от моей конструкции с $cart->clear(); или обе конструкции рабочие?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Цитировать
Кардинально отличается от моей конструкции с $cart->clear();
а никто и не обещал, что будут похожи :) я просто исправил свой код

Цитировать
или обе конструкции рабочие?
обе рабочие, только работают по разному. для макс 1 товара разницы в работе нет. а вот если 2 (и более), то в вашем варианте добавится 1, потом 2, потом при добавлении 3-го корзина очистится и в ней будет только 3. а в моем - будет просто удаляться первый товар, т.е. добавили 1, добавили 2, добавили 3 - получили в корзине 2 и 3
Плюс к этому, cart->clear влечет за собой удаление не только товаров, а и купона скидки например и т.д., что связано с корзиной
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

pH43

  • Захожу иногда
  • 335
  • 8 / 1
Цитировать
Кардинально отличается от моей конструкции с $cart->clear();
а никто и не обещал, что будут похожи :) я просто исправил свой код

Так я не утверждал, что конструкции разные, а наоборот как раз и спрашивал, есть ли между их работой кардинальное отличие)
Спасибо за развернутый ответ, теперь всё понятно, скорее всего будут в практике случаи, где и тот и другой вариант будут полезны!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
скорее всего будут в практике случаи, где и тот и другой вариант будут полезны!
так и есть. именно поэтому я и говорю, что оба варианта рабочие. однако я бы все же воздержался от $cart->clear() по озвученным ранее причинам. если необходимо просто удалить все товары, не удаляя весь объект Корзина, то лучше сделать
Код
$cart->products = array();
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод списка товаров с учетом значения связанного атрибута

Автор newalex

Ответов: 2
Просмотров: 900
Последний ответ 17.10.2024, 08:51:19
от newalex
Вместо стоимость 0 руб. вывести БЕСПЛАТНО в карточке товаров (Каталоге)

Автор IgorGeneralov

Ответов: 0
Просмотров: 2019
Последний ответ 13.04.2023, 21:06:09
от IgorGeneralov
Функционал сравнение товаров в JoomShopping

Автор falur

Ответов: 53
Просмотров: 15230
Последний ответ 22.08.2022, 09:54:16
от kit2m2
В списке товаров вывести названия категорий каждого товара

Автор shop-user

Ответов: 5
Просмотров: 2670
Последний ответ 25.01.2022, 06:05:12
от kit2m2
Поиск заказа по номеру телефона клиента

Автор Shiffer

Ответов: 19
Просмотров: 3144
Последний ответ 07.12.2021, 19:43:38
от anatol81n