Роман Садоян

Роман Садоян

С нами с 26 июня 2015; Место в рейтинге пользователей: #79
Роман Садоян
19 сентября 2016, 14:17
0
В том то и дело, что это мистика :D
Роман Садоян
19 сентября 2016, 11:52
0
#35054 Может поможет — там полностью рабочий код.

Ошибки в логах есть? (в логах MODX)
Роман Садоян
19 сентября 2016, 11:44
0
Увы, но репозитории платных дополнений в привате..пруф
Роман Садоян
19 сентября 2016, 11:43
0
В 2.5.0 добавили возврат id ресурсов, которые были автоматически опубликованы. Обновись, потом можно будет покастовать что-нибудь.
Роман Садоян
18 сентября 2016, 00:24
+1
Не с движком, это что-то внутреннее у XAMPP/Openserver (мб и у Денвера), такая проблема не новая у виндовых пользователей.
Роман Садоян
17 сентября 2016, 22:43
0
Версия Модикс 2.5?
Если 2.5.0 и выше, то вот такой плагин — вернет id ресурсов которые были опубликованы автоматически:
Только я не знаю массив там или что.
switch($modx->event->name) {
  case 'OnResourceAutoPublish':
        $modx->log(1, 'IDS = '.print_r($results['published_resources'],1));
        break;
}
Роман Садоян
17 сентября 2016, 19:05
0
Пользуюсь VestaCP, установил после того как устал ручками прописывать конфиги для сайтов + из коробки идет почта + dns к этой почте, а также намного проще добавить новый сайт и всё что нужно. Но к интерфейсу очень долго привыкал. В Весту просто так не вникнуть! У неё своя механика.
В целом использование весты заканчивается добавлением нового сайта или почты или бд.
Всё остальное я делаю в консоли, благо у Весты есть свои команды для этого.
Также на всех сайтах SSL от Let's Encrypt.
В принципе всё устраивает. Естественно сервер с 512 ОЗУ не подойдет, если сайтов больше 5.

Вывод таков — если мало сайтов — юзай консоль. Если больше, то из бесплатных — веста пока самый лучший вариант.

Юзал ISPManager, Plesk, Ajenti и еще кучу всяких разных, которые выглядят в стиле начала 2000 годов.
Роман Садоян
17 сентября 2016, 17:58
0
Да нет проблем, я тоже думал что там всё просто)
Роман Садоян
17 сентября 2016, 17:50
0
В общем ответ мой таков — без вклинивания в ядро MODX, отследить id ресурсов. которые будут публиковаться автоматически не получится.
Мне самому стало интересно как это реализовать, поэтому я порылся в коде MODX и итог моих поисков ниже.

У modx нет стандартного события по отслеживанию подобных ресурсов, есть функция:
autoPublish() которая получает данные этих ресурсов и публикует их. В конце этой функции вызывается событие OnResourceAutoPublish которое просто выводит информацию о количестве обработанных ресурсов.

Ту или коммит в modxRevo с предложением добавить новое событие onAfterAutoPublishResource (или типа такого, где можно получить данные тех ресурсов которые были затронуты) или пилить Ядро в ручную, добавив самому туда необходимый код.

P.S.: Я могу нагородить чуши, т.к. не сильно разбираюсь в Ядре MODX, поэтому хотелось бы услышать мнение знающих людей, например Василия, Ивана или Филоофа.

Возможно это можно сделать проще и я ушел совсем не туда.
Роман Садоян
16 сентября 2016, 21:31
0
Ну вот собственно плагин на событие 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 компонента

Нужно только потестить, что будет с постами при мгновенной публикации.
Роман Садоян
16 сентября 2016, 20:49
0
Забудь про это событие! Вот правильно событие — OnDocPublished.
Я не знаю код mSocial, поэтому вынужден гадать, что же там делает этот плагин у него.
Как я думаю, он просто получает какие то данные ресурса и передает их куда-то.

Так вот, нужно взять этот код по работе с данными ресурса и вставить сюда, В этот плагин, между этими строчками:
case 'OnDocPublished':
	сюда код
break;
Можно даже поменять событие в самом плагине mSocial, только нужно тестить.
Роман Садоян
16 сентября 2016, 18:41
0
switch($modx->event->name) {
  case 'OnDocPublished':
    if( $name = $resource->get('pagetitle')){
      $modx->log(1, 'resource name autosave = '.$name);
    }
  break;
}
Вот так работает, теперь необходимо mSocial передать то что нужно, ну в общем так как у него в плагине.
Роман Садоян
16 сентября 2016, 18:19
0
Ничего не должно глючить, просто в лог должно писаться что-нибудь.
Мы же никаких действий не делаем больше, кроме как просто в лог пишем.
Роман Садоян
16 сентября 2016, 18:12
0
Упс, так name то не существует у нас)))
Чет я заработался… у ресурсов же pagetitle
if( $name = $resource->get('pagetitle')){
      $this->modx->log(1, 'resource name autosave = '.$name);
    }
Роман Садоян
16 сентября 2016, 18:06
0
Правильно, но событие я подсказал не правильное.

Выполни тот же самый код только на событие OnDocPublished
Роман Садоян
16 сентября 2016, 17:51
0
Нет это порядковый номер в выборке. id ресурса это id.
Роман Садоян
16 сентября 2016, 16:38
0
ты попробовал некэшированный вызов?
Роман Садоян
16 сентября 2016, 16:36
0
Ну нужно будет плагин mSocial немного переделать, для начала глянь есть ли объект $resource на событии OnResourceAutoPublish, попробуй в модиксовый лог скинуть что то, например:

if( $name = $resource->get('name')){
$this->modx->log(1, 'resource name autosave = '.$name);
}
Ну естественно сделав всякие обработчики, что бы это срабатывало только при событии OnResourceAutoPublish
Роман Садоян
16 сентября 2016, 14:40
0
И что же такого вейфаендер умеет, что не умеет pdoTools? в чанке, который парсит pdoResources вызывать еще один pdoResources, это плохо. Но если так нужно, то хотя бы вызывать не кэшированным.
Роман Садоян
16 сентября 2016, 13:33
0
Да, можете издеваться как хотите, там есть where и join'ы