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

Материал из Umicms
Версия от 10:03, 5 июня 2013; Mad grant (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально для версии 2.9

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

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

Теперь, необходимо зарегистрировать наш сайт в twitter следующим образом: Зайти на dev.twitter.com под своим логином и паролем, затем нажать на ссылку "Register an app". Заполнить форму. Выбрать в пункте настроек "Default Access type" опцию "Read and Write". Нажать кнопку "Register Application". Теперь нужно 4 ключа для работы данного решения. Открыв своё созданное приложение в twitter нужно получить "Consumer Key" и "Consumer Secret". Потом нажать ссылку "My access token" и скопировать: "Access Token (oauth_token)" и "Access Token Secret (oauth_token_secret)". После этого, нужно скачать 2 файла перейдя по ссылке. Нас интересуют два файла, а именно twitteroauth/twitteroauth.php и twitteroauth/OAuth.php. Помещаем их в директорию ~/classes/modules/news/ В файле ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode) пишем следующий код:

<?php
public function twit(iUmiEventPoint $oEventPoint){
	if ($oEventPoint->getMode() === "after"){
		$object = $oEventPoint->getRef("element");
		if($object->getValue('twitter')==1){
			$id=$object->id;
			$title=$object->getValue('h1');
			$hierarchy = umiHierarchy::getInstance();
			$page=$hierarchy->getElement($id);
			$domainId=$page->getDomainId();
			$collection = domainsCollection::getInstance();
			$domain=	$collection->getDomain($domainId);
			$host=$domain->getHost();
			$url='http://'.$host.'/~/'.$id;
			$lngth=strlen($url);
			$text=substr($title,0,137-$lngth);
			$result=	$text."[^]".$url;
			require_once 'twitteroauth.php';
			define("CONSUMER_KEY", "<Вставить Consumer Key>");
                        define("CONSUMER_SECRET", "<Вставить Consumer Secret>");
                        define("OAUTH_TOKEN", "<Вставить Access Token (oauth_token)>");
                        define("OAUTH_SECRET", "<Вставить Access Token Secret (oauth_token_secret)>");
			$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);
			$content = $connection->get('account/verify_credentials');
			$connection->post('statuses/update', array('status' => $result));
		}
		 return true;
	}
}
?>

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

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