Zoia: CMS reativo leve para desenvolvimento rápido de sites

Neste artigo, gostaria de falar sobre o sistema de gerenciamento de conteúdo Zoia que estou desenvolvendo, escrito em Javascript. Este é o meu projeto paralelo, não relacionado ao trabalho principal, que eu desenho e desenvolvo no meu tempo livre. Há uma opinião de que todo desenvolvedor web deve escrever seu próprio CMS, mais cedo ou mais tarde, e alguém nem sequer terá um :-)

TL; DR: demo.zoiajs.org , painel de administração (login: admin, senha: senha), Github , licença MIT

Um fato consumado: o Javascript está agora em toda parte, pode ser usado não apenas no lado do cliente, mas também no lado do servidor, bem como em microcontroladores, carros, smartphones - em uma palavra, em quase todos os campos. Mas a área "tradicional" para JS era e continua sendo a web, onde essa linguagem de programação cresceu em todo um zoológico inteiro de bibliotecas, padrões, utilitários e estruturas. Entender tudo isso é bastante difícil e, às vezes, tudo o que é necessário é criar um site bastante simples que possa ser gerenciado rapidamente, se necessário: adicionar e editar conteúdo, menus de navegação etc.

Para essas tarefas, existem muitos CMS escritos em PHP (alguns dos quais eu usei no meu trabalho, como o GetSimple CMS ), mas não vi um único CMS reativo escrito inteiramente em JS e usando o Mongo como banco de dados (por favor, escreva para comentários, se houver, mas eu perdi). Depois de conhecer React e Marko, não quero mais voltar ao mundo cruel do jQuery e, assim, Zoia nasceu. A propósito, esta é a segunda versão, a primeira funcionou da maneira antiga (agora não é suportada e não é atualizada).

No estágio atual de desenvolvimento, a capacidade de implementar o seguinte:

  • Zoia está sendo desenvolvido em Javascript - no lado do servidor e no cliente
  • Possui uma arquitetura modular, é possível expandir a funcionalidade adicionando novos módulos
  • Arquitetura distribuída: API no Fastify + Mongo , painel de administração no React + Redux , servidor web para espaço de usuário no Fastify + Marko - tudo isso pode ser instalado em vários servidores
  • Multilinguismo "pronto para uso", já existem inglês e russo, você pode adicionar qualquer número de idiomas - o Lingui é usado.
  • Um grande número de componentes auxiliares, bibliotecas e utilitários: para gerar formulários, tabelas dinâmicas (até agora apenas no painel de administração), autorização, etc.
  • Construa com o Webpack
  • Edição de conteúdo: você pode usar vários modelos de design (por exemplo, para páginas diferentes); Há uma opção para escolher uma maneira de gerenciar o conteúdo: o editor WYSIWYG (usando o CKEditor 5 ) ou o editor de código HTML ( ACE Editor, respectivamente); ao salvar, o conteúdo é otimizado (redução do código e uso da tipografia) - ao definir as opções apropriadas; é possível estruturar a árvore de categorias em que as páginas estão localizadas e usar “migalhas de pão”; existe um "carregador" de imagens (implementação para o CKEditor e o ACE)
  • Gerenciamento de usuários: adicionando qualquer número de usuários, a capacidade de editar seu perfil, definir uma senha e status
  • Gerenciamento de navegação: gerenciamento conveniente da árvore de navegação, a capacidade de adicionar um "submenu"
  • Scripts prontos para criar, preparar systemd, configurações NGINX, etc.

Um pouco sobre arquitetura. Como eu disse acima, o sistema consiste em uma API (que atende a consultas de banco de dados, processamento de dados), um painel de administração (funciona como SPA, usa roteamento do lado do cliente, desenvolvido usando React + Redux) e espaço do usuário (arquitetura isomórfica, desenvolvida usando Marko, a renderização é feita no lado do servidor com subsequente reidratação no cliente). O painel do administrador acessa a API diretamente do lado do cliente, o servidor da web do espaço do usuário acessa a API antes da renderização. A autorização é feita através do JWT.

Para um desenvolvimento conveniente dos módulos do painel de controle, foram criadas ferramentas que facilitam a criação de uma interface do usuário: um construtor de formulários para o React com um grande número de opções de campo possíveis (incluindo o download de arquivos e imagens com visualizações), uma tabela dinâmica com a capacidade de classificar colunas e editar campos em linha.

É assim que o modelo padrão se parece:



O painel do administrador é o seguinte:



O layout é adaptável; o UIkit é usado para espaço do usuário e painel de administração. Este é um ótimo framework CSS. que contém um grande número de componentes prontos para uso, é fácil de personalizar e suporta o Webpack pronto para uso.

Existem várias áreas do aplicativo CMS, mas a principal tarefa (como eu disse acima) que vejo é o desenvolvimento de uma solução leve para criar sites de média complexidade que usem os recursos do Javascript moderno e um grande número de ferramentas modernas de desenvolvimento e armazenamento.

O plano para um maior desenvolvimento em um futuro relativamente próximo é o seguinte:

  • É necessário escrever documentação sobre o desenvolvimento de módulos, bem como sobre os componentes prontos do painel de administração
  • Pense e escreva testes (agora eles não são de todo :)
  • Parafuso de registro / autorização / conta pessoal no lado do cliente + autorização através do social. rede (OAuth)
  • Desenvolva os módulos necessários com funcionalidade adicional (blog, catálogo de produtos, loja online etc.)

A versão demo com algumas restrições funcionais está localizada aqui: demo.zoiajs.org , o painel de administração também está disponível (login: admin, senha: senha). A cada hora, o banco de dados é redefinido para as configurações padrão, você precisará passar pela autorização novamente.

O código CMS está disponível no Github ; portanto, se desejar, você pode participar do desenvolvimento, relatar bugs etc. Ficarei feliz em contribuir ;-)

Source: https://habr.com/ru/post/pt473706/


All Articles