13 апреля 2020, 20:29 должно быть вот так {$_modx->lexicon->load('minishop2:product')} {foreach $options as $name => $values} <div class="sm-text"><b>{('ms2_product_' ~ $name) | lexicon}</b></div> <div {if $constraints[$name]} data-constraints="{$constraints[$name]| json_encode: 256 | htmlentities}" {/if} > {foreach $values as $value index=$index} <label class="input-parent"> <input type="radio" value="{$values[$index]}" name="options[{$name}]" {if $index == 0}checked="checked"{/if} {if $constraints[$name]} data-relations="{$relations[$name][$value]| json_encode: 256 | htmlentities}" {/if} /> {$values[$index]} </label> {/foreach} </div> {/foreach} Новые дополнения и их версии / [msOptionsPrice2] - Связанные опции модификаций 30 0
13 апреля 2020, 20:13 Лексиконы подгружает сам минишоп, если вызываются его сниппеты. В вашем случае, видимо, они не вызываются, поэтому и лексиконы не работают. Соответственно, вам нужно подгрузить их самостоятельно, как посоветовали в том топике. {$_modx->lexicon->load('minishop2:product')}вот это нужно вставить в тот же чанк, где у вас не работают лексиконы, в самое начало Новые дополнения и их версии / [msOptionsPrice2] - Связанные опции модификаций 30 0
13 апреля 2020, 19:42 Вероятно, в JSON {"phytomodule_color":["sizes"],"equipment":["sizes","phytomodule_color"],"frame_color":["sizes","phytomodule_color","equipment"]} Новые дополнения и их версии / [msOptionsPrice2] - Связанные опции модификаций 30 0
11 апреля 2020, 21:00 берешь вот это чудо, дописываешь под свои нужды build.php, ну и вперед, дальше все должно быть понятно Вопросы / MODX Revo + PhpStorm. Есть рекомендации по использованию? 10 +1
31 марта 2020, 22:09 надо было прописать абсолютно каждую мелочь (о чем не говорят ни на одном форуме)абсолютно ни на одном форуме Вопросы / ПЕРЕНОС САЙТА С ХОСТИНГА НА ЛОКАЛКУ 13 +1
29 марта 2020, 16:30 потому что эта строка $parent = $resource->get('parent');возвращает id родителя, а не объект, поэтому в следующей строке вообще должен быть fatal error $parentTpl = $parent->get('template'); сначала нужно получить объект родителя на основе его id $parentObj = $modx->getObject(modResource::class, ['id' => $parent]);а затем уже работать с этим объектом Вопросы / Как задать шаблон создаваемого документа, исходя из шаблона родительского? 6 +1
28 марта 2020, 16:08 В общем, как выяснилось, ты хочешь, чтобы тебе на блюдечке готовое решение принесли, при этом ты даже не удосужился почитать документацию и предпринять хоть какие-то попытки решения своей проблемы. Не хочешь решать ее самостоятельно? Тебе сюда. Вопросы / Кеш корзины 15 0
27 марта 2020, 01:50 В плагине локализатора на OnDocFormPrerender напрямую дергается шаблон из ресурса в строке localizator.config.resource_template = "' . $resource->get('template') . '";из этого следует, что если открыть несуществующий ресурс в админке, то получим 500 ошибку было бы неплохо добавить проверку в следующем обновлении if ($mode == 'upd' && $resource instanceof modResource) { Новые дополнения и их версии / [localizator] Мультиязычность, СЕО, автоперевод... 353 0
26 марта 2020, 14:51 тильдами ничего не экранируется, тильда — конкатенация строки, а ошибка заключалась в неправильном синтаксисе и дважды открытых фигурных скобках Вопросы / Тернарный оператор 6 +1 1
24 марта 2020, 02:59 справедливости ради, в примерах от jQuery только 1 строчка думаю, любой vanilla js разработчик осилит ее заменить на document.addEventListener('eventName', e => {}); Новые дополнения и их версии / printPdf 1.1.0 31 0
23 марта 2020, 21:33 Но, компонент работает без jQuery.*довольные звуки сторонников vanilla js* Новые дополнения и их версии / printPdf 1.1.0 31 +1
19 марта 2020, 16:56 'where' => ['parent' => $id]или 'parents' => $idесли используется сниппет, принимающий параметры pdo Вопросы / Вопрос касаемо поиска на сайте 5 0
19 марта 2020, 16:52 выводишь справа нужные категории, у каждой из них должен быть прописан id, при отправке формы поиска ловишь выбранный id и добавляешь его в where при формировании поиска естественно, нужно обязательно фильтровать id, которые будешь отдавать в where Вопросы / Вопрос касаемо поиска на сайте 5 0
13 марта 2020, 21:04 Для этого есть отдельный процессор — resource/trash/purge. Вопросы / Как удалить ресурс из корзины в админке? 1 0
10 марта 2020, 23:44 Согласен, бывает и такое, но лично я считаю, что это проблема исключительно клиента и его нежелания обновляться на современное ПО. Почему разработчик должен тратить свое время и решать эти проблемы? Если клиент хочет поддержку IE, то пусть изволит оплатить это отдельно. А как только клиент поймет, что гораздо проще обновить ПО, чем каждый раз оплачивать доработку под IE, то вдруг у него внезапно появятся и Windows 7/10, и последний хром. Новые дополнения и их версии / [Quiz] - 2.1.0 - Ветвление, API и многое другое! 65 0
10 марта 2020, 20:53 О кроссбраузерности в 2020 году стоит думать только в том случае, если по какой-то странной причине есть надобность поддерживать бородатый IE, в чем я очень сильно сомневаюсь. В остальном никакой головной боли уже нет, а писать на современном JS одно удовольствие, чего не скажешь о jQuery лапше с всевозможным подавлением ошибок и зоопарком долларов. Новые дополнения и их версии / [Quiz] - 2.1.0 - Ветвление, API и многое другое! 65 0
06 марта 2020, 21:14 На самом деле getCount всегда возвращает число, поэтому проверка по сути не нужна) Можно было прям сразу return $modx->getCount('modResource', $q)); Готовые решения / Подзапросы для pdoTools 64 0
06 марта 2020, 21:10 pagetitle и price не самый удачный пример, способом с IN их не очень удобно доставать) я бы тут из-за удобства выбрал join, хоть он действительно будет немного медленнее Вариант с IN: $data = []; $c = $modx->newQuery('msProduct', ['class_key' => 'msProduct', 'published' => 1]); $c->select(['id', 'pagetitle']); if ($c->prepare() && $c->stmt->execute()) { $data = $c->stmt->fetchAll(PDO::FETCH_KEY_PAIR); } $c = $modx->newQuery('msProductData', ['id:IN' => array_keys($data)]); $c->select(['id', 'price']); if ($c->prepare() && $c->stmt->execute()) { while ($item = $c->stmt->fetch(PDO::FETCH_ASSOC)) { $data[$item['id']] = ['pagetitle' => $data[$item['id']], 'price' => $item['price']]; } } print_r($data); return; Total time: 0.4112 s Memory: 22 MB Можно было еще сделать через ASSOC и array_column, но это медленнее, как мне показалось Вариант с join: $c = $modx->newQuery('msProduct', ['msProduct.class_key' => 'msProduct', 'msProduct.published' => 1]); $c->select(['msProduct.pagetitle', 'Data.price']); $c->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id'); if ($c->prepare() && $c->stmt->execute()) { print_r($c->stmt->fetchAll(PDO::FETCH_ASSOC)); } return;Total time: 0.4927 s Memory: 18 MB Готовые решения / Подзапросы для pdoTools 64 0
06 марта 2020, 20:31 Да я прям копипастнул, только getCollection на getCount заменил Вариант с IN: $ids = []; $q = $modx->newQuery('modResource'); $q->select('id'); $q->where(array( 'published' => 1, 'class_key' => 'msProduct', )); if ($q->prepare() && $q->stmt->execute()){ while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) { $ids[] = $row['id']; } } /* @var msProductData $object*/ $q = $modx->newQuery('msProductData'); $q->where(array( 'id:IN' => $ids )); if($objectCount = $modx->getCount('msProductData', $q)) { return $objectCount; }Total time: 0.4705 sВариант с join: /* @var msProduct $object*/ $q = $modx->newQuery('msProductData'); $q->where(array( 'Product.published' => 1, 'Product.class_key' => 'msProduct', )); $q->innerJoin('msProduct','Product','Product.id = msProductData.id'); if($objectCount = $modx->getCount('msProductData', $q)) { return $objectCount; }Total time: 0.4096 sСейчас разница уже не такая большая, но она все еще в пользу join'а. Готовые решения / Подзапросы для pdoTools 64 0
06 марта 2020, 20:09 Не, это же таблица ms2_products, где id — PK и, естественно, с индексом. Дело в количестве указанных id, их слишком много, поэтому join работает быстрее. Готовые решения / Подзапросы для pdoTools 64 0
Как я использую mxBoard для работы с ИИ-агентами Немного непонятно, зачем здесь MODX. Агенты работают именно над этим сайтом или это какой-то общий оркестратор, и на доске могут быть карточки по разным сайтам? А ещё расскажи, ...
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 пока пуст, и,...
вот это нужно вставить в тот же чанк, где у вас не работают лексиконы, в самое начало
возвращает id родителя, а не объект, поэтому в следующей строке вообще должен быть fatal error
сначала нужно получить объект родителя на основе его id
а затем уже работать с этим объектом
из этого следует, что если открыть несуществующий ресурс в админке, то получим 500 ошибку
было бы неплохо добавить проверку в следующем обновлении
думаю, любой vanilla js разработчик осилит ее заменить на
если используется сниппет, принимающий параметры pdo
естественно, нужно обязательно фильтровать id, которые будешь отдавать в where
Почему разработчик должен тратить свое время и решать эти проблемы? Если клиент хочет поддержку IE, то пусть изволит оплатить это отдельно. А как только клиент поймет, что гораздо проще обновить ПО, чем каждый раз оплачивать доработку под IE, то вдруг у него внезапно появятся и Windows 7/10, и последний хром.
Можно было прям сразу
я бы тут из-за удобства выбрал join, хоть он действительно будет немного медленнее
Вариант с IN:
Можно было еще сделать через ASSOC и array_column, но это медленнее, как мне показалось
Вариант с join:
Вариант с IN:
Вариант с join:
Сейчас разница уже не такая большая, но она все еще в пользу join'а.
Дело в количестве указанных id, их слишком много, поэтому join работает быстрее.