17 мая 2020, 18:34 Вы наверное опечатались, localstorage? Вопросы / Как в форме отправки заказа запомнить текст, переданный из JQuery 3 +1
13 мая 2020, 20:34 не стал проверять все 40 сайтов, проверил около 10ти. на 4 не отображаются, на 6 отображаются. Сайты на разных серверах. В чем причина, не знаю. приложения из modx.com и modmore при этом отображаются корректно. Вопросы / Пропали все приложения из магазина modstore 7 0
12 мая 2020, 16:06 просмотреть список всех модулей для php можно в ubuntu командой php -mпроверьте, может там нет в перечне curl Вопросы / cURL должен быть установлен и настроен как расширение PHP 6 +1
06 мая 2020, 17:54 Недавно столкнулся на одном из хостингов с тем, что они блокируют отправку писем если ящик отправитель не существует в реальности. Тоесть указываю я в emailsender — noreply@mysite.com и все отправляется. Переношу сайт на другой хостинг — не отправляется. Пишу в поддержку они говорят, что согласно нашему договору, пункт такой-то, мы блокируем отправку если ящика отправителя нет в реальности. Наверное это мало имеет отношение к вашему случаю, но вы все-таки обратитесь в службу поддержки хостинга, у них есть логи отправки почты и там будет уже видно в чем проблема. Вопросы / Не приходят заказы с minishop2 2 0
06 мая 2020, 14:48 Так ты же выбираешь опции это был не полный код, полный выглядит так $q = $modx->newQuery('msProductOption'); $q->innerJoin('msProduct', 'msProduct', 'msProduct.id=msProductOption.product_id'); $q->where(array('msProductOption.key' => 'height', 'msProductOption.value:IN'=> [152])); $q->where(array( 'msProductOption.key' => 'presure', 'msProductOption.value:IN'=> [900], )); $q->sortby('msProductOption.value','ASC'); $q->select('DISTINCT(msProductOption.value), msProduct.id'); //$q->where(array('msProductOption.key' => $key)); if (!empty($category)) { $ids = $modx->getChildIds($category); $ids[] = $category; $q->innerJoin('msCategory', 'msCategory', 'msCategory.id=msProduct.parent'); $q->where(array('msCategory.id:IN' => $ids)); } $q->prepare(); print_r($q->toSQL());Я пробовал второй и третий код, который вы написали — они не сработали и выдавали ошибки синтаксиса sql. Возможно это связано с тем, что в примерах условие простое КЛЮЧ — Значение. А у меня условие (Опция называется вот так и ее значение вот такое — это первый where и второй — опция называется как-то иначе и ее значение вот такое). Тоесть как-то так $q->where(array( 'OR:msProductOption.key' => 'presure', 'msProductOption.value:IN'=> [900], ));приводит к ошибке. А вот первый код, где можно передать дополнительно константу — я пропустил, спасибо. Но по сути, на данный момент я считаю что sql запрос получается то правильным, по крайней мере составляй я его сам, составил бы так же и два условия ДОЛЖНЫ соединятся через AND, если я хочу найти товар у которого одна опция равна чему то и вторая тоже равна чему то. Но почему-то этого не происходит, как только два условия WHERE ( ( `msProductOption`.`key` = 'height' AND `msProductOption`.`value` IN ('152') ) AND ( `msProductOption`.`key` = 'presure' AND `msProductOption`.`value` IN ('900') ) ) идут через AND то результат выборки пуст, хотя точно есть товар у котороо высота 154 и давление 900. В общем, где-то торможу я) Вопросы / ох уж это where 4 0
03 мая 2020, 21:28 массивом передавать нельзя. по крайней мере php масивом. пробовал разные варианты. сниппет ожидает только json потому что первой же строкой в msproducts вызывается функция декодирования json $filters = json_decode($scriptProperties['optionFilters'], true); можно передавать 'optionFilters' => json_encode(['height:=' => 500]),но суть не меняется. только пытаешься передать в условии OR, получаешь ошибку синтаксиса mysql Вопросы / что не так в optionFilters ? 8 0
03 мая 2020, 21:13 Теперь вызов $products=$modx->runSnippet('msProducts',[ 'parents'=>2, 'limit'=>100, 'showLog'=>1, 'optionFilters'=>'{"height:=":"200","OR:height:=":"900"}' ]);Дает результаты и лог без ошибок. 0.0001228: pdoTools loaded. 0.0125182: Conditions prepared 0.0001228: xPDO query object created 0.0003409: leftJoined msProductData as Data 0.0002599: leftJoined msVendor as Vendor 0.0007038: leftJoined msProductOption as height 0.0002830: leftJoined msProductOption as OR:height 0.0000050: Grouped by msProduct.id 0.0001090: Added selection of msProduct: `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties` 0.0000601: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source` 0.0000439: Added selection of msVendor: `name` AS `vendor.name`, `resource` AS `vendor.resource`, `country` AS `vendor.country`, `logo` AS `vendor.logo`, `address` AS `vendor.address`, `phone` AS `vendor.phone`, `fax` AS `vendor.fax`, `email` AS `vendor.email`, `description` AS `vendor.description`, `properties` AS `vendor.properties` 0.0120971: Processed additional conditions 0.0125079: Added where condition: class_key=msProduct, height.value:==200, OR:height.value:==900, msProduct.parent:IN(2,3,4,5), msProduct.published=1, msProduct.deleted=0 0.0002041: Sorted by msProduct.id, ASC 0.0000041: Limited to 100, offset 0 0.0006971: SQL prepared "SELECT `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`alias_visible`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id` = `Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `modx_ms2_product_options` `height` ON `height`.product_id = Data.id AND `height`.key = 'height' LEFT JOIN `modx_ms2_product_options` `OR:height` ON `OR:height`.product_id = Data.id AND `OR:height`.key = 'OR:height' WHERE ( `msProduct`.`class_key` = 'msProduct' AND `height`.`value` = '200' OR `height`.`value` = '900' AND `msProduct`.`parent` IN (2,3,4,5) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 ) GROUP BY msProduct.id ORDER BY msProduct.id ASC LIMIT 100 " 0.0026391: SQL executed 0.0000298: Rows fetched 0.0000670: Returning raw data 0.0011890: Checked the active modifiers 0.0076141: Loaded "modChunk" with name "tpl.msProducts.row" 0.0296071: Compiled Fenom chunk with name "modchunk/2" 0.0068347: Time to load products options 0.0851350: Total time 4 194 304: Memory usage Вопросы / что не так в optionFilters ? 8 0
03 мая 2020, 21:08 Ну к сожалению, без модификации исходного сниппета решить вопрос не удалось (и как только у стольких людей все работало, вот умеют же люди). Переписал логику регулярных выражений в msProducts, врядли это самое изящное решение, но пока лучше не нашел, разве что уж использовать очень сложные конструкции регулярных выражений — просмотр вперед и назад. // Add filters by options $joinedOptions = array(); if (!empty($scriptProperties['optionFilters'])) { $filters = json_decode($scriptProperties['optionFilters'], true); foreach ($filters as $key => $value) { $option = preg_replace('#\:.*#', '', $key); // начало вставки $sql=['OR','AND','LIKE']; if (in_array($option,$sql)){ $option = preg_replace('#\:=#', '', $key); } // конец вставки $key = str_replace($option, $option . '.value', $key); if (!in_array($option, $joinedOptions)) { $leftJoin[$option] = array( 'class' => 'msProductOption', 'on' => "`{$option}`.product_id = Data.id AND `{$option}`.key = '{$option}'", ); $joinedOptions[] = $option; $where[$key] = $value; } } }теперь OR, AND, LIKE вроде бы разбираются корректно и работаю. Немного жаль, что моя затея построить функционал на сниппете minishop2 прогорела, теперь нужно будет использовать свой модифицированный сниппет, а значит лишиться обновлений. Или же я все-таки неправильно изначально составляю условия для optionFilters? Вопросы / что не так в optionFilters ? 8 0
03 мая 2020, 20:10 подсказки при вводе — эти задачи решаются на js а не при помощи mSearch2. Поищите в сети, решений масса. Ну а по поводу отображения заведений и описания, все как я выше написал. Получаете на id ресурса его поля — поле content и ваш migx и выводите на страницу. Вопросы / mSearch2 и несколько полей поиска 12 0
03 мая 2020, 19:57 передавайте в форме для самой уж простоты еще два скрытых поля — два идентификатора ресурса аэропортов. В том месте где вы обрабатываете эту форму ловите идентификатор и по нему получаете все данные этого ресурса на fenom {set $id} - каким то образом полученный идентифиатор {set $objects = $id|resource:"migx_name"|fromJSON} {foreach $objects as $object} <p>{$object.name}</p> <p>{$object.type}</p> <p>{$object.worktime}</p> {/foreach} Вопросы / mSearch2 и несколько полей поиска 12 0
03 мая 2020, 19:50 то есть речь не о какой-то карте полета и пересадок? Простите мне пятый десяток, но я никогда не летал на самолете, так что мало в этом понимаю. А зачем тогда вводить два аэропорта? Вылета и прилета? Вопросы / mSearch2 и несколько полей поиска 12 0
03 мая 2020, 19:38 не совсем понятно. Что должен увидеть пользователь введя два аэропорта? города? Какие? по какому принципу? Вы пишите — у меня есть города. Что значит есть? Это ресурсы? Это ТВ какого то ресурса? Это MIGX? Это своя таблица в базе? Учитывая что информации очень мало то и совет можно дать только общий. Есть форма с двумя инпутами, обрабатывается ее событие change на js. Берите данные из полей, делайте запрос на отдельный php файл. В файле получаете объект modx docs.modx.com/current/ru/extending-modx/modx-class/loading-externally Создаете там запрос, составив условие из полученных в этом файле данных из формы как нибудь вот так docs.modx.com/current/en/extending-modx/xpdo/class-reference/xpdoquery/xpdoquery.where Что уж тут вы будете получать, зависит от того чем у вас являются «города» в программе. Возвращаете результат, который получает ваш js и вставляет его на страницу. Вопросы / mSearch2 и несколько полей поиска 12 0
03 мая 2020, 19:21 куда привели меня изыскания. Смотрю код сниппета msProducts. // Add filters by options $joinedOptions = array(); if (!empty($scriptProperties['optionFilters'])) { $filters = json_decode($scriptProperties['optionFilters'], true); foreach ($filters as $key => $value) { $option = preg_replace('#\:.*#', '', $key); $key = str_replace($option, $option . '.value', $key); if (!in_array($option, $joinedOptions)) { $leftJoin[$option] = array( 'class' => 'msProductOption', 'on' => "`{$option}`.product_id = Data.id AND `{$option}`.key = '{$option}'", ); $joinedOptions[] = $option; $where[$key] = $value; } } }Взял себе отдельно этот кусочек кода, скармливаю ему строку json $scriptProperties['optionFilters']= '{"height:=":"200","OR:height:=":"900"}'; $filters = json_decode($scriptProperties['optionFilters'], true); foreach ($filters as $key => $value) { $option = preg_replace('#\:.*#', '', $key); $key = str_replace($option, $option . '.value', $key); echo $key; }получаю теже некорректные (на мой взгляд) данные, что и в логе height.value:=OR.value:height:=тоесть регулярные выражения разбирают строку не совсем верно. Однако у меня есть старая версия minishop, посмотрел там этот сниппет и код там идентичен и люди говорят что синтаксис 'optionFilters'=>'{"height:=":"200","OR:height:=":"900"}' верен. Как же так… Как правильно составить условие для optionFilters чтобы использовать OR AND LIKE? Вопросы / что не так в optionFilters ? 8 0
03 мая 2020, 17:20 заманчиво) Но два нюанса — во-первых интересно самому, если уж не выйдет, то буду думать о покупке. Ну и самое главное, сайт, куда данный функционал необходим, сильно модифицирован, там переписаны ядра как модекса, так и минишопа и 95 процентов чужих компонентов там не работают. Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 +1
03 мая 2020, 17:04 Как раз в планах разработка подобного функционала Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 +1
01 мая 2020, 21:13 Если что, системные настройки кеширования, а заодно и pdoTools выглядят так. Вопросы / кеширование файловых элементов. Оно есть? Нет? Как отлючить? 6 0
[videoGallery] Видео галерея YouTube, Vimeo Невозможно установить пакет с подписью: videogallery-1.4.0-beta Ошибка установки Error в /core/packages/videogallery-1.4.0-beta/modCategory/7fc931a7772edc9752c16e9c41eb5e52.reso...
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Привет, добавил пользователя в группу mxBoard(4), создал токен. Добавляю все в postman пишет: rest: { «success»: false, «message»: «Недействительный токен.», «data...
Релиз miniShop2 ver. 4.4.1 & 4.4.2 Подскажите пожалуйста, может я что-то не знаю или упустил. Но есть ли решение по глюку с radio? Указываешь свое radio c одинаковым name и в результате при переключении получаешь вс...
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Расскажите пожалуйста как вы настраиваете сайт на MODX 3 чтобы был dev, prod, stage. Можете описать workflow? Допустим у меня 80% — это магазины, там клиенты, продажи, все онлай...
MaxNotify Обновление компонента 1.3.0-pl (22.07.2026) — добавлено автоматическое получение полей через msOrder->toArray(); — массивы и объекты безопасно пропускаются; — стандартные...
MyFavorites MyFavorites — 3.0.0-beta Первая версия для MODX Revolution 3.x — компонент полностью переписан с нуля (PHP >= 8.4, namespaced-ядро MODX 3, PSR-4, сервис-ориентированная архит...
на 4 не отображаются, на 6 отображаются.
Сайты на разных серверах.
В чем причина, не знаю.
приложения из modx.com и modmore при этом отображаются корректно.
проверьте, может там нет в перечне curl
Наверное это мало имеет отношение к вашему случаю, но вы все-таки обратитесь в службу поддержки хостинга, у них есть логи отправки почты и там будет уже видно в чем проблема.
Я пробовал второй и третий код, который вы написали — они не сработали и выдавали ошибки синтаксиса sql. Возможно это связано с тем, что в примерах условие простое КЛЮЧ — Значение. А у меня условие (Опция называется вот так и ее значение вот такое — это первый where и второй — опция называется как-то иначе и ее значение вот такое).
Тоесть как-то так
приводит к ошибке.
А вот первый код, где можно передать дополнительно константу — я пропустил, спасибо.
Но по сути, на данный момент я считаю что sql запрос получается то правильным, по крайней мере составляй я его сам, составил бы так же и два условия ДОЛЖНЫ соединятся через AND, если я хочу найти товар у которого одна опция равна чему то и вторая тоже равна чему то. Но почему-то этого не происходит, как только два условия
идут через AND то результат выборки пуст, хотя точно есть товар у котороо высота 154 и давление 900.
В общем, где-то торможу я)
сниппет ожидает только json
потому что первой же строкой в msproducts вызывается функция декодирования json
$filters = json_decode($scriptProperties['optionFilters'], true);
можно передавать
но суть не меняется. только пытаешься передать в условии OR, получаешь ошибку синтаксиса mysql
Дает результаты и лог без ошибок.
Переписал логику регулярных выражений в msProducts, врядли это самое изящное решение, но пока лучше не нашел, разве что уж использовать очень сложные конструкции регулярных выражений — просмотр вперед и назад.
теперь OR, AND, LIKE вроде бы разбираются корректно и работаю.
Немного жаль, что моя затея построить функционал на сниппете minishop2 прогорела, теперь нужно будет использовать свой модифицированный сниппет, а значит лишиться обновлений.
Или же я все-таки неправильно изначально составляю условия для optionFilters?
Ну а по поводу отображения заведений и описания, все как я выше написал.
Получаете на id ресурса его поля — поле content и ваш migx и выводите на страницу.
В том месте где вы обрабатываете эту форму ловите идентификатор и по нему получаете все данные этого ресурса на fenom
Простите мне пятый десяток, но я никогда не летал на самолете, так что мало в этом понимаю.
А зачем тогда вводить два аэропорта? Вылета и прилета?
Вы пишите — у меня есть города. Что значит есть? Это ресурсы? Это ТВ какого то ресурса? Это MIGX? Это своя таблица в базе?
Учитывая что информации очень мало то и совет можно дать только общий.
Есть форма с двумя инпутами, обрабатывается ее событие change на js. Берите данные из полей, делайте запрос на отдельный php файл.
В файле получаете объект modx
docs.modx.com/current/ru/extending-modx/modx-class/loading-externally
Создаете там запрос, составив условие из полученных в этом файле данных из формы
как нибудь вот так
docs.modx.com/current/en/extending-modx/xpdo/class-reference/xpdoquery/xpdoquery.where
Что уж тут вы будете получать, зависит от того чем у вас являются «города» в программе.
Возвращаете результат, который получает ваш js и вставляет его на страницу.
Смотрю код сниппета msProducts.
Взял себе отдельно этот кусочек кода, скармливаю ему строку json
получаю теже некорректные (на мой взгляд) данные, что и в логе
тоесть регулярные выражения разбирают строку не совсем верно. Однако у меня есть старая версия minishop, посмотрел там этот сниппет и код там идентичен и люди говорят что синтаксис
верен.
Как же так… Как правильно составить условие для optionFilters чтобы использовать OR AND LIKE?