Отложенные посты в mSocial
Имеется большое количество ресурсов, которые публикуются по расписанию. Прикрутил mSocialVK для постинга этих ресурсов в соц.сеть.
Проблема в том, что mSocialVK не работает с отложенной публикацией. Ставил события OnDocPublished и OnResourceAutoPublis — не помогло.
Разработчик сказал, нужно колдовать с mSocial.
Кто-нибудь может подсказать, в какую сторону колдовать? ) хотя бы временный способ, до обновления.
Проблема в том, что mSocialVK не работает с отложенной публикацией. Ставил события OnDocPublished и OnResourceAutoPublis — не помогло.
Разработчик сказал, нужно колдовать с mSocial.
Кто-нибудь может подсказать, в какую сторону колдовать? ) хотя бы временный способ, до обновления.
Комментарии: 20
Может есть ещё какие-то системные события, на которые можно повесить плагин?
Ну нужно будет плагин mSocial немного переделать, для начала глянь есть ли объект $resource на событии OnResourceAutoPublish, попробуй в модиксовый лог скинуть что то, например:
if( $name = $resource->get('name')){
$this->modx->log(1, 'resource name autosave = '.$name);
}
Ну естественно сделав всякие обработчики, что бы это срабатывало только при событии OnResourceAutoPublish
Я правильно понял, нужно так прописать?
switch($modx->event->name) {
case 'OnResourceAutoPublish':
if( $name = $resource->get('name')){
$this->modx->log(1, 'resource name autosave = '.$name);
}
break;
}
После автоматической публикации в лог ничего не выводится.
Правильно, но событие я подсказал не правильное.
Выполни тот же самый код только на событие OnDocPublished
Выполни тот же самый код только на событие OnDocPublished
Пост в группу ушел, но в логах по-прежнему ничего.
Упс, так name то не существует у нас)))
Чет я заработался… у ресурсов же pagetitle
Чет я заработался… у ресурсов же pagetitle
if( $name = $resource->get('pagetitle')){
$this->modx->log(1, 'resource name autosave = '.$name);
}
А я уже пробовал и pagetitle ставить… без толку )
Более того с pagetitle и посты не уходят в ВК, и админка глючить начинает.
Более того с pagetitle и посты не уходят в ВК, и админка глючить начинает.
Ничего не должно глючить, просто в лог должно писаться что-нибудь.
Мы же никаких действий не делаем больше, кроме как просто в лог пишем.
Мы же никаких действий не делаем больше, кроме как просто в лог пишем.
Ну то, что посты не выходят — это понятно, почему.
А админка не то чтобы глючит, просто если ресурс через контекстное меню в дереве публиковать, то ничего не происходит.
В логах тишина.
А админка не то чтобы глючит, просто если ресурс через контекстное меню в дереве публиковать, то ничего не происходит.
В логах тишина.
switch($modx->event->name) {
case 'OnDocPublished':
if( $name = $resource->get('pagetitle')){
$this->modx->log(1, 'resource name autosave = '.$name);
}
break;
}
switch($modx->event->name) {
case 'OnDocPublished':
if( $name = $resource->get('pagetitle')){
$modx->log(1, 'resource name autosave = '.$name);
}
break;
}
Вот так работает, теперь необходимо mSocial передать то что нужно, ну в общем так как у него в плагине.
Т.е. обернуть весь плагин mSocial в switch?
Работает, только если публиковать вручную.
На событие OnResourceAutoPublish не реагирует, как и раньше
Работает, только если публиковать вручную.
На событие OnResourceAutoPublish не реагирует, как и раньше
Забудь про это событие! Вот правильно событие — OnDocPublished.
Я не знаю код mSocial, поэтому вынужден гадать, что же там делает этот плагин у него.
Как я думаю, он просто получает какие то данные ресурса и передает их куда-то.
Так вот, нужно взять этот код по работе с данными ресурса и вставить сюда, В этот плагин, между этими строчками:
Я не знаю код mSocial, поэтому вынужден гадать, что же там делает этот плагин у него.
Как я думаю, он просто получает какие то данные ресурса и передает их куда-то.
Так вот, нужно взять этот код по работе с данными ресурса и вставить сюда, В этот плагин, между этими строчками:
case 'OnDocPublished':
сюда код
break;
Можно даже поменять событие в самом плагине mSocial, только нужно тестить.
Ну вот собственно плагин на событие onDocPublished
Должен выглядеть как то так:
Нужно только потестить, что будет с постами при мгновенной публикации.
Должен выглядеть как то так:
switch($modx->event->name) {
case 'OnDocPublished':
if ($modx->loadClass('mSocial', MODX_CORE_PATH . 'components/msocial/model/msocial/', true, true))
{
//Получаем лексиконы
$modx->lexicon->load('msocial:default');
/* Список полей для постинга */
$setting['allField'] = $resource->toArray();
/* Список tv полей для постинга */
$tv_query = $modx->newQuery('modTemplateVarResource');
$tv_query->leftJoin('modTemplateVar','modTemplateVar',array("modTemplateVar.id = tmplvarid"));
$tv_query->where(array('contentid'=>$resource->get('id')));
$tv_query->select($modx->getSelectColumns('modTemplateVarResource','modTemplateVarResource','',array('id','tmplvarid','contentid','value')));
$tv_query->select($modx->getSelectColumns('modTemplateVar','modTemplateVar','',array('name')));
$tvars = $modx->getCollection('modTemplateVarResource',$tv_query);
foreach ($tvars as $tvar) {
$tvar = $tvar->toArray();
if (!empty($tvar['value']))
$setting['allField'][$tvar['name']] = $tvar['value'];
}
// добавляем твиттер
if($resource->getTVValue('twPost')){
$setting['activeSoc'][] = 'tw';
}
// добавляем вк
if($resource->getTVValue('vkPost')){
$setting['activeSoc'][] = 'vk';
}
// добавляем fb
if($resource->getTVValue('fbPost')){
$setting['activeSoc'][] = 'fb';
}
// Определяем метод действий
$setting['method'] = 'posting';
if(count($setting['activeSoc']) > 0){
$mSocial = new mSocial($modx, $setting);
}
}else{
$modx->log(modX::LOG_LEVEL_ERROR, "Не удалось подключить класс mSocial в ".MODX_CORE_PATH."/components/msocial/model/");
return false;
}
break;
}
github компонента Нужно только потестить, что будет с постами при мгновенной публикации.
У меня так и было прописано, просто как вариант проверял ещё и OnResourceAutoPublis.
Сейчас даже специально скопипастил твой код — результат всё тот же. Посты выходят только если делать мгновенную публикацию. Для отложенной публикации этот код, к сожалению, не работает.
Сейчас даже специально скопипастил твой код — результат всё тот же. Посты выходят только если делать мгновенную публикацию. Для отложенной публикации этот код, к сожалению, не работает.
В общем ответ мой таков — без вклинивания в ядро MODX, отследить id ресурсов. которые будут публиковаться автоматически не получится.
Мне самому стало интересно как это реализовать, поэтому я порылся в коде MODX и итог моих поисков ниже.
У modx нет стандартного события по отслеживанию подобных ресурсов, есть функция:
autoPublish() которая получает данные этих ресурсов и публикует их. В конце этой функции вызывается событие OnResourceAutoPublish которое просто выводит информацию о количестве обработанных ресурсов.
Ту или коммит в modxRevo с предложением добавить новое событие onAfterAutoPublishResource (или типа такого, где можно получить данные тех ресурсов которые были затронуты) или пилить Ядро в ручную, добавив самому туда необходимый код.
P.S.: Я могу нагородить чуши, т.к. не сильно разбираюсь в Ядре MODX, поэтому хотелось бы услышать мнение знающих людей, например Василия, Ивана или Филоофа.
Возможно это можно сделать проще и я ушел совсем не туда.
Мне самому стало интересно как это реализовать, поэтому я порылся в коде MODX и итог моих поисков ниже.
У modx нет стандартного события по отслеживанию подобных ресурсов, есть функция:
autoPublish() которая получает данные этих ресурсов и публикует их. В конце этой функции вызывается событие OnResourceAutoPublish которое просто выводит информацию о количестве обработанных ресурсов.
Ту или коммит в modxRevo с предложением добавить новое событие onAfterAutoPublishResource (или типа такого, где можно получить данные тех ресурсов которые были затронуты) или пилить Ядро в ручную, добавив самому туда необходимый код.
P.S.: Я могу нагородить чуши, т.к. не сильно разбираюсь в Ядре MODX, поэтому хотелось бы услышать мнение знающих людей, например Василия, Ивана или Филоофа.
Возможно это можно сделать проще и я ушел совсем не туда.
Ох ты ж…
Не думал, что всё настолько сложно )
В любом случае, спасибо за помощь!
Не думал, что всё настолько сложно )
В любом случае, спасибо за помощь!
Да нет проблем, я тоже думал что там всё просто)
Версия Модикс 2.5?
Если 2.5.0 и выше, то вот такой плагин — вернет id ресурсов которые были опубликованы автоматически:
Только я не знаю массив там или что.
Если 2.5.0 и выше, то вот такой плагин — вернет id ресурсов которые были опубликованы автоматически:
Только я не знаю массив там или что.
switch($modx->event->name) {
case 'OnResourceAutoPublish':
$modx->log(1, 'IDS = '.print_r($results['published_resources'],1));
break;
}
2.4.3 )
В 2.5.0 добавили возврат id ресурсов, которые были автоматически опубликованы. Обновись, потом можно будет покастовать что-нибудь.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.