Bludit CMS | Funcionamento
Introdução ao sistema
Nesta página será abortado o funcionamento do CMS.
Visão Geral
O Bludit é o novo CMS desenvolvido pelo Argentino Diego Najar sendo o sucessor do descontinuado NibbleBlog. Sua primeira versão estável v0.1 Wood foi lançada em Setembro de 2015 e o logotipo foi desenhado pelo Português Paulo Nunes. O primeiro push no GitHub foi em 8 de março de 2015, sendo então o marco do nascimento do projeto. Atualmente o Bludit está na versão Bludit v3.13.1 "Edi" e possui diversos recursos implementados como interface de administração amigável, editor com suporte a MarkDown, HTML (ou modo visual WYSIWYG), além de também ser aderente à Lei de Proteção de Dados. Com ele é possível criar tanto um site quanto um blog pessoal ou profissional.
O CMS foi projetado para armazenar as páginas do site no formato TXT e os arquivos de configuração no formato JSON ao invés de banco de dados, contribuindo assim para um projeto mais leve, seguro (pois poucos o exploraram) e de fácil manutenção.
O Bludit implementa o recurso de múltiplos idiomas, utilizando alguns arquivos de configurações padrões em formato JSON, o desenvolvedor pode personalizar seu template disponibilizando no idioma inglês e português, por exemplo.
Para integração com outros sistemas o CMS ainda implementa uma API ao qual o desenvolvedor pode requisitar e atualizar dados de páginas e tags.
Entendendo um pouco do funcionamento do sistema, pode ser desenvolvido temas e extensões personalizadas utilizando qualquer framework, uma vez que o Bludit requer que seja hospedado em um servidor com PHP e alguns módulos.
Primeiros Passos
Após logar no sistema, você deve configurar o site/blog. Ao término da leitura veja as telas do Bludit CMS para ficar mais claro.
Em Ajustes->Geral
- ->Geral
Preencha as informações básicas como título do site, slogan - ->Avançado
Altere o número de artigos que irá aparecer na página inicial, ordene o conteúdo por data (padrão específico para blog) ou posição (mais voltado para site), insira um email, sete páginas pré-definidas, altere URL da categoria e tag - ->SEO
Defina o padrão para os mecanismos de buscas (já otimizada) - -> Social Networks (Redes Sociais)
Altere as redes sociais do usuário logado (Twitter, Facebook, CodePen, Instagram, GitLab, GitHub, LinkedIn, Mastodon, Dribble e VK) - ->Imagens
Defina a altura, lagura e qualidade das miniaturas das imagens - ->Idioma
Altere o idioma, fuso horário, local e formato de data - ->Custom Fields (Campos Customizados)
Permite inserir configurações no tema ou plugin do site sem alterar o código - baseada no JSON veja mais detalhes - ->Logo
Permite inserir o logo do site
Em Ajustes
- ->Plugins (Extensões)
Ative, personalize e desative os plugins listados
Eles terão o funcionamento de acordo com a configuração de seu tema - ->Temas
Ative e desative temas - ->Sobre
Contém algumas informações sobre o Bludit como a versão, codename, uso do disco e um link Bludit Developers que contém detalhes de váriáveis do sistema
Em Administrar
- ->Conteúdo
É listado os artigos separados em 6 abas ao qual pode ser editada e deletada:
- Páginas: padrão quando cria um novo artigo
- Estático: página que normalmente é disponbilizada em menu no topo ou rodapé
com conteúdo padrão como Sobre, Localização, Contato etc.
- Sticky: quando quer destacar um ou mais artigos para serem mostrados primeiro
- Agendado: artigo para ser publicado em determinada data
- Rascunho: artigo não publicado, sendo editado / criado
- Autosave: conteúdo em edição é gravado nessa pasta sendo atualizado conforme
configurado em Ajustes->Geral->Avançado item autosave.
O padrão do nome é [Autosave] quando não possui nome, e quando tem é NomeDoArtigo[Autosave] - ->Categorias
Nessa parte é mostrado as categorias criadas (normalmente pelo usuário administrador ou com perfil de administrador), e o usuário tem a permissão de ver, criar e editar as categorias - ->Usuários
Ao clicar você verifica a lista de usuários criados, qual a função de cada um, se está habilitado, data de registro, email (opcional), nickname (apelido - opcional). Clicando em um usuário existente, há as seguintes abas:
- Perfil: nome do usuario, função (autor, editor, administrador), email, nickname, primeiro nome, sobrenome
- Imagem do Perfil: carregue uma imagem do perfil (não encontrado opção de exclusão)
- Security (Segurança): altere a senha, visualize o token de autenticação,
exclua o usuário (com ou sem conteúdo) e veja o status
- Social Network (Redes Sociais): define as mesmas redes mencionadas acima
Na adição de um novo usuário é definido um nome de usuário, senha, email e função sendo: Autor (pode escrever e editar conteúdo próprio), Editor (Pode escrever e editar o conteúdo dele e de outros) e o Administrador possui todas as permissões (incluindo alterar tema e plugins)
DEV - Informações para Desenvolvedores PHP
O Bludit quase não possui recursos externos, usa apenas JQuery, Bootstrap e para fontes a Line Awesome. Os temas e plugins podem ser criados com qualquer framework PHP.
O sistema não utiliza engines de templates como Twing, prefere o uso do PHP puro, deixando a cargo do desenvolvedor escolher a ferramenta que lhe convier.
Estrutura de diretório
Saiba como está estruturado o CMS
/bl-content/ <-- Base de dados e imagens enviadas
/bl-kernel/ <-- Coração do Bludit
/bl-languages/ <-- Contém os arquivos de idioma em formato JSON codificados em UTF8.
São arquivos a nível global do Bludit, isto é, traduzem o CMS.
Para o portugues do Brasil temos o pt_BR.json. Estudando as chaves,
você pode colocar também as traduções em seus plugins e temas.
/bl-plugins/ <-- Extensões
/bl-themes/ <-- Temas
Detalhes da pasta de conteúdo
/bl-content/
databases/ <-- Contém arquivos em PHP, porém contendo informações no formato JSON
plugins/ <-- Plugins (contém pastas com formato'NomeDoPlugin/db.php'
ao qual o dado do plugin é armazenado no arquivo
com a extensão PHP, porém dentro em formato JSON)
categories.php <-- JSON das categorias criadas com a lista de artigos a ela pertencentes
pages.php <-- Contém o arquivo JSON de metadados das páginas
security.php <-- Configuração de lista negra, proteção de força bruta dentre outros
site.php <-- Informações gerais do site definidas no Painel do Bludit em Ajustes->Geral
syslog.php <-- Contém informações em formato JSON dos eventos do CMS
tags.php <-- Tags criadas
users.php <-- Detalhes dos usuários criados
pages/ <-- Conteúdo de todas páginas
Basicamente apresenta o padrão nomeDoArtigo/index.txt
ao qual os dados são gravados no index.txt.
Caso tenha uma página filha terá o seguinte formato
nomeDoArtigoPai/nomePaginaFilha/index.txt
Arquivos salvos automaticamente sem nome terão o formato
autosave-231101474a25a99d4e4fe2bd8c536916 (isto é autosave-hash)
e com nome será nomeArtigo-autosave-XXXXXXXXX (onde 'X' é a hash)
about/index.txt
food/index.txt
thumbs/ <-- Miniaturas
pages/
profiles/
thumbnails/
tmp/ <-- Arquivos temporários
uploads/ <-- Arquivos enviados
pages/
profiles/ <-- Imagens dos perfis
thumbnails/ <-- Imagens Thumbnails
photo1.jpg
photo2.png
workspaces/ <-- Espaço de trabalho para os plugins (extensões)
Detalhes da pasta kernel
/bl-kernel/
js/ <-- Arquivos de Javascript e Libs, também encapsulados no PHP
variables.php <-- Variáveis globais impressas para serem utilizadas no JS
select2.full.min.js <-- Extensão JQuery para caixas de seleções [select2.org]
jstz.min.js <-- Biblioteca Javascript para timezone
jquery.sortable.min.js <-- Extensão JQuery para ordenar elementos numa lista ou
grid usando o mouse [jqueryui.com/sortable/]
jquery.min.js <-- Framework Javascript JQuery v3.4.1
jquery.datetimepicker.full.min.js <-- Extensão JQuery para seleção de hora e data
functions.js <-- Funções para limpeza do HTML e manupular cookie
bootstrap.bundle.min.js <-- Funções do Framework CSS Bootstrap v4.4.1
bludit-ajax.php <-- Classe JS bluditAjax encapsulada no PHP
img/ <-- Imagens: default, logo e ícone
helpers/
valid.class.php <-- Classe Valid que contém alguns métodos de validação
theme.class.php <-- Classe Theme para trabalhar com tema contendo título,
meta tags, slogan, descrição, linguagem e etc
text.class.php <-- Implementa diversos métodos para lidar com strings
tcp.class.php <-- Classe TCP que implementa 3 métodos: http, Download e getIP
session.class.php <-- Específica para trabalho com sessões
sanitize.class.php <-- Alguns métodos de remoção e conversão de caracteres
redirect.class.php <-- Implementa métodos de redirecionamento
paginator.class.php <-- Classe Paginator que possui métodos de paginação
log.class.php <-- Classe Log que seta informações de logs de erros
image.class.php <-- Classe para manipulação de imagens
filesystem.class.php <-- Disponibiliza métodos para manipulação de pastas e arquivos
email.class.php <-- Classe para envio de email
dom.class.php <-- Contém o método que retorna a url da primeira imagem da página
date.class.php <-- Trabalha data e hora
cookie.class.php <-- Implementa manipulação de cookies
alert.class.php <-- Utilizada para trabalho com alertas
css/ <-- Arquivos CSS dos plugins e frameworks do CMS
boot/ <-- Contém arquivos básicos e configurações do CMS
init.php <-- Define constantes e inclusão de arquivos
admin.php <-- Lógica para usuários logados e não logados
site.php <-- Carrega os plugins, inclui arquivos e define o tema
variables.php <-- Implementa as variáveis de ambiente
rules/ <-- Define as regras do CMS
99.themes.php <-- Carrega os arquivos de configuração do template e o idioma
99.security.php <-- Informação de segurança referente ao token
99.paginator.php <-- Seta as configurações iniciais de paginação
99.header.php <-- Define informações de cabeçalho do CMS
69.pages.php <-- Define as coleções globais $content, $staticContent ($staticPages)
sendo que cada uma implementa uma lista de objetos do tipo Page.
Também a variável $page tendo o valor de $content[0].
60.router.php <-- Implementa logica de redirecionamento de algumas seções
60.plugins.php <-- Define o array $plugins e inicializa os hooks (ganhos)
e implementa a função de criação de plugins
ajax/
upload-images.php <-- Carrega uma imagem para uma página particular
save-as-draft.php <-- Cria/edita uma página e salva como rascunho
profile-picture-upload.php <-- Carrega uma imagem para o perfil do usuário
logo-upload.php <-- Carrega o logotipo do site/blog
logo-remove.php <-- Remove o logotipo do site/blog
list-images.php <-- Retorna uma lista de imagens de uma página particular
get-published.php <-- Retorna a lista de páginas publicadas
buscadas pelo título do artigo
generate-slug.php <-- Gera um texto slug para uma URL
delete-image.php <-- Apaga a imagem de uma página particular
content-get-list.php <-- Busca por páginas que tenham no título o texto pesquisado
e retorna uma coleção de páginas
clippy.php <-- Retorna uma coleção de dados dependendo da busca
admin/ <-- Páginas de administração de Bludit
views/
users.php
user-password.php
themes.php
settings.php
plugins-position.php
plugins.php
new-user.php
new-content.php
new-category.php
login.php
edit-user.php
edit-content.php
edit-category.php
developers.php
dashboard.php
content.php
configure-plugin.php
categories.php
blocks.php
about.php
themes/ <-- Temas para o painel de administração
booty/
html/
sidebar.php
navbar.php
media.php
alert.php
css/
bludit.css
bludit.bootstrap.css
login.php
init.php
index.php
controllers/ <-- Define o fluxo de controle
users.php
user-password.php
uninstall-plugin.php
themes.php
settings.php
plugins-position.php
plugins.php
new-user.php
new-content.php
new-category.php
logout.php
login.php
install-theme.php
install-plugin.php
edit-user.php
edit-content.php
edit-category.php
developers.php
dashboard.php
content.php
configure-plugin.php
categories.php
api.php
about.php
abstract/ <-- Define classes importantes do sistema
plugin.class.php <-- Classe Plugin utilizada para extensões do sistema
dblist.class.php <-- Classe dbList herda a dbJSON para manipulação do 'Banco JSON'
dbjson.class.php <-- Classe dbJSON que implementa métodos como ler, salvar,
e efetuar o backup do JSON
users.class.php <-- Classe Users que herda a classe dbJSON utilizada para manipular
diversos usuários
user.class.php <-- Classe User para manipular um usuário
url.class.php <-- Classe Url que contém informações de http, página não encontrada e etc
tags.class.php <-- Classe Tags que herda a classe dbList para tratar diversas tags
tag.class.php <-- Classe Tag para trabalho com uma tag
syslog.class.php <-- Classe Syslog que herda dbJSON para manipulação de eventos do sistema
site.class.php <-- Classe Site que herda dbJSON e retorna diversas informações do site
security.class.php <-- Classe Security que herda dbJSON para tratar de segurança
parsedown.class.php <-- Classe externa Parsedown para manipulação do MarkDown [parsedown.org]
pagex.class.php <-- Classe Page que retorna diversas informações da página
pages.class.php <-- Classe Pages que herda dbJSON para manipular dados no banco JSON
login.class.php <-- Classe Login utilizada para tratar de sessões e cookies
language.class.php <-- Classe Language que herda dbJSON para tratar de idioma,
localização, data e hora
functions.php <-- Diversas funções internas para criar página, reindexar banco etc
category.class.php <-- Classe Category contendo informações de uma categoria
categories.class.php <-- Classe Categories que herda dbList para manipular várias categorias
As pastas bl-themes e bl-plugins serão detalhas em páginas separadas.
https://docs.bludit.com/en/developers/folder-structure
Hooks
O sistema disponibiliza os chamados ganchos, que são funções prestabelecidas ao qual são implementadas nos plugins e são invocados diretamente no tema.
No exemplo abaixo as funções serão automaticamente executadas nesses 3 locais de um template (tema) fictício: siteHead (dentro da tag head), siteBodyBegin (logo após a tag body) e siteBodyEnd (antes do término da tag body). Isso significa que todos plugins ativos que implementem o gancho será chamado naquele determinado local.
<!DOCTYPE html>
<html>
<head>
<title>Título da minha página</title>
<?php Theme::plugins('siteHead'); ?>
</head>
<body>
<?php Theme::plugins('siteBodyBegin'); ?>
<h1>Título</h1>
<p>Este é um parágrafo.</p>
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
Lembre-se que nem todo plugin ou tema conterá esses hooks (ganchos). Trata-se de um padrão do CMS que o desenvolvedor poderá ou não implementar em seu projeto.
No exemplo abaixo, você poderia colocar o código na lateral da página para chamar o siteSidebar. Ele retorna todos plugins ativados que tenham o método siteSidebar implementado e ordenados conforme URL https://EnderecoDoSite/admin/plugins-position (ou encontrado no painel de administração do Bludit em Plugins->Alterar as posições dos plugins).
<?php Theme::plugins('siteSidebar') ?>
O método pode ser chamado diretamente ao invés de usar os recursos do sistema, após o plugin instalado. Note que é necessário printar (echo) diferente da classe Theme que já imprime por padrão. Neste exemplo utilizamos o plugin de categorias. Os plugins ficam na pasta bl-plugins, e dentro da pasta com nome do plugin (categories nesse caso) há o arquivo plugin.php que você pode abrir e verificar o funcionamento.
<?php
$objCat=new pluginCategories();
echo $objCat->siteSidebar();
?>
Fluxo de carregamento dos arquivos dos Bludit
Quando o site é visitado
index.php
bl-kernel/boot/init.php
bl-kernel/boot/site.php
bl-kernel/boot/rules/60.plugins.php
bl-kernel/boot/rules/69.pages.php
bl-kernel/boot/rules/99.header.php
bl-kernel/boot/rules/99.paginator.php
bl-kernel/boot/rules/99.themes.php
bl-kernel/boot/rules/99.security.php
bl-themes/{THEME_NAME}/init.php
bl-themes/{THEME_NAME}/index.php
Quando o painel de Administração é carregado
index.php
bl-kernel/boot/init.php
bl-kernel/boot/admin.php
bl-kernel/boot/rules/60.plugins.php
bl-kernel/boot/rules/69.pages.php
bl-kernel/boot/rules/99.header.php
bl-kernel/boot/rules/99.paginator.php
bl-kernel/boot/rules/99.themes.php
bl-kernel/boot/rules/99.security.php
bl-kernel/admin/themes/default/init.php
bl-kernel/admin/controllers/{CONTROLLER}.php
bl-kernel/admin/themes/default/index.php
bl-kernel/admin/controllers/{VIEW}.php
Constantes e variáveis de ambiente
No CMS as opções de configurações do sistema podem ser localizadas painel de administração Ajustes->Sobre->Bludit Developers. Você verá extensões carregadas, a variável $_SERVER, propriedades de objetos dentre outros.
Outras informações
https://docs.bludit.com/en/content/content-basics
https://docs.bludit.com/en/developers/developers-basics
https://docs.bludit.com/en/developers/predefined-variables
https://github.com/bludit/bludit/blob/master/bl-kernel/boot/init.php
https://github.com/bludit/bludit/blob/master/bl-kernel/boot/variables.php
https://github.com/bludit/bludit/blob/master/bl-kernel/boot/rules/69.pages.php