Еще дело в том, что в компоненте LastModified есть системная настройка lastmodified.update_parent —
«Обновление родителя», поэтому при включенной этой настройке нужно обновлять ресурс через «тяжелый процессор», чтобы обновился родитель, а если выключена то просто менять дату последнего редактирования ресурса.
Поэтому сделал так, вроде все работает…
if ($modx->event->name == 'OnEcMessageSave') {
$thread = $object->getOne('Thread');
if($thread && $resource = $thread->getOne('Resource')) {
//очищаем кэш
$resource->_contextKey = $resource->context_key;
$cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
// если в компоненте LastModified включена системная настройка "Обновление родителя" то делаем обновление через процессор
if ($modx->getOption('lastmodified.update_parent') == true){
$modx->runProcessor('resource/update',$resource->toArray());
} else { // если выключена, то просто обновляем дату последнего редактирования ресурса
$resource->set('editedon', time());
$resource->save(true);
}
}
}
Но есть вопрос.
Как сделать чтобы изображения были не 1.jpg и подобные, а например подставить название из tv/алиаса/и т.д.?
В сниппете можно динамическую генерацию url сделать.
Я скопировал сниппет, сделал url в своем сниппете какой мне нужно, но где генерируется название изображения из id и исходного расширения, я не представляю. Да и лезть и что-то менять в самих файлах компонента это неправильно…
Если чисто для тестирования в консоли, то тогда так:
Да, так выводит контейнеры, но также и кучу(DEBUG @ /… Как от них избавиться?
Кроме того 5 SQL queries. Total time в районе 0,02 s
Если убрать кучу(DEBUG @ /..., то как одно из решений очеь даже нормальное!
В общем сделал вот так. Публикую, может кому пригодится! Делал сам, так как нигде не нашел подобного универсального решения.
Если можно как-то улучшить, то буду признателен за публикацию примера с улучшением.
Вот сам код.
Так всего SQL queries: 1
Выводит все дочерние опубликованные ресурсы контейнеры всех уровней
если выключить ошибки, то выдает:
не все ресурсы, а кроме того некоторые НЕ контейнеры
То 'resources' => -24 тоже работать не будет.
Очень удобно.
resources там есть.
Если убрать
То 'resources' => -24 работает, и ресурс 24 исключается из выборки.
А множественные вызовы — это самый первый способ, о котором, каждый немного работавший с MODX, подумал бы. Если этот способ подходил бы, я бы не задавал этот вопрос.
В любом случае, благодарю за участие и попытку помочь.
Думаю, это можно реализовать одним вызовом pdoMenuFenom, я примерно так сделал HTML карту сайта.
Просто думал есть лучший способ.
Там же цифры такие:
39 запросов всего, и это запросы всей страницы, а не только этого вывода…
Обозвал его "Подружить easyComm с LastModified"
Вроде все работает как задумано. А именно:
1. Если редактировать сообщение, которое еще не публиковалось или снятое с публикации, НО при этом не публиковать его, то дата редактирования ресурса и его родителя не меняется кэш не очищается.
2. Если опубликовать/снять с публикации сообщение любым способом (из меню в списке или в модальном окне — чекбокс «Опубликовано»), а также если отредактировать и сохранить опубликованное сообщение, то меняется дата последнего редактирования ресурса и очищается кэш ресурса.
Кроме того, если в компоненте LastModified включена системная настройка «Обновление родителя», то обновляется также дата редактирования родителя и очищается его кэш. Если указанная настройка выключена, то меняется дата редактирования ресурса и очищается его кэш. С родителем ничего не происходит.
Буду благодарен, за конструктивную критику и за предложения по улучшению.
Благодарю за помощь!
Правда сейчас не могу проверить, нет доступа к сайту. Дома буду проверю.
Еще вопрос. Если ты указал, что поле сообщения можно получить вот так:
То наверное в моем коде
И подскажи в чем отличие? Или это одно и тоже?
Или в какой-то другой таблице это поле? Как туда записать и проверять находящееся там значение? Просто ни разу не работал с таким полем…
Но опять одно НО!
При редактировании ресурса, если поставить галочку «Опубликован» и сохранить, то проверку делаю так
Однако при редактировании сообщения, если СНЯТЬ галочку с «Опубликован» и сохранить, то обнуляются значения полей 'published' и 'publishedon', поэтому не знаю за что зацепиться, чтобы сделать проверку. Других подходящих полей в таблице _ec_messages нет. Например, типа поле со значением что ресурс ранее уже публиковался, но снят с публикации.
Может что-то упускаю?
В связи с этим вопрос. Как получить значение published сообщения, чтобы сделать проверку: если сообщение опубликовано или в неопубликованном сообщении установлен флажок в чекбокс «Опубликовано:», то только в этом случае обновлять ресурс.
В общем как сделать такую проверку?
ни так
Еще дело в том, что в компоненте LastModified есть системная настройка lastmodified.update_parent —
«Обновление родителя», поэтому при включенной этой настройке нужно обновлять ресурс через «тяжелый процессор», чтобы обновился родитель, а если выключена то просто менять дату последнего редактирования ресурса.
Поэтому сделал так, вроде все работает…
Благодарю всех за помощь!