Implementação de um gerenciador de conteúdo

CMS (content management system ou sistema de gerenciamento de conteúdo) é um aplicativo que permite a publicação, edição e manutenção de conteúdo, através de uma interface administrativa centralizada. No caso de páginas e portais eletrônicos, o aplicativo – escrito em ASP, PHP ou qualquer outra linguagem server-side – deve ser instalado em um servidor com suporte à linguagem em que foi escrito o aplicativo.

Especificamente no caso desta pesquisa, um sistema desse tipo torna mais simples o trabalho de registro de ideias e atividades durante os períodos mais tumultuados de trabalho ao longo do semestre letivo, ainda que sua implementação tenha consumido um tempo considerável no período vago das férias acadêmicas.

A instalação e customização do sistema foi relativamente simples, mas o processo de seleção envolveu aprender sobre o funcionamento de cada CMS e sobre seus temas e extensões disponíveis; além de diagramá-lo, editando todos os elementos do tema numa folha de estilo. À seguir descrevo cada elemento desse processo:

1. Processo de seleção

As únicas exigências iniciais a orientarem a seleção foram: 1. o sistema escolhido deveria poder ser instalado em um servidor próprio (alguns sistemas oferecem o CMS só como parte de um serviço hospedado no servidor da empresa), exatamente para que pudesse ser customizado no nível do código, se necessário. 2. o sistema deveria ser de código aberto e gratuito. 3. O sistema deveria ser simples de customizar, para que pudesse ser moldado na estrutura vista nesta página – estradas de dados datadas em ordem crescente e em uma só página; e um cabeçalho com um índice de títulos que dão acesso às respectivas entradas quando clicados. Os sistemas avaliados no processo:

CMS_wordpressO sistema da WordPress – que oferece tanto o sistema quanto o serviço e é um CMS com ênfase em blogs – apareceu em primeiro lugar nas buscas, junto com os igualmente famosos Joomla! e Drupal – com capacidade para criar e gerir portais inteiros. Depois de uma breve avaliação inicial os três aparentaram ser mais complexos do que o necessário, o dificultaria a tarefa de customizá-los já que supostamente eu teria que compreender um grande volume de código PHP/SQL, incluindo interações as complexas entre as muitas partes.

CMS_snewsA seguir encontrei o sistema de publicação de notícias SNews que, em si, é simples e elegante. Tem poucos arquivos (2, salvo engano) e é fácil de instalar. No entanto,  após perder algum tempo investigando os arquivos do sistema descobri que customizá-lo seria uma tarefa custosa já que o código, empilhado nos poucos arquivos existentes, não é muito autoexplicativo e as dependências entre as funções não ficam claras como deveriam em um código bem escrito e comentado. Quando tentei customizá-lo de acordo com minha compreensão, erros completamente imprevisíveis surgiam na visualização da página. Piorando a situação, a documentação oficial é escassa e a comunidade de suporte (fórum, comentários em blogs de terceiros, etc) não é desenvolvida e o sistema não é atualizado desde 2011.

CMS_yiiCom a preocupação da customização em mente e sem achar substitutos viáveis para o SNews, descobri os frameworks de desenvolvimento rápido de aplicativos para web em PHP. Descobri que o Yii e o CodeIgniter eram indicados para usuários com conhecimento médio e achei que esta combinação de flexibilidade e relativa simplicidade pudesse resolver a questão da customização. Imaginei que houvessem bibliotecas extras, escritas por usuários, que implementassem funcionalidades extras sem que muitas linhas de código tivesse que ser escritas.CMS_codeigniter
Depois de investir um bom tempo tentando instalá-los e de escrever (na verdade copiar) os primeiros programas simples sugeridos como exemplos na documentação, descobri que não haviam bibliotecas escritas por usuários e que eu teria que investir muito tempo inventando funcionalidades necessárias a partir do zero. Conclui que meu conhecimento sobre PHP e MYSQL está abaixo de do que é considerado médio e desisti dos tais frameworks também.

2. Escolha

Depois da trajetória tortuosa de aprendizado e eliminação de opções, voltei ao início da minha busca e tentei uma instalação do sistema WordPress. O resultado impressionou bastante. Apesar de ser um sistema altamente complexo, é extremamente bem escrito, e tem todas as funcionalidades bem compartimentadas. Tem uma documentação online farta, uma comunidade ativa e vasta, muitas extensões escritas por usuários e adicionam funcionalidades importantes com extrema facilidade.
Meu tempo pôde ser bem gasto apenas com as customizações necessárias: no tema – ou seja, na estrutura PHP das páginas (principal e a que mostra imagens individuais) e na folha de estilo – nas extensões – que precisaram ser escolhidas, testadas e também precisaram de algumas modificações. Mesmo assim, a abundância de fontes de informação e exemplos foram grandes facilitadores da tarefa.

wordpress_estrutura_phpNa imagem à esquerda detalho o funcionamento da página principal modificada (o original pode ser visto na página do desenvolvedor). A página principal organiza a ordem de execução dos arquivos PHP, criando a estrutura básica da página: cabeçalho, corpo e rodapé.
O cabeçalho é carregado pelo arquivo header.php, que visualmente é responsável apenas por carregar o título da página, lendo-o do banco de dados e desenhando-o no navegador. Mas estruturalmente é responsável por outros passos estruturais importantes, como criar o cabeçalho HTML <head> e abrir a tag <body>, além de carregar a folha de estilo e parte dos scripts necessários para o funcionamento da página.
O arquivo loop.php é responsável por ler do banco de dados o título, o conteúdo e a data de publicação de cada uma das entradas e desenhá-las numa ordem pré-determinada (que pode ser alterada, como discutirei adiante.). No caso desta página, acrescentei ainda um loop menor no mesmo arquivo, que é executado antes do principal e serve para criar a tabela índice, a partir dos títulos e datas de publicações das entradas.
Por último, footer.php exibe um texto com créditos e licenças do próprio CMS e dos scripts e extensões de terceiros usados. Também é responsável por fechar a tag <body> e por carregar os scripts de fim de página.

wordpress_admin_interfaceAlém da página visível, gerada para a interação do conteúdo com o usuário, o sistema conta com uma interface administrativa com muitos recursos (imagem à direita), onde um administrador pode expandir gerir e criar conteúdos intuitivamente, enriquecido-os com textos, imagens, galerias de imagens, vídeos e aplicativos em flash.

3. Aplicação em outras áreas do projeto?

O resultado do investimento foi bastante satisfatório, com uma redução drástica no tempo necessário para atualização do conteúdo. Com a experiência adquirida, é possível adequar a solução à outra área do site cuja atualização é problemática: os registros de desenvolvimento dos dispositivos. Atualmente, cada uma das sub páginas – exibidas quando um qualquer um dos links da página principal são acessados – ou precisa ser montada manualmente, com diagramação via HTML, no caso de serem poucas imagens; ou é uma cópia de um sistema PHP open source de exibição de fotos – que é eficiente e simples se a intenção for montar uma galeria, mas começa a ficar complexo, se você precisar mudar o título da página ou acrescentar informações em cada uma das imagens ou mesmo outros tipos de mídias, como vídeos por exemplo.

This entry was posted in Uncategorized. Bookmark the permalink.