Logo

Bludit CMS

Informações referente ao Bludit CMS em lingua portuguesa

GitHub deste site

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.12.0 "Handwashing" 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 (data ou posição), 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 sobrescritas nos plugins ou temas 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 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