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.

Download do CMS Axe - versão 0.93, de junho de 2013

Atenção: esta não é a versão atual. Visite: Axe 0.98a.2 - Download e instruções de uso.

O texto abaixo fica preservado para propósito de histórico.

A versão atual do gerenciador de conteúdo estático Axe é a 0.93, disponibilizada em 16.06.2013. Saiba mais: o que é o Axe.

Atenção: trata-se de versão Alfa, e seu público-alvo são os desenvolvedores interessados em testá-lo. Após um período de testes alfa, previsto para durar 3 semanas, o Axe deve entrar em versão beta, já voltada a testes por usuários, e incluindo o script de importação de blogs baseados no WordPress.

Atualmente a instalação exige algum conhecimento de administração de servidores, e intimidade com o terminal e a shell.

Lendo os artigos "Estrutura de diretórios e arquivos do Axe" e "O arquivo de configuração do Axe" você deverá estar apto a instalar e configurar.

O artigo "Comandos básicos do Axe" explica como operá-lo, o "Como nasce um post no Axe: o arquivo de entrada" explica como é criado um post, e em "As variáveis de exibição para usar no seu tema" você descobre como personalizar seu visual.

A documentação sobre o agendamento e priorização de posts e sobre a interface de plugins, que são recursos já existentes no sistema, deve surgir em conjunto com a versão beta, no início de julho.

Atenção: o Axe vem com 2 arquivos .htaccess que, em servidores web com configurações comuns e suporte ao mod_rewrite, impedirão que sites de busca indexem os arquivos de dados do Axe, sem impedir que eles indexem normalmente o conteúdo que você publicar. Se o seu servidor tiver necessidades especiais, configure-os de acordo.

Recomendação expressa e clara: instale esta versão do Axe em um diretório à parte no seu sistema, e não dependa dela para nada antes de testar se ela faz o que você deseja. O Axe foi criado para meu uso pessoal e será um prazer se você também tiver interesse em usá-lo, mas não ofereço nenhum suporte ou garantia.

Dica extra: a primeira linha do arquivo axe/axe.php é #!/usr/bin/php e aponta para a localização do interpretador do PHP nos servidores mais comuns. Se necessário (por exemplo, se você receber o erro "Bad interpreter"), edite-a para apontar para a localização correta do PHP 5.3 ou superior no seu sistema, que o provedor de hospedagem poderá lhe informar. No caso do Dreamhost, por exemplo, ela deve ficar assim: #!/usr/local/bin/php-5.3

O Axe é software livre e open source, sob a licença Apache 2.0.

Download desta versão alfa do Axe: axe-2013-06-16-2353-269348.tar.gz.

Não há suporte, nem serviços. Para relatar problemas, enviar a solução deles ou buscar recorrer à ajuda dos demais usuários, inscreva-se na lista axe-users.

O que é o Axe

This is my rifle. There are many like it, but this one is mine.
(Verso inicial do Rifleman’s Creed)

O Axe, que publicou a página que você está lendo, é um sistema gerenciador de conteúdo estático especializado na geração de blogs, sem usar banco de dados e sem precisar rodar o PHP na hora de servir uma página aos usuários.

As atividades de administração do Axe ocorrem via linha de comando no Terminal, portanto ele exige que você tenha acesso shell (SSH ou similar) ao seu servidor de hospedagem e saiba usá-lo. Ele também exige que o PHP esteja disponível na linha de comando, embora dispense a ativação do mod_php no servidor web.

Reinventar a roda pode não ser uma solução eficiente (às vezes nem eficaz), mas é divertido, estimula o aprendizado e, afinal de contas, você pode terminar o processo com uma roda exatamente do jeito que desejava, feita por você.

O Axe é a minha mais recente reinvenção de roda, porque é um sistema de gerenciador de conteúdo de blogs baseado em arquivos estáticos e sem precisar de bancos de dados, como já existem muitos por aí. O que ele faz de bom? Veja abaixo.

Por que o Axe?

O Axe nasceu para atender a uma demanda minha, e ter um pouco de aprendizado no processo.

O destino de quase todo gerenciador de conteúdo (CMS) que se populariza inicialmente pela sua simplicidade e leveza é se expandir nas direções desejadas pelo público adicional que recebe depois disso, e com isso chegar a um inchaço que pode acabar desagradando a quem aderiu pelos motivos iniciais.

Há 11 anos eu migrei todos os meus blogs, partindo de um sistema de conteúdo estático desenvolvido por mim mesmo e indo para o (na época) cada vez mais popular MovableType.

Dois anos depois, devido a mudanças geradas pela popularidade do MT que me desagradaram, migrei dele para o Drupal. Durei 4 anos com ele, até que sua complexidade crescente e upgrades (na época) complicados me levaram ao WordPress.

Em 2013 a história se repete: o WordPress, aquele gerenciador que eu achava leve e flexível inflou seus recursos, agora tem facilidades de inclusão de mídia, edição avançada, criação dos mais variados tipos de conteúdo, e agrada a cada vez mais usuários (com razão!), mas não é mais a pequena plataforma para a qual migrei em meados da década passada: com o crescimento em recursos, vêm os updates de segurança frequente, a manutenção mais complexa e a redução da eficácia de personalizações sem recorrer a plugins e outros arquivos externos adicionais, que também precisam ser mantidos e atualizados. Que valem muito a pena para quem precisa e gosta do resultado, é claro – e eles são bem mais numerosos do que os insatisfeitos como eu.

Não há falta de outros gerenciadores de conteúdo estático no mercado, e vários potencialmente me atenderiam, mas optei por criar o meu, Do Meu Jeito(tm). Reinventando a roda, aprendi e exercitei vários conceitos e técnicas, e aos poucos o sistema agregou características suficientes para permitir pensar em migrar um blog "a sério" para ele.

Foi assim que surgiu o Axe, que no momento está em estágio alfa voltado a desenvolvedores interessados, após um mês de testes internos. No momento ele já está mantendo em operação os meus 3 blogs: BR-Linux, BR-Mac e Efetividade.

O que o Axe faz

No momento o Axe é um sistema em PHP que, a partir de arquivos contendo apenas o título e o corpo do post, em formato texto ou HTML (com hooks já prontos mas ainda não documentados para inclusão de filtros adicionais, como MarkDown, textile ou txt2tags, para os interessados), gera toda a estrutura típica de um blog: índices, feed, tags, sitemap, etc.


Acima você vê um arquivo de entrada do Axe. Note que ele é composto de um título, uma URL que será o ícone do post, e a partir daí vem o conteúdo textual do post, podendo incluir tags HTML à vontade, se desejado (mas não precisa). Alguns campos a mais poderiam estar presentes, cada um em uma linha, incluindo tags de classificação (temas, categorias) e outros, mas os obrigatórios são os do exemplo.

Tanto o arquivo de entrada quanto o arquivo gerado pelo Axe e que será exibido ao leitor do blog são puramente declarativos, e aqui temos a diferença essencial em relação a gerenciadores dinâmicos (como o Drupal ou o WordPress), que permitem que a página processada no momento de exibir ao leitor seja imperativa, e assim contenha condições, loops, etc.

As definições de tema ou layout, que no caso do Axe são usadas apenas no momento da inclusão (ou alteração) de cada novo artigo, também são declarativas.

Já o fluxo de publicação operado pelos comandos básicos do Axe é o usual, passando pelos estágios de draft, preview e post (e eventualmente update). Os posts gerados pelo sistema são em puro HTML5, sem nada de PHP. O sistema gerador é em PHP, e dispensa bancos de dados: entra texto, sai texto.


O layout/tema usado como default para os arquivos gerados pelas versões pré-alfa e alfa ainda está sendo refinado, mas já nasceu responsivo, adaptando-se automatica e transparentemente às larguras de telas de smartphones, tablets e desktops.

O funcionamento baseado em arquivos estáticos impede a inclusão no Axe de um sistema de comentários interno, mas a existência de plugins como o Disqus, IntenseDebate e Facebook Comments ameniza bastante essa falta. Não planejo oferecer outra solução para esta situação.

O mais interessante: retirando a documentação, o arquivo de configuração do Axe (acima) tem apenas 33 linhas (onde são definidos os diretórios do blog, o nome do autor, a URL, o fuso horário, quantos posts devem sair na capa e no feed, etc.), e nas minhas instalações de teste foi mesmo possível instalar e migrar entre máquinas editando apenas este arquivo (exceto quando o interpretador PHP não estava onde o script esperava encontrá-lo...)

Basicamente ele exige um editor de texto, proficiência no Terminal (não sei se algum dia vou desenvolver uma interface web para operá-lo) e que haja o PHP 5 disponível na shell do ambiente onde forem realizadas as conversões.

FAQ

Por que esse nome estranho?
R. Axe significa machado, que me parece uma metáfora interessante para a abordagem do Axe, comparado à bancada de múltiplas serras circulares, fita e tico-tico de outras ferramentas por aí.

O Axe está disponível para download?
R. Sim.

O Axe é open source?
R. Sim, sob a licença Apache 2.0.

O Axe é software livre?
R. Sim, sob a licença Apache 2.0.

Fazer um novo CMS textual não é reinventar a roda?
R. Sim

Você chegou a testar a ferramenta Tal?
R. Provavelmente não, o que não quer dizer que ela não me atenderia, ou não lhe atenderia.

Por que ele não tem o recurso Tal?
R. Provavelmente eu não preciso dele, ou ele ainda consta na minha lista de pendências. Como o Axe é open source, os interessados poderão inclui-lo, se existirem e desejarem.

Por que eu deveria usar o Axe, e não outra ferramenta?
R. Provavelmente você deveria usar a ferramenta de sua preferência.

Essas perguntas não parecem o FAQ do Marco Arment?
R. Sim, boa parte delas vieram de lá, mas as respostas nem sempre coincidem.