06 марта 2020, 19:41 Справедливости ради, я бы поспорил про join. IN — еще большее зло, если в нем указана целая простыня (тысячи или десятки тысяч) id. Вот ради интереса копипастнул себе на один из проектов оба варианта и, как я и ожидал, второй существенно быстрее. На проекте 29705 товаров. Ну и я заменил getCollection на getCount, потому что получать 30к объектов — самоубийство, даже через более оптимальный getIterator. Вариант с IN: Total time: 0.7136 sВариант с join: Total time: 0.4630 sНо вариант с IN может оказаться действительно быстрее там, где небольшой перечень id, тут согласен. Готовые решения / Подзапросы для pdoTools 64 +1
04 марта 2020, 22:36 Дико извиняюсь, не удержался $where['o.makedate:>='] = '".$_GET['date1']." 00:00:00'"; $where['Detail.sk_order_id']=$.get.sk_order_id Готовые решения / Подзапросы для pdoTools 64 +4
01 марта 2020, 17:35 лучше смотреть в исходники Вопросы / $modx->getChildIds() Какие параметры можно задавать кроме контекста 3 +1
29 февраля 2020, 14:48 $object->get('image');Для получения остальных картинок нужно вытянуть массив объектов через $object->getMany('Files') Либо через xPDO, если нужно сделать только выборку и объекты не требуются. Вопросы / Как вытащить картинки товара из галереи минишопа через объект? 1 0
29 февраля 2020, 14:37 if ($product = $modx->getObject(msProduct::class, ['id' => 123, 'class_key' => msProduct::class])) { foreach ($product->getMany('Files') as $file) { $file->remove(); } }вместо 123 нужно указать id нужного товара Вопросы / Удалить галерею товара 1 0
28 февраля 2020, 13:50 Я выше вполне себе ясно написал, где оно хранится. Значение по умолчанию придумано не для выборок по нему, а для удобства в админке, о чем говорит название поля в таблице тв — default_textОчевидно, что здесь идет речь о том, что оно не добавляется в modTemplateVarResource. Вопросы / Совсем уж стыдно, но тем не менее - не могу сделать выборку where по значению TV 12 0
27 февраля 2020, 20:33 ну так все правильно, значения у этих тв не менялись, что выводить-то? еще раз, значение по умолчанию сделано не для выборки по нему, оно не добавляется в базу, наоборот, если установлено такое значение, то оно удаляется из базы, потому что оно «по умолчанию». из этого следует, что если вы ставите значение по умолчанию 1, то оно никогда не попадет в бд следовательно, если значения в бд нет, то значит оно = 1, если есть, то 0 Вопросы / Совсем уж стыдно, но тем не менее - не могу сделать выборку where по значению TV 12 +1
27 февраля 2020, 20:20 Конечно, значения по умолчанию в БД не будет, откуда ему там взяться? Представьте, что у вас 50000 ресурсов и вы добавили значение по умолчанию, не будут же они проставляться для 50000 ресурсов, логично? Значение по умолчанию придумано не для выборок по нему, а для удобства в админке, о чем говорит название поля в таблице тв — default_text Делайте исключающую выборку через :!= Вопросы / Совсем уж стыдно, но тем не менее - не могу сделать выборку where по значению TV 12 +1
25 февраля 2020, 18:56 Собственно, вопрос с версией актуален. У меня в ближайшее время планируется интеграция с Я.Кассой, поэтому хотелось бы узнать, @Володя, будет ли доступна версия, поддерживающая новый API? Новые дополнения и их версии / [mspYaCassa] - Яндекс Касса метод оплаты miniShop2 80 0 1
23 февраля 2020, 16:32 При работе с xPDOObject будет полезно почитать еще это: modx.pro/development/1177 дабы не наступить на грабли Вопросы / Почему в modx не работает метод save() для существующего объекта? (РЕШЕНО) 17 +1
23 февраля 2020, 16:22 Да, есть вариант делать unique по двум и более колонкам. Лично я не вижу необходимости в этой схеме наследоваться от xPDOSimpleObject. Используйте xPDOObject, указывайте эти 2 поля как primary & unique, добавив такой индекс <index alias="PRIMARY" name="PRIMARY" primary="true" unique="true" type="BTREE"> <column key="order_id" length="" collation="A" null="false" /> <column key="field_id" length="" collation="A" null="false" /> </index>Обновил ответ, изначально немного не так понял ваше сообщение. Вопросы / Почему в modx не работает метод save() для существующего объекта? (РЕШЕНО) 17 +1 1
23 февраля 2020, 15:30 Так а где в вашей таблице указано, что это primary/unique поля? Конкретно с вашей схемой в таблице может содержаться хоть 20 записей с одинаковыми значениями order_id и field_id. Добавьте индекс для этих полей, указав там, что это primary & unique (в случае с xPDOObject) или просто unique (в случае xPDOSimpleObject). Вопросы / Почему в modx не работает метод save() для существующего объекта? (РЕШЕНО) 17 +1
14 февраля 2020, 01:58 Все правильно, уже имеющиеся данные сборщиком не удаляются, это нужно делать самостоятельно. Для удаления сущностей я написал такой метод: /** * Remove objects */ protected function remove() { /** @noinspection PhpIncludeInspection */ $removed = include($this->config['elements'] . 'remove.php'); if (!is_array($removed)) { $this->modx->log(modX::LOG_LEVEL_ERROR, 'Invalid structure detected on \'Remove\' source'); return; } $count = 0; foreach ($removed as $className => $conditions) { /** @var xPDOIterator $objects */ if ($objects = $this->modx->getIterator($className, $conditions)) { /** @var xPDOObject $object */ foreach ($objects as $object) { $count += (int) $object->remove(); } } } $this->modx->log(modX::LOG_LEVEL_INFO, $count . ' items have been removed'); }Соответственно, в папку elements добавляется новый файлик — remove.php, где указываются класс сущности в качестве ключа и условия в качестве значения. return [ 'modResource' => ['id' => 1], 'modTemplate' => ['id' => 1], ];Естественно, с этим файликом нужно быть аккуратным и понимать, что указывать, а также не забывать его очищать для новых проектов. Для удаления файлов обычно хватает синхронизации в IDE, которая показывает расхождения между удаленным и локальным серверами. Вопросы / Обновление пакетов на базе modExtra и старые данные 3 +1 1
13 февраля 2020, 03:03 $pdoTools = $modx->getService('pdoTools'); return $pdoTools->getChunk($tpl, $properties);вместо обычного $modx->getChunk() Для разработчиков / [FAQ] Делаем сниппет-обёртку 17 +2
09 февраля 2020, 15:07 проблема не в том, что modx умирает, проблема в том, что вы не умеете искать информацию, которая находится у вас под носом: modx.pro/help/5645 вам даже ключевое слово для поиска подсказали по последней ссылке — SQL_OR достаточно было просто загуглить SQL_OR modx Вопросы / MODX действительно умирает? 4 +7
31 января 2020, 15:04 {foreach $rows as $row} {$row@index + 1} {/foreach}или {foreach $rows as $row index=$index} {$index + 1} {/foreach} Вопросы / Как задать счетчик итераций в цикле foreach в Fenom? 5 +1 2
28 января 2020, 19:03 Ответ касаемо modAccess гуглится буквально за 30 секунд: opengeek Reply #2, 7 years, 1 month ago It's a known bug and is harmless. modAccess is an abstract class which all the modAccess tables use and it does not have a table itself. Остальное — не ошибки, а уведомление о том, что объект удален, о чем говорит константа LOG_LEVEL_INFO. Вопросы / Корректное удаление пользователей, как правильно? 4 0
28 декабря 2019, 00:52 foreach ($modx->getIterator(modResource::class, ['parent' => 20]) as $object) { if (($parent = $object->getTVValue('parent')) && is_numeric($parent)) { $object->set('parent', $parent); $object->save(); } } Вопросы / Как можно оптимизировать данный код 7 0
28 декабря 2019, 00:51 на минуточку, в тв всегда хранится строка, поэтому проверять на is_int чуть более, чем бесполезно. Вопросы / Как можно оптимизировать данный код 7 0
27 декабря 2019, 02:39 $categoryOption = $modx->newObject('msCategoryOption'); $categoryOption->fromArray([ 'option_id' => 1, 'category_id' => 2, 'active' => true, ], '', true, true); $categoryOption->save();вместо 1 и 2, понятное дело, нужно указать нужные id опции и категории Вопросы / Как програмно присвоить опции категории? 1 +2
YaSmartCaptcha - защитите ваши формы от спама умной капчей от Яндекс Вообще не понял о чем речь) В системной настройке service_js сейчас указана ссылка smartcaptcha.cloud.yandex.ru/captcha.js Я предложил очистить эту настройку, тогда компонент н...
mxBackup — обезличенные копии MODX в пару кликов Ещё нет, я там разом почти полтора десятка пакетов выложил модератор, вероятно, а шоке.
Gallery3x 3.4.0 - вставка галерей прямо из визуального редактора (CKEditor и TinyMCE RTE) Здравствуйте. Есть консольный скрипт Вот почитайте: docs.ivan345.com/books/gallery3x/page/import-ms2galleryphp
[mSync] Новая версия синхронизации с 1С Всем привет. В какой то момент начали сыпаться ошибки: Error 23000 executing statement: INSERT INTO `modx_msync_products` (`product_id`, `uuid_1c`) VALUES ...
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
[SendIt 2.6.0] Анализ поведения пользователя для защиты от спама (невидимая капча)... Здравствуйте. Делаю личный кабинет на Sendit и со сбросом пароля возникли проблемы. Можете подсказать, в чем ошибка? Список вопросов в одноименном разделе на modx.pro пока пуст, и,...
Minishop + честный знак (продажа маркированной продукции) В нашем случае мы решили убрать всю логику по маркировке сайта.
IN — еще большее зло, если в нем указана целая простыня (тысячи или десятки тысяч) id.
Вот ради интереса копипастнул себе на один из проектов оба варианта и, как я и ожидал, второй существенно быстрее.
На проекте 29705 товаров.
Ну и я заменил getCollection на getCount, потому что получать 30к объектов — самоубийство, даже через более оптимальный getIterator.
Вариант с IN:
Вариант с join:
Но вариант с IN может оказаться действительно быстрее там, где небольшой перечень id, тут согласен.
Либо через xPDO, если нужно сделать только выборку и объекты не требуются.
Очевидно, что здесь идет речь о том, что оно не добавляется в modTemplateVarResource.
еще раз, значение по умолчанию сделано не для выборки по нему, оно не добавляется в базу, наоборот, если установлено такое значение, то оно удаляется из базы, потому что оно «по умолчанию».
из этого следует, что если вы ставите значение по умолчанию 1, то оно никогда не попадет в бд
следовательно, если значения в бд нет, то значит оно = 1, если есть, то 0
Представьте, что у вас 50000 ресурсов и вы добавили значение по умолчанию, не будут же они проставляться для 50000 ресурсов, логично?
Значение по умолчанию придумано не для выборок по нему, а для удобства в админке, о чем говорит название поля в таблице тв — default_text
Делайте исключающую выборку через :!=
дабы не наступить на грабли
Лично я не вижу необходимости в этой схеме наследоваться от xPDOSimpleObject.
Используйте xPDOObject, указывайте эти 2 поля как primary & unique, добавив такой индекс
Обновил ответ, изначально немного не так понял ваше сообщение.
Соответственно, в папку elements добавляется новый файлик — remove.php, где указываются класс сущности в качестве ключа и условия в качестве значения.
Естественно, с этим файликом нужно быть аккуратным и понимать, что указывать, а также не забывать его очищать для новых проектов.
Для удаления файлов обычно хватает синхронизации в IDE, которая показывает расхождения между удаленным и локальным серверами.
вам даже ключевое слово для поиска подсказали по последней ссылке — SQL_OR
достаточно было просто загуглить SQL_OR modx
opengeek Reply #2, 7 years, 1 month ago
It's a known bug and is harmless. modAccess is an abstract class which all the modAccess tables use and it does not have a table itself.
Остальное — не ошибки, а уведомление о том, что объект удален, о чем говорит константа LOG_LEVEL_INFO.