07 февраля 2017, 15:40 switch ($modx->event->name) как правило используется для плагинов, содержащих в себе несколько событий. В таком случае проверку на родителя лучше делать ВНУТРИ, т.к. в некоторых событиях родителя может не быть в принципе. В случае, если у вас плагин срабатывает только на одно событие, то делать проверку можно параллельно: if ($modx->event->name == 'OnDocFormSave' && $resource->get('parent') == "14") { //... } Вопросы / В каком порядке лучше указывать вызов события? 9 0
07 февраля 2017, 15:11 Главная страница -> настройки -> заморозить url (включить и выставить что-нибудь в духе index.php) (для выборки больших объемов страниц любых лишних операций лучше избегать) Вопросы / Sitemap генерируется 414 секунд. 12 0
06 февраля 2017, 10:00 Это и есть весь код сниппета. Используется так: [[+age:имя_сниппета]] В вашем примере будет как-то так: [[+tv.birthday:ages:имя_сниппета]]Или так: [[!имя_сниппета? &input=`[[+tv.birthday:ages]]`]] Вопросы / Возраст человека 20 +1
06 февраля 2017, 06:52 $cases = array(2, 0, 1, 1, 1, 2); $titles = array('год', 'года', 'лет'); return $titles[($input % 100 > 4 && $input % 100 < 20) ? 2 : $cases[min($input % 10, 5)]]; Вопросы / Возраст человека 20 +2 1
05 февраля 2017, 22:38 //однозначным числам будет дописываться 0 перед значением {$idx | length == 1 ? '0' ~ $idx : $idx} (дополнение pdoTools должно быть выше версии 2.0, если не ошибаюсь) Вопросы / Как пронумеровать выводимые чанки? 17 0
05 февраля 2017, 22:34 В чанке arena_item укажите в нужном месте [[+idx]] Вопросы / Как пронумеровать выводимые чанки? 17 0
05 февраля 2017, 19:45 Вы можете реализовать сборный sitemap. Вопросы / Sitemap генерируется 414 секунд. 12 +2
01 февраля 2017, 16:59 Так никто ничего не знает..) По факту — внутренний баланс можно реализовать через msProfile, а на событие создания объявления (OnDocFormSave + проверка шаблона/родителя) в плагине проверять сумму на счете, и, при наличии соответствующей суммы, снимать с него. Примерно так: //проверки нужного события, шаблона, статуса объявления и тд... $user = $modx->getAuthenticatedUser('web'); $user_id = $user->get('id'); $user_money_profile = $modx->getObject('msCustomerProfile', $user_id); $balance = $user_money_profile->get('account'); $balance = float($balance); if ($balance > 5) { $new_balance = $balance - 5; $user_money_profile->set('account', $new_balance); $user_money_profile->save(); } else { //отклоняем объявление и выводим соответствующее сообщение } Пополнение счета и тд, соответственно, из коробки msProfile. Вопросы / Оплата размещения из личного кабинета 4 +2
30 января 2017, 16:55 Да не за что..) Видимо, я все-таки не совсем корректно понял задачу — мне казалось, что ресурсы дублируются во все контексты, т.к. у них потенциально могут быть разные подданные для каждого города. Если же у вас все данные одинаковые и редактировать страницы-дубли никто не будет, то правильнее вообще было бы не плодить лишних страниц, а воспользоваться кастомной маршрутизацией, которая перехватывала бы событие OnPageNotFound и отображала бы страницу-оригинал, доступную по адресу с идентификатором города. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +1
30 января 2017, 16:41 Понял. Ну, плагин выше и не будет плодить в базу дубли контента, он по-прежнему будет один у web'a — у остальных же поле будет очищаться при сохранении. Вышеописанный код решает задачу, с помощью которой можно видеть в админке любого дублируемого ресурса оригинальный контент и работать с ним напрямую. А сниппет, на мой взгляд, уместнее вынести непосредственно в шаблон: [[*context_key:is=`web`:then=`[[*content]]`:else=`[[!OriginalFields?&id=`[[*original_id]]`&field=`content`]]`]] Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +1
30 января 2017, 16:16 Если у вас есть единый контент для всех связанных ресуров, содержимое которого хранится у ресурса web-контекста, можно поступить так: if ($modx->event->name == 'OnBeforeDocFormSave' && $mode == 'upd') { if ($resource->get('context') != 'web') { $original_page = $modx->getObject('modResource', array( 'context_key'=> 'web', 'alias' => $resource->get('alias') )); if ($original_page) { $resource->set('content', $original_page->get('content')); } } } — таким способом мы будем подставлять контент основного ресурса при инициализации страницы редактирования побочных. Далее, уже при сохранении, обновляем содержимое основного ресурса и очищаем контент текущего: if ($modx->event->name == 'OnDocFormSave' && $mode == 'upd') { if ($resource->get('context') != 'web' && strlen($resource->get('content')) > 0) { $original_page = $modx->getObject('modResource', array( 'context_key'=> 'web', 'alias' => $resource->get('alias') )); if ($original_page) { $original_page->set('content', $resource->get('content')); $resource->set('content', '') } } } Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +2
30 января 2017, 16:09 … если честно, не совсем понимаю, о каком открытии страницы идет речь. Например, для такого вызова плагина ваш сниппет сможет получить данные? $modx->invokeEvent('OnDocFormSave',array( 'mode' => 'upd', 'id' => $page->get('id'), 'resource' => &$page, )); Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +1
30 января 2017, 16:04 К слову, о востребованности сниппета — не лучше ли вне цикла получать поле content у основного ресурса один раз, после чего просто передавать переменную? //... $original_content = $resource->get('content'); //... foreach ($contexts as $context) { //... $response->set('content', $original_content); } — в таком варианте вы запросите содержимое контента один раз, а не столько, сколько у вас контентов, отличных от web/mgr. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +2
30 января 2017, 16:00 Первая часть кода задавалась вопросом не что делает этот сниппет и зачем он нужен, а лишь о способе его вызова в php-коде. По поводу переменных для самописного сниппета — все параметры вида ¶m=`value` по-умолчанию доступны внутри сниппета в виде переменных $param. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +1
30 января 2017, 15:29 $response->set('content', '[[!OriginalFields?&id=`'.$id.'`&field=`content`]]'); — выглядит как какое-то извращение..) Лучше так: $params = array(); $params['id'] = $id; $params['field'] = 'content'; $snippet_result = $modx->runSnippet('OriginalFields', $params); $response->set('content', $snippet_result); UPD: А для чего эта магия, если не секрет? $id = $id; $field = $field; Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +2
29 января 2017, 00:42 С вашей задачей может помочь fenom — воспользуйтесь json_decode для tv-поля, после чего при помощи foreach сформируйте необходимый вид отображения Вопросы / pdoPage вывод из массива 3 +1
26 января 2017, 14:46 По умолчанию сниппет выше — не сможет. Чтобы смог, нужно расширить его так, как описано в статье по ссылке. Вопросы / Вывести ресурсы по несколько раз 11 +2
26 января 2017, 14:31 www.createit.ru/blog/modx/2012/custom-snippet-with-getpage/ Вопросы / Вывести ресурсы по несколько раз 11 +2
26 января 2017, 13:37 Многим лучше вызывать не getObject на каждый ресурс, а один раз getCollection, после чего сформировать результат циклом по ключу полученного массива. Вопросы / Вывести ресурсы по несколько раз 11 +2
Возможно ли реализовать возможность предоплаты за доставку на сайте? В любом случаем стандартный флоу минишоп2 рассчитан на оплату по ссылке, т.е. чтобы получить информацию об оплате, нужно чтобы заказ существовал. Чтобы сделать иначе, нужно использ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 18 px. Да и текст комментариев можно таким сделать. Для меня лично 16 — мелковато на больших экранах (в комментариях вообще 15 ...
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в orderUI, в зависимости от способов(оплаты доставки) я так поняла. попробуй код запуска события поставить ниже чем orderUI, после
ImageOptimizer - WebP/AVIF и responsive <picture> для MODX 3 Дополнение доступно modstore.pro/packages/photos-and-files/imageoptimizer
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Добавил localizator3_default_language
msInShopNotify Начиная с версии 3.0.0-beta добавлена поддержка MiniShop3 Минимальные требования: PHP 8.4 MODX 3.2 MiniShop3
MaxNotify Обновление 1.2.0-pl (03.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет `maxNotifyFormIt`; — добавлены уведомления о заявках SendIt через hook-...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
В случае, если у вас плагин срабатывает только на одно событие, то делать проверку можно параллельно:
(для выборки больших объемов страниц любых лишних операций лучше избегать)
В вашем примере будет как-то так:
Или так:
(дополнение pdoTools должно быть выше версии 2.0, если не ошибаюсь)
По факту — внутренний баланс можно реализовать через msProfile, а на событие создания объявления (OnDocFormSave + проверка шаблона/родителя) в плагине проверять сумму на счете, и, при наличии соответствующей суммы, снимать с него. Примерно так:
Пополнение счета и тд, соответственно, из коробки msProfile.
Видимо, я все-таки не совсем корректно понял задачу — мне казалось, что ресурсы дублируются во все контексты, т.к. у них потенциально могут быть разные подданные для каждого города. Если же у вас все данные одинаковые и редактировать страницы-дубли никто не будет, то правильнее вообще было бы не плодить лишних страниц, а воспользоваться кастомной маршрутизацией, которая перехватывала бы событие OnPageNotFound и отображала бы страницу-оригинал, доступную по адресу с идентификатором города.
Вышеописанный код решает задачу, с помощью которой можно видеть в админке любого дублируемого ресурса оригинальный контент и работать с ним напрямую.
А сниппет, на мой взгляд, уместнее вынести непосредственно в шаблон:
— таким способом мы будем подставлять контент основного ресурса при инициализации страницы редактирования побочных.
Далее, уже при сохранении, обновляем содержимое основного ресурса и очищаем контент текущего:
Например, для такого вызова плагина ваш сниппет сможет получить данные?
— в таком варианте вы запросите содержимое контента один раз, а не столько, сколько у вас контентов, отличных от web/mgr.
По поводу переменных для самописного сниппета — все параметры вида ¶m=`value` по-умолчанию доступны внутри сниппета в виде переменных $param.
— выглядит как какое-то извращение..) Лучше так:
UPD: А для чего эта магия, если не секрет?