Como fazer um plugin para o Axe

Atenção: esta seção da documentação é reservada aos programadores interessados em criar expansões à funcionalidade do Axe por meio de plugins. Sua leitura não é necessária para outros usuários.

A interface de plugins do Axe ainda não chegou à sua especificação definitiva, portanto considere esta documentação como preliminar e sujeita a mudanças. Ela será ampliada e melhor detalhada quando a interface de plugins amadurecer, o que naturalmente ocorrerá dependendo do uso.

Os plugins para o Axe são armazenados no diretório axe/plugins e são chamados pelo Axe em vários momentos do processamento dos posts, índices e feeds.

De modo geral as interfaces já implementadas permitem que os seus plugins atuem como filtros de texto, recebendo um trecho de conteúdo ou do template que será usado para gerar uma página (por exemplo, o tema do rodapé de um índice de tags), aplicando a ele as modificações que desejar, e retornando ao Axe o texto original, com ou sem modificações.

No momento o Axe suporta plugins de templates nos seguintes contextos e subcontextos:

  • feed: header, item e footer
  • index: rebuild (chamado ao final de qualquer rebuild), header, post e footer
  • post: header, body, coverpreview e footer
  • blogparms: na inicialização do Axe, passa como parâmetro um array modificável com todos os parâmetros colhidos no axe_config.php.
  • postvars: após carregar um post para processamento, passa como parâmetro um array modificável com todos seus dados e metadados.

O plugin deve definir, para cada contexto em que deseja operar, uma função cujo nome é formado pela regra nomedoplugin_nomedocontexto. Exemplo: para um plugin chamado patrocinador.php, a função na qual ele deseja interferir no contexto post precisa se chamar patrocinador_post().

No momento, essa e todas as demais funções de plugins precisam ser definidas com suporte a receber 5 parâmetros, mesmo que não usem a todos. O primeira deles sempre é o conteúdo a modificar (e sempre retornar, em versão modificada ou não), e os demais dependem do contexto – por exemplo, no contexto post, o segundo parâmetro indicará o subcontexto (ver lista acima), e o terceiro indica o número sequencial (e não o ID!) do post sendo processado.

Como a interface ainda não está madura, não vou documentar quais os elementos de chamada de cada contexto e de cada subcontexto, e por enquanto você precisará pesquisar no código-fonte, procurando as chamadas à função aplica_plugins, e sempre desprezando o primeiro parâmetro dela, que nunca é passado ao plugin. Mas saiba que eles ainda podem mudar, a implementação atual é apenas a título precário.

Esqueleto do plugin exemplo.php:


<?php
/*

TITULO: Exemplo de plugin para modificar rodapés de índices e de posts

© 2013 Augusto Campos http://augustocampos.net/ (1.06.2013)

Licensed under the Apache License, Version 2.0 (the "License"); 
you may not use this file except in compliance with the License. 
You may obtain a copy of the License at 
http://www.apache.org/licenses/LICENSE-2.0 

Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License.

*/


function exemplo_index($trecho,$template,$p2='',$p3='',$p4='') {
	if ($template=="footer") {
		// aplica modificações desejadas ao $trecho 
		// (que é template, e não conteúdo)
	}
	return $trecho;
}

function otherfeeds_post($trecho,$template,$c_items=0,$p3='',$p4='') {
	if (($template=="footer") && ($c_items < blogparm('NUMPOSTSCOVER'))) {
		// aplica modificações desejadas ao $trecho 
		// (que é template, e não conteúdo)		
	}
	return $trecho;
}

?>

Naturalmente, o plugin acima precisaria ser gravado como axe/plugins/exemplo.php.