Portal do Joomla Rio de Janeiro
 
 

Enquete

Quais as cores para o novo Portal?
 
Banner

Joomla e Twitter

Avaliação do Usuário: / 20
PiorMelhor 

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.


/administrator/components/com_content/controller.php - função sem SEF
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)" );
}
}
}

/administrator/components/com_content/controller.php - função com SEF
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

toolbar.content.administrator.html.php
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:

/administrator/templates/khepri/css/icon.css
.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 insere Twitter

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:

/administrator/components/com_content/admin.content.php
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

Fonte Vovó Vick : Numa Boa

Comentário

avatar Evandro Ribeiro
+1
 
 
Muito bom esse post sobre Joomla e Twiiter trabalhando praticamente em conjunto.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar sculpture
0
 
 
I recently came across your blog and have been reading along. I thought I would leave my first comment. I don’t know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
According to my exploration, billions of persons all over the world receive the loan from different creditors. Thence, there's good chances to find a college loan in every country.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
If you want some rules on how you can open up the grinding process with regards to term papers online then you shouldn't miss discovering this article.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar buy essay paper
0
 
 
When your goal is to build a career, you will have to use some professional custom essay writing service.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
Do not seek the the best research like this topic in the books! Buy essay or buy term paper in the custom essays writing firm.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
Even custom thesis writing services aren’t able create such kind of good enough legal dissertation relating with this topic or perchance, you work especially for custom dissertation services. In such case I will buy thesis from your service at once.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar thesis
0
 
 
Different people can not know where to detect the graduate thesis about this good post. Therefore, we can suggest your good information. But they will look for the dissertation writing.
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar lucas
0
 
 
cara sera q nao dava pra comprimi todo o trampo
criar seila um pluguin modulo, com instalador automático para usuários mais leigos...
ficaria bacana, vocês poderiam divulgar o nome do site criador, algo do tipo
mandar upload no site do joomla.org
abraçooo
alias ficou naipe o tutorial vou tentar daki um poko
depois posto o resultado
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar washington
0
 
 
Valeu lucas , mais infelimente assim que a banda toca,
tento simplifica o maximo + é dificil. Boa sorte!!!
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar rodrigo
0
 
 
Isso se chama preguiça
o cod ta todo pronto.. Não precisa facilitar mais nada.
parabens
vou utilizar com certeza...

abraço
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar Rodrigo
0
 
 
Bem, ele ainda precisa ser aperfeiçoado. Ele envia o conteudo mais ainda da problemas o link sai incompleto

e.x: http://www.seusite.com.br/index.php?option=com_content

E o Título do artigo também.

Como poderia arrumar isso, que ele enviasse apenas parte do titulo com o link no formato reduzido do proprio Twitter?
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar price essays
0
 
 
Thanks for this great article ! Keep up the good work !
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
I may use it. Looks good and comfortable for me!
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar pandora charms
0
 
 

Do you know which mobile phone companies allow tethering?
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
Really the advice are classic. I like them very much and obviously these are important to me
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
avatar NIKE AIR MAX
0
 
 
Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me. Rapidshare search
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
Cancelar
Nome *
Email (For verification & Replies)
URL
Code   
ChronoComments by Joomla Professional Solutions
Enviar Comentário
 
 
Copyright © 2010 Joomla RJ - tutorial joomla - joomla modulos - joomla extensions - joomla templates. Todos os direitos reservados.
Joomla! é um Software Livre com licença GNU/GPL v2.0.