30 января 2017, 16:47 у меня не было задачи чтобы с полями ресурсов-дублей велась работа. туда вообще бы никогда бы и не заглядывали. Но ваше решение интересно… надо будет влить в плагин. И уже далее вы правы на счет вывода синпета в шаблон. Но это уже за гранью того что должен был реализовать. Вам огромное спасибо, что помогли. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 0
30 января 2017, 16:23 не вижу в этом смысла… во первых плагин должен выполнить дополнительные манипуляции, что увеличивает время работы (а контекстов у нас уйма). во вторых зачем забивать в базу дублями контента, который может быть довольно обьемный. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 0
30 января 2017, 16:18 про «открытие страницы» все просто: оригинал — joxi.ru/4AkOW64upM6nAq дубль — joxi.ru/1A598YPcaKezAE про ваш плагин, я вобщето еще был бы рад подучить то что вы тут написали. маловато знаний у меня, только учусь. если объясните что и как, отвечу. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 0
30 января 2017, 16:05 в том то и дело что в этом плагине он ничего не должен делать, а то он просто подставит весь контент в ресус-дубь. чего и хотелось избежать. то есть код [[!OriginalFields?&id=`'.$id.'`&field=`content`]]должен сработать не в момент работы плагина по редактированию ресурса, а в момент открытия страницы. поэтому от и вынесен в отдельный снипет. в противном случае можно было бы просто указать: $response->set('content', $resource->get('content')); Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 0
30 января 2017, 15:56 Для бабела нужна привязка ресурс-ресурс для перелинковки. В моей задаче не должно было быть действий от заказчика вроде «создать перевод ресурса 325», то есть ничего ручками кроме тех преславутых переменных в контенте и по сайту для простого мультиязычника бабел вполне хорошая весч. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 +2
30 января 2017, 15:54 По поводу текста контента, весь фокус в том чтобы не вставлять весь контент в ресурсы контекстов-дублей. Представь что у оригинального контекста статься на 5000 знаков и это все помнож на количество контекстов-дублей (к примеру 80) иного 400000 знаков в базе зачем они там? не лучше ли оставить 5000 у ресурса оригинального контекста, а в поле контекста ресурсов-дублей поставить вызов снипета который и будет вытягивать контент только оригинального ресурса. надеюсь понятно )). По поводу $id = $id; $field = $field; лучше у Копирфильда спросить я и сам пока разбираюсь. Вобще тут должны подтягиваться настройки снипета для подтягивания контента из ресурсов оригинального контекста (пункт 5). к примеру [[originalFields?&id=`[[*id]]`&field=`content`]]. Я учусь и буду только рад если кто подскажет как это правильно подтянуть в самом снипете. Готовые решения / Автосоздание ресурсов в контекстах-дублях 23 0
27 января 2017, 18:56 Таки дописал велосипед про автоматизацию создания/удаления и редактирования ресурсов в контекстах-дублях. <?php if ($modx->event->name == 'OnDocFormSave') { // собираем дублированные контексты (web - оригинальный контекст) $contexts = $modx->getCollection('modContext', array('key:NOT IN' => ['mgr','web'])); // получаем родителя создаваемого ресурса $parent = $resource->get('parent'); if ($parent != '0') { $parentId = $modx->getObject('modResource', $parent); $parentAlias = $parentId->get('alias'); } $alias = $resource->get('alias'); $id = $resource->get('id'); // проходимся по контекстам foreach ($contexts as $context) { $response = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias' => $alias)); // если ресурс уже существует то тогда просто обновляем поля (кроме контента) if ($response) { $response->set('pagetitle', $resource->get('pagetitle')); $response->set('longtitle', $resource->get('longtitle')); $response->set('description', $resource->get('description')); $response->set('content', '[[!OriginalFields?&id=`'.$id.'`&field=`content`]]'); // ... много остальных полей $response->set('deleted', $resource->get('deleted')); $response->save(); } else { // создание нового ресурса $newResource = $modx->newObject('modDocument'); // заполняем поля ресурса $newResource->set('context_key', $context->key); $newResource->set('pagetitle', $resource->get('pagetitle')); $newResource->set('longtitle', $resource->get('longtitle')); $newResource->set('description', $resource->get('description')); $newResource->set('content', '[[!OriginalFields?&id=`'.$id.'`&field=`content`]]'); // ... много остальных полей $newResource->set('deleted', $resource->get('deleted')); // поле родителя для создания дубля в нем а не в корне if ($parent != '0') { $res = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias'=>$parentAlias)); $parntId = $res->get('id'); } else { $parntId = $parent; } $newResource->set('parent', $parntId); // сохраняем свежеиспеченый ресурс $newResource->save(); } } // очищаем кеш $modx->cacheManager->clearCache(); } // удаление ресурсов в дублирующих контекстах if ($modx->event->name == 'OnDocFormDelete') { // собираем дублированные контексты (web - оригинальный контекст) $contexts = $modx->getCollection('modContext', array('key:NOT IN' => ['mgr','web'])); // проходимся по контекстам foreach ($contexts as $context) { // получаем нужные (верней не нужные поэтому и удаляемые) нам ресурсы $response = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias' => $resource->get('alias'))); // помечаем как удаленные $response->set('deleted', $resource->get('deleted')); $response->save(); // удаляет полностью // $response->get('id'); // $response->remove(); } $modx->cacheManager->clearCache(); } Вопросы / Список всех контекстов 25 +2 3
25 января 2017, 14:40 а что за событие сработает по дублям при обновлении оригинала? случаем не OnDocFormRender? Вопросы / Список всех контекстов 25 0
25 января 2017, 14:21 спасибо! работает, но только он удаляет ресурсы в других контекстах сразу без переноса в конзину, а что для этого механизма надо подскажите пожалуйста? Вопросы / Список всех контекстов 25 0
25 января 2017, 13:29 А вот с удалением не особо получается, помогите пожалуйста кто может советом if ($modx->event->name == 'OnDocFormDelete' && $mode == 'new') { $contexts = $modx->getCollection('modContext', array('key:NOT IN' => ['mgr','web'])); foreach ($contexts as $context) { $newResponse = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias' => $resource->get('alias'))); $newResponse->remove(); } } Вопросы / Список всех контекстов 25 0
25 января 2017, 13:05 Итак… (барабанная дробь) представляю вашему вниманию очередной велосипед! буду премного благодарен если кто то из сожаления или непомерно бОльших знаний поправит это творение мученика науки. Но во всяком случае плагин работает дублируя ресурсы на остальные контенты кроме web. if ($modx->event->name == 'OnDocFormSave' && $mode == 'new') { $contexts = $modx->getCollection('modContext', array('key:NOT IN' => ['mgr','web'])); // получаем родителя $parent = $resource->get('parent'); if ($parent != '0') { $parentId = $modx->getObject('modResource', $parent); $parentAlias = $parentId->get('alias'); } // проходимся по контекстам foreach ($contexts as $context) { $newResource = $modx->newObject('modDocument'); $newResource->set('context_key', $context->key); $newResource->set('pagetitle', $resource->get('pagetitle')); $newResource->set('alias', $resource->get('alias')); // пишем еще различные поля для ресурса if ($parent != '0') { $res = $modx->getObject('modResource', array('context_key'=>$context->key, 'alias'=>$parentAlias)); $parntId = $res->get('id'); } else { $parntId = $parent; } $newResource->set('parent', $parntId); $newResource->save(); } $modx->cacheManager->clearCache(); } Вопросы / Список всех контекстов 25 +1
24 января 2017, 23:06 Сергей вы оказались правы по поводу цикла. Притом создание пошло во втором контексте по счету, до третьего контекста он не добрался, вырубило его. буду копать в сторону newObject. Если можете помогите с newObject советом пожалуйста. Вопросы / Список всех контекстов 25 0
24 января 2017, 22:45 плагин автоматом выключает… в общем со снипетами проще )) Вопросы / Список всех контекстов 25 0
24 января 2017, 22:32 тут странность нарисовалась… один и тот же код в плагине с событием OnDocFormSave и в снипете на странице. Но снипет работете, а вот плагин нет. В логах пусто… в чем может быть проблема??? Вопросы / Список всех контекстов 25 0
24 января 2017, 17:54 так как новые ресурсы будут создаваться/удаляться только в основном контексте то вот такой ваниантик работает на ура: $contexts = $modx->getCollection('modContext', array('key:NOT IN' => array('mgr', 'web'))); foreach($contexts as $context) { $response = $modx->runProcessor('resource/create', array( 'context_key' => $context->key, 'pagetitle' => 'new' )); } Вопросы / Список всех контекстов 25 0
24 января 2017, 17:44 а сами контексты не нужно распарсить перед действиями в них? Вопросы / Список всех контекстов 25 0
24 января 2017, 10:44 Может еще мыслишку подкините, как в контекстах, перебором создать страницы в нужных родителях идентично основному? (во загнул )) создаешь в основном контексте ресурс, он дублируется в остальные. заранее спасибо. Вопросы / Список всех контекстов 25 0
24 января 2017, 10:33 Хлопцы! огромное спасибо, и не надеялся на такую щедрость! Спасибо!!! Вопросы / Список всех контекстов 25 +1
16 января 2017, 21:06 Алексей, спасибо за подсказку. Видать когда я писал про бабел думал о переводах, а не о задаче. Нужно именно автосоздание/удаление дублей оригинальных ресурсов в других контекстах. Даже примеры соответствующих плагинов были.а не припомните где? Еще раз спасибо за ответ. Вопросы / Автоматическое создание ресурсов 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, сервис-ориентированная архит...
И уже далее вы правы на счет вывода синпета в шаблон. Но это уже за гранью того что должен был реализовать. Вам огромное спасибо, что помогли.
во первых плагин должен выполнить дополнительные манипуляции, что увеличивает время работы (а контекстов у нас уйма).
во вторых зачем забивать в базу дублями контента, который может быть довольно обьемный.
оригинал — joxi.ru/4AkOW64upM6nAq
дубль — joxi.ru/1A598YPcaKezAE
про ваш плагин, я вобщето еще был бы рад подучить то что вы тут написали. маловато знаний у меня, только учусь. если объясните что и как, отвечу.
то есть код
должен сработать не в момент работы плагина по редактированию ресурса, а в момент открытия страницы. поэтому от и вынесен в отдельный снипет. в противном случае можно было бы просто указать:
для простого мультиязычника бабел вполне хорошая весч.
По поводу
$id = $id;
$field = $field;
лучше у Копирфильда спросить я и сам пока разбираюсь. Вобще тут должны подтягиваться настройки снипета для подтягивания контента из ресурсов оригинального контекста (пункт 5). к примеру [[originalFields?&id=`[[*id]]`&field=`content`]]. Я учусь и буду только рад если кто подскажет как это правильно подтянуть в самом снипете.
буду премного благодарен если кто то из сожаления или непомерно бОльших знаний поправит это творение мученика науки. Но во всяком случае плагин работает дублируя ресурсы на остальные контенты кроме web.
Если можете помогите с newObject советом пожалуйста.
а не припомните где?
Еще раз спасибо за ответ.