Кросспостинг в livejournal

Материал из Umicms
Перейти к:навигация, поиск

Поставим задачу автоматически размещать анонсы новостей в livejournal.com и решим её следующим образом: Напишем кастомную функцию, которая будет производить автоматическое размещение сообщения в twitter при добавлении новости. Для этого в файле ~/classes/modules/news/custom_events.php разместим вызов нашей будущей функции по событию systemCreateElement:

<?php
	new umiEventListener('systemCreateElement', 'news', 'lj_post');
?>

После этого, нужно скачать архив. Распаковываем Помещаем файлы class-IXR.php и lj_class.php в директорию ~/classes/modules/news/lj/ В файле ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode) пишем следующий код:

<?php
public function lj_post(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
$object = $oEventPoint->getRef("element");
if($object->getValue('lj')==1){
$id=$object->id;
$title=$object->getValue('h1');
$anons=$object->getValue('anons');
$hierarchy = umiHierarchy::getInstance();
$page=$hierarchy->getElement($id);
$url=$hierarchy->getPathById($id);
$domainId=$page->getDomainId();
$collection = domainsCollection::getInstance();
$domain=	$collection->getDomain($domainId);
$host=$domain->getHost();
$url='http://'.$host.$url;

require_once 'lj/class-IXR.php';
include_once 'lj/lj_class.php';
mt_srand ((float) microtime()*1000000);

$journalUser = 'пользователь';
$journalPass = 'пароль';
$journalServer = 'www.livejournal.com';
$journalComm = '';

$cat_string = '';
$pic_keys = '';
$location = '';
$mood = '';
$music = '';
$the_title = $title;
$the_event = $anons.'<br /><a href="'.$url.'">Читать полностью</a>';
$date = date ('U');

$jdata = array();
$jdata['subject'] = $the_title;
$jdata['event'] = $the_event;
$jdata['year'] = date ('Y',$date);
$jdata['mon'] = date ('n',$date);
$jdata['day'] = date ('j',$date);
$jdata['hour'] = date ('G',$date);
$jdata['min'] = date ('i',$date);
$jdata['security'] = 'public';
$jdata['allowmask'] = 0;
$jdata['itemid'] = '';
$jmeta = array ();
$jmeta['opt_nocomments'] = 0;
$jmeta['opt_backdated'] = 0;
$jmeta['opt_preformatted'] = true;
$jmeta['picture_keyword'] = stripslashes ($pic_keys);
$jmeta['taglist'] = stripslashes ($cat_string);
$jmeta['current_location'] =  stripslashes ($location);
$jmeta['current_mood'] =  stripslashes ($mood);
$jmeta['current_music'] =  stripslashes ($music);
$ljc = new LJClient ($journalUser, md5($journalPass), $journalServer, $journalComm);
$r = $ljc->login();
if ($r[0] !== TRUE)
{
unset ($ljc);
}
$r = $ljc->postevent ($jdata, $jmeta);
unset ($ljc);
}
return true;
}
}
?>

В типе данных "Новость" добавляем поле типа "Кнопка-флажок" с идентификатором lj. Осталось только добавить запись о функции в ~/classes/modules/news/permissions.custom.php и можно использовать описанное решение.

Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.