Всего 124 711 комментариев

Артур Шевченко
21 апреля 2025, 19:50
0
Настроил контексты
Как именно настроил? Указал site_url, site_start, http_host? Плагин для переключения контекстов написал?
Артур Шевченко
21 апреля 2025, 14:20
0
Я же готовый пример скинул — пользуйся. Могу лишь добавить, что $c->select() и все другие методы можно вызывать сколько угодно раз.
Павел Романов
21 апреля 2025, 12:44
0
Здравствуйте.
Первой должна идти колонка «Категории»
Дмитрий
21 апреля 2025, 10:52
0
$q->leftJoin('msOrderProduct', 'Product', 'msOrder.id=Product.order_id AND Product.product_id = 190');
а как в этой конструкции сделать AS, как в запросе, к примеру, select name from table_name as name_product?

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

$c->select(
            $this->modx->getSelectColumns('msOrder', 'msOrder', '', ['status', 'delivery', 'payment'], true) . ',
            msOrder.status as status_id, msOrder.delivery as delivery_id, msOrder.payment as payment_id,
            UserProfile.fullname as customer, User.username as customer_username,
            Address.region as region, Address.text_address as text_address, Address.city as city, Address.phone as phone,
            Status.name as status, Status.color, Delivery.name as delivery, Payment.name as payment'
        );
и если я дописываю, к примеру Product.name as name_product, а в системных настройках минишопа задаю дополнительное поле для таблицы заказов name_product, то все работает.
Но, естественно, выводится только 1 товар, а не все. И, увы, финт ушами, который я проворачивал со стороны фронденда, уже не выходит.
$sQuery="SELECT 
adr.id, adr.country, adr.region, adr.phone, adr.comment, ord.status, adr.text_address, ord.order_comment, ord.delivery, ord.num, ord.weight,
adr.receiver, ord.cost,
*********
(select GROUP_CONCAT(name, ' - ', count, 'шт ') as names from modx3_ms2_order_products where order_id = adr.id) as names
FROM modx3_ms2_order_addresses as adr
*********

LEFT JOIN 
modx3_ms2_orders as ord ON adr.id=ord.id ORDER BY adr.id DESC
";
я так понимаю, что select это какой-то метод в процессоре, и в итоге выходит ошибка…

как мне это:
(select GROUP_CONCAT(name, ' - ', count, 'шт ') as names from modx3_ms2_order_products where order_id = adr.id) as names
FROM modx3_ms2_order_addresses as adr
засунуть в это:
$c->select(
            $this->modx->getSelectColumns('msOrder', 'msOrder', '', ['status', 'delivery', 'payment'], true) . ',
            msOrder.status as status_id, msOrder.delivery as delivery_id, msOrder.payment as payment_id,
            UserProfile.fullname as customer, User.username as customer_username,
            Address.region as region, Address.text_address as text_address, Address.city as city, Address.phone as phone,
            Status.name as status, Status.color, Delivery.name as delivery, Payment.name as payment'
        );
Дмитрий
20 апреля 2025, 22:05
0
так, то да, только для мня то тут написана абракадабра =)
Артур Шевченко
20 апреля 2025, 20:59
0
Ага. Собственно в одном из первых ответов я точно так же сделал.
Дмитрий
20 апреля 2025, 20:56
0
$q->leftJoin('msOrderProduct', 'Product', 'msOrder.id=Product.order_id 
AND Product.product_id = 190');
о как, т.е. ты для существующего класса msOrderProduct, делаешь алисас Product, и описываешь условия джойна?
Артур Шевченко
20 апреля 2025, 20:50
0
я думал, это уже на мое усмотрение, ан нет
Как говориться: учи матчасть))) Ты можешь сам задать алиас, но в этом случае тебе так же самостоятельно нужно задать условия для соединения таблиц
$q = $modx->newQuery('msOrder');
$q->leftJoin('msOrderProduct', 'Product', 'msOrder.id=Product.order_id AND Product.product_id = 190');
$q->select('Product.options as options');
$q->where(['msOrder.id' => 604]);
$q->prepare();
echo $q->toSQL();
$q->stmt->execute();
$r= $q->stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($r);
Дмитрий
20 апреля 2025, 20:39
0
Эх! Сразу бы, ты меня послал бы на эти схемы=)))
Бегло посмотрел, кажись это именно то, что мне нужно было…
По крайней мере, уже нашел, как подключить нужную мне таблицу.
Собственно, я с самого начала был на верном пути… но…
я писал
$c->leftJoin('msOrderProduct', 'Product');
а нужно было
$c->leftJoin('msOrderProduct', 'Products');
Т.е. одна буква и все=)))
Вопрос в том, что мне даже в голову не приходило, что алиас, а именно Products, тоже где-то описан… я думал, это уже на мое усмотрение, ан нет, в схеме описано =)))
Дмитрий
20 апреля 2025, 20:08
0
я сам не очень понимаю, что мне нужно найти=)))
Но ведь где-то описан класс msOrderAddress, думаю, что если у меня будет этот класс, на основе него, я смогу создать свой, который мне нужен =))
Артур Шевченко
20 апреля 2025, 16:54
0
смогу найти как создан класс
Не очень понимаю, что ты хочешь найти, но могу с уверенностью заявить класс создан руками человека))) А в схеме можно посмотреть соответствие таблиц и классов, чтобы можно было писать запросы через XPDO.
Артур Шевченко
20 апреля 2025, 16:52
0
Наверное такой поход имеет место быть, правда я бы с удовольствием узнал подробности, как это работает.
Дмитрий
20 апреля 2025, 15:24
0
о! А вот это уже ближе к теме! Т.е. там я смогу найти как создан класс msOrderAddress? я правильно тебя понял?
Дмитрий
20 апреля 2025, 15:23
0
=))) ну значит не погружаюсь.
Что же касается исходников, я уже писал выше, что все изменения, которые я вношу в код у меня реализованы посредством подгрузки моих кастомных файлов.
Т.е. я смог сделать так, что бы модикс выводя таблицу с заказами минишопа, подгружал процессор не getlist.class.php, а мой собственный custom_getlist.class.php, то же самое и с файлами JS скриптов, которые мне требуется исправить. Другими словами, обновление мне нипочем.
А теперь я погружаюсь в ExtJs? =)))

Тут явно не требуется плагин… вернее, не так, у меня уже создан плагин, который грузит нужный мне процессор вместо штатного. Теперь мне лишь нужно «допилить» его до нужного мне состояния.
Артур Шевченко
20 апреля 2025, 15:20
0
leftJoin это как раз таки присоединение таблицы, но вот какой? у минишопа нет такой таблицы msOrderAddress…
Конечно нет, msOrderAddress это название класса. Работать напрямую с БД не очень удобно, поэтому Modx использует XPDO для формирования запросов в БД, а чтобы это было возможно нужно описать какие поля есть в таблице, какой тип данных в них надо записывать и т.д. Для описания используют классы модели, и каждому классу соответствует xml схема. Посмотреть xml схему можно в папке компонента core/components/minishop2/model/schema
Артур Шевченко
20 апреля 2025, 15:11
0
А я думал, я уже погружаюсь
Не, ты не погружаешься в ExtJs, кажется ты его ещё не видел))) Это js фреймворк на котором работает админка modx, т.е. тебе мало получить данные из БД, тебе нужно прокинуть эти данные в js, который отрисовывает админку. Есть вероятность, что прокинуть данные можно плагином, а вот модифицировать процессор через плагин вряд ли возможно. Если же ты будешь править исходники, то автоматически останешься без обновлений компонента, даже случайная переустановка снесёт все изменения. В общем, я бы так не делал. К тому же, за 6 лет работы с Modx, я сам в ExtJs не погружался, слава богу Modx позволяет делать страницы в админке со своими скриптами, для простой логики можно сделать страницы с помощью migx.
Дмитрий
20 апреля 2025, 14:23
0
А я думал, я уже погружаюсь… медленно правда, но тем не менее.
На сколько я тебя понял, то как раз, в том запросе, который я писал самостоятельно, именно это реализовано с помощью разделителя, по сути, меня такой вариант устроит более чем.
(select GROUP_CONCAT(name, ' - ', count, 'шт ') as names
from modx3_ms2_order_products
where order_id = adr.id) as names
Верно же?
Вопрос только в том, что я не могу понять код процессора.
Как я уже писал выше, мне нужно понять что такое msOrderAddress, и как можно создать аналогичный, по всей видимости запрос:
$c->leftJoin('msOrderAddress', 'Address');
ведь по логике вещей leftJoin это как раз таки присоединение таблицы, но вот какой? у минишопа нет такой таблицы msOrderAddress…

Если не трудно, помоги разобраться.
Артур Шевченко
20 апреля 2025, 11:07
0
Если ты не готов погружаться в в недра ExtJs будет сложно. К тому же вывести в списке заказов список товаров для каждого заказа можно только в виде строки с разделителем или в виде json. Я бы сделал свой интерфейс вместо стандартного если нужна сложная кастомная логика.
Дмитрий
20 апреля 2025, 10:31
0
Очень любопытный вопрос! Кастомизирую, так, что бы было удобно работать с таблицей, и нужная информация, для обработки заказа выводилась в таблицу, а не нужная, как раз таки пускай будет в модальном окне.
Артур Шевченко
19 апреля 2025, 11:56
0
Если речь про админку, то мне вообще непонятно, что ты пытаешься сделать и зачем? В админке есть интерфейс работы с заказами и в этом интерфейсе можно посмотреть перечень товаров в конкретном заказе.