Informática Numaboa - Tutoriais e Programação
Joomla e Twitter
- Detalhes
-
Categoria: Joomla
-
Atualização: Segunda, 02 Julho 2012 19:46
-
Autor: vovó Vicki
-
Acessos: 8799
O Twitter se transformou numa febre mundial por ser um imenso repositório de links que levam para os assuntos mais diversos. Como o Twitter é um serviço gratuito, porque não colocar os artigos publicados num site Joomla neste microblog e rede social diretamente através da interface de administração? Além de divulgar os textos num veículo de comunicação de sucesso para aumentar o número de visitas, o Twitter também funciona como uma espécie de diário que registra minha produção e atividade. Resolvi encarar a novidade e, como sempre, compartilhar a experiência com quem tiver interesse no assunto.
O planejamento
Podemos criar um plugin que é acionado toda vez que um artigo for salvo, mas desisti desta idéia por que não só artigos novos, como também os que fossem atualizados, seriam colocados no Twitter. Para evitar entradas em duplicidade, preferi criar um botão que permite "pilotar" novas inserções.
Vamos adicionar um botão na barra de ferramentas da tela de edição de artigos na interface administrativa. Clicando neste botão, o título e um link para o artigo que estiver sendo editado devem ser inseridos no Twitter.
O componente que permite criar e editar artigos é o /administrator/components/com_content. Algumas partes deste componente serão modificadas para atender a nova necessidade. Aqui vai um alerta: quando você for atualizar o Joomla, não se esqueça de que este componente foi modificado. Se ele for sobre-escrito, você pode perder as modificações feitas.
O botão customizado precisa ser atrelado a uma função que cria o título+link e que faz conexão com o Twitter para enviar o novo conteúdo.
A função
Vamos começar escrevendo a função insereTwitter() no arquivo /administrator/components/com_content/controller.php, logo depois da função insertPagebreak().
Para criar o link é preciso saber o tipo de endereçamento que está sendo usado no site: tradicional, do tipo http://www.seusite.com.br/index.php?option=com_content&view=article&id=1115, ou SEF , que é o mesmo link apresentado como http://www.seusite.com.br/informatica/tutos/1115-seuartigo. Escolha a função de acordo com seu modelo de link.
De acordo com as especificações do Twitter, só serão aceitas inserções com no máximo 140 caracteres. Isto nos obriga a "encolher" o conteúdo enviado se o limite de 140 caracteres for ultrapassado.
function insertPagebreak()
{
$document =& JFactory::getDocument();
$document->setTitle(JText::_('PGB ARTICLE PAGEBRK'));
ContentView::insertPagebreak();
}
function insereTwitter()
{
global $mainframe;
$db =& JFactory::getDBO();
//----- Obter o registro do artigo
$cid = JRequest::getVar( 'cid', array(0), 'post', 'array' );
$query = 'SELECT *' .
' FROM #__content' .
' WHERE id = '.(int) $cid[0];
$db->setQuery($query, 0, 1);
$artigo = $db->loadObject();
//----- Criar o link
$link = 'http://www.seusite.com.br/index.php?option=com_content&view=article&id=' . $artigo->id;
//----- Criar conexão com o Twitter
$login = 'usuário';
$pass = 'senha';
$host = 'twitter.com';
$porta = 80;
$fp = fsockopen( $host, $porta, $err_num, $err_msg, 10 );
$conta = base64_encode( $login . ':' . $pass );
if($fp) {
$twit = 'status=' . $artigo->title . ' ' . $link;
$limite = strlen( $twit );
if( $limite > 147 ) // 140 = dados + 7 = header
{
// cortar caracteres do título
$tit_curto = substr( $artigo->title, 0, strlen( $artigo->title ) - ( $limite-147 ) );
$twit = 'status=' . $tit_curto . ' ' . $link;
$limite = strlen( $twit );
}
//----- Enviar dados
fwrite($fp, "POST /statuses/update.xml HTTP/1.1\n");
fwrite($fp, "Authorization: Basic $conta\n");
fwrite($fp, "Host: $host\n");
fwrite($fp, "Content-type: application/x-www-form-urlencoded, charset=utf-8\n");
fwrite($fp, "Content-length: $limite\n");
fwrite($fp, "Connection: close\n\n");
fwrite($fp, $twit);
//----- checar se realmente chegou
$buf = NULL;
while( !feof( $fp ) ) {
$buf .= fgets( $fp, 128 );
}
fclose($fp);
//----- avisar
if(strpos($buf, '401 Unauthorized'))
$mainframe->enqueueMessage( "Problema com o usuário ou a senha do Twitter. O Twitter nã foi atualizado.", 'error' );
else
$mainframe->enqueueMessage( "O Twitter foi atualizado (conta $login)" );
}
}
}
function insertPagebreak()
{
$document =& JFactory::getDocument();
$document->setTitle(JText::_('PGB ARTICLE PAGEBRK'));
ContentView::insertPagebreak();
}
function insereTwitter()
{
global $mainframe;
$db =& JFactory::getDBO();
//----- Obter o registro do artigo
$cid = JRequest::getVar( 'cid', array(0), 'post', 'array' );
$query = 'SELECT *' .
' FROM #__content' .
' WHERE id = '.(int) $cid[0];
$db->setQuery($query, 0, 1);
$artigo = $db->loadObject();
//----- Identificar a seção à qual o artigo pertence
$query = 'SELECT * FROM #__sections WHERE id = ' . $item->sectionid;
$db->setQuery( $query );
$secao = $db->loadObject();
//----- Identificar a categoria à qual o artigo pertence
$query = 'SELECT * FROM #__categories WHERE id = ' . $item->catid;
$db->setQuery( $query );
$categ = $db->loadObject();
//----- Buscar item (ou itens) de menu
$query = "SELECT * FROM #__menu WHERE link LIKE '%" . $secao->id . "' AND link LIKE '%section%'";
$db->setQuery( $query );
$menu1 = $db->loadObject(); // item de menu - primeiro nível
$menu2 = ''; // item de menu - segundo nível, se houver
if( !$menu1->parent == 0 ) {
$query = 'SELECT * FROM #__menu WHERE id=' . $menu1->parent;
$db->setQuery( $query );
$menu2 = $db->loadObject();
}
// Se você tiver mais níveis de menu vai precisar ajustar com $menu3, $menu4, etc
//----- Criar o link SEF
$link = 'http://www.seusite.com.br/' . $menu2->alias;
if( $menu2->alias ) $link .= '/';
$link .= $menu1->alias . '/' . $categ->alias . '/' .$artigo->id . '-' . $artigo->alias;
//----- Criar conexão com o Twitter
$login = 'usuário';
$pass = 'senha';
$host = 'twitter.com';
$porta = 80;
$fp = fsockopen( $host, $porta, $err_num, $err_msg, 10 );
$conta = base64_encode($login.':'.$pass);
if($fp) {
$twit = 'status=' . $artigo->title . ' ' . $link;
$limite = strlen( $twit );
if( $limite > 147 ) // 140 = dados + 7 = header
{
// cortar caracteres do título
$tit_curto = substr( $artigo->title, 0, strlen( $artigo->title ) - ( $limite-147 ) );
$twit = 'status=' . $tit_curto . ' ' . $link;
$limite = strlen( $twit );
}
//----- Enviar dados
fwrite($fp, "POST /statuses/update.xml HTTP/1.1\n");
fwrite($fp, "Authorization: Basic $conta\n");
fwrite($fp, "Host: $host\n");
fwrite($fp, "Content-type: application/x-www-form-urlencoded, charset=utf-8\n");
fwrite($fp, "Content-length: $limite\n");
fwrite($fp, "Connection: close\n\n");
fwrite($fp, $twit);
//----- checar se realmente chegou
$buf = NULL;
while( !feof( $fp ) ) {
$buf .= fgets( $fp, 128 );
}
fclose($fp);
//----- avisar
if(strpos($buf, '401 Unauthorized'))
$mainframe->enqueueMessage( "Problema com o usuário ou a senha do Twitter. O Twitter nã foi atualizado.", 'error' );
else
$mainframe->enqueueMessage( "O Twitter foi atualizado (conta $login)" );
}
}
}
O botão na barra de ferramentas
Os botões que aparecem na barra de ferramentas da tela de edição de artigos são criados em /administrator/components/com_content/toolbar.content.administrator.html.php. Logo no início do arquivo, na função _EDIT($edit), adicione a seguinte linha logo abaixo de JToolBarHelper::help
JToolBarHelper::help( 'screen.content.edit' );
JToolBarHelper::custom( 'twitter', 'twitter.png', 'twitter.png', 'Twitter', false );
Agora vem o pulo do gato para que o botão seja representado por uma imagem. Tanto faz o nome que você tenha dado à imagem quando chamou a função JToolBarHelper::custom (no exemplo é twitter.png) por que vamos usar a folha de estilos do template da área administrativa para definir a imagem. Como uso o template Khepri, a folha de estilos é /administrator/templates/khepri/css/icon.css. Abra este arquivo e adicione a seguinte linha após .icon-32-default para criar a classe .icon-32-twitter:
.icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); }
.icon-32-twitter { background-image: url(../images/toolbar/icon-32-twitter.png); }
Observe que a url referencia uma imagem que está em ../images/toolbar/ (que corresponde a /administrator/templates/khepri/images/toolbar/) cujo nome é icon-32-twitter.png. Além da localização correta, o nome da imagem também é muito importante: precisa começar com icon-32-. Se quiser usar a mesma que eu usei, copie a imagem ao lado e faça o upload da mesma para o diretório indicado.
Associando o botão à função insereTwitter
Botão criado, função pronta. Agora só falta avisar que, quando o botão for clicado, a função insereTwitter() deve ser acionada. Abra o arquivo /administrator/components/com_content/admin.content.php e coloque a opção 'twitter' entre as opções 'ins_pagebreak' e default:
case 'ins_pagebreak' :
ContentController::insertPagebreak();
break;
case 'twitter' :
ContentController::insereTwitter();
break;
default :
ContentController::viewContent();
break;
Chamamos esta opção de 'twitter' por que foi assim que a nominamos quando chamamos a função JToolBarHelper::custom( 'twitter', 'imagem.png', 'imagem.png', 'Twitter', false ). Quando clicamos no botão, chamamos o arquivo admin.content.php com a opção 'twitter' que, usando a classe ContentController, chama a função insereTwitter() que colocamos em controller.php.
Agora é testar para crer. Pra mim funcionou certinho
Vadim Logofet Sberbankпастаотзывы nikas выбор системtranslate from hebrew to englishfacebook.com фото никос