Temas

Introdução

Um tema permite que você personalize totalmente a aparência de um site usando o Azuriom.

Para instalar um tema, basta colocá-lo na pasta resources/themes/ na root do seu site.

Quando o Azuriom é instalado localmente para o desenvolvimento do tema, é altamente recomendável habilitar a depuração para simplificar o desenvolvimento. Isso pode ser feito simplesmente editando essas 2 linhas no arquivo .env:

APP_ENV=local
APP_DEBUG=true

Criando um tema

Para criar um tema rapidamente você pode usar o seguinte comando que irá gerar automaticamente o diretório do tema e o arquivo theme.json:

php artisan theme:create <theme name>
Para criar temas com uma configuração mais avançada com webpack para compilar arquivos SASS e otimizar os arquivos JavaScript, você pode usar este boilerplate não oficial (você também precisa instalar Node.js com NPM)

Estrutura

themes/ <-- Pasta contendo todos os temas instalados
| example/ <-- ID do seu tema
| | theme.json <-- O arquivo principal do seu tema contendo as várias informações
| |  assets/  <-- A pasta que contém os ativos do seu tema (css, js, images, svg, etc)
| | views/ <-- A pasta que contém as visualizações do seu tema.
| | config/
| | | config.blade.php
| | | rules.php
| | config.json

O arquivo theme.json

Todos os temas precisam ter um arquivo theme.json em sua root, que é o único elemento essencial para um tema, e fica assim:

{
    "id": "example",
    "name": "Example",
    "version": "1.0.0",
    "description": "A great theme.",
    "url": "https://azuriom.com",
    "authors": [
        "Azuriom"
    ],
    "azuriom_api": "1.0.0"
}

ID do Tema

Cada tema deve ter um id, que deve ser único e conter apenas números, letras minúsculas e hífens. Recomenda-se usar o nome como base para a criação do id, por exemplo, se o nome for Hello World, o id pode ser hello-world. Além disso, o diretório do tema deve ter o mesmo nome de seu id.

Visualizações

As visualizações são o coração de um tema, são os arquivos de conteúdo HTML de um tema para as diferentes partes do site.

Azuriom usando Laravel, as visualizações podem ser feitas usando o template Blade. Se você não domina o Blade, é altamente recomendável ler sua documentação, especialmente porque é bastante curto.

É altamente recomendável NÃO usar a sintaxe do PHP. Quando você trabalha com o Blade, porque o Blade não traz o tradicional sem vantagens e apenas desvantagens.

Do lado do CSS, é recomendável usar o framework padrão do cms que é Bootstrap 5, isso facilitará a realização de um tema e será compatível com os novos plugins. Então você não precisa fazer atualizações constantes. Mas se preferir pode usar outro framework CSS.

Em Javascript, a única dependência necessária é Axios.

Se uma visualização não estiver presente no tema, mas estiver no CMS ou em um plugin, ela será usada automaticamente.

Layout

O layout é a estrutura de todas as páginas de um tema. Ele contém de fato as metas, assets de um tema, cabeçalho, rodapé etc…

Para exibir o conteúdo da página atual, você pode usar @yield('content'), e para exibir o título da página atual, você pode usar @yield('title').

Você também pode integrar diferentes elementos com @include('<nome da visão>'), por exemplo @include('element.navbar') para incluir a barra de navegação.

Para definir o layout da página, a visualização deve estender a visualização que contém o layout, você pode usar o layout padrão com @extends('layouts.app'), ou criar seu próprio layout e estendê-lo.

Plugin views

Para alterar as visualizações de um plugin, basta criar um diretório plugins na pasta views do tema e criar uma pasta para cada plugin (usando o id do plugin e não o nome do plugin), então adicione as views do plugin.

Por exemplo, para o plugin vote, isso dará views/plugins/vote/index.blade.php.

Methods

Assets

Para ter o link para um asset em um tema, você pode usar a função theme_asset:

<link rel="stylesheet" href="{{ theme_asset('css/style.css') }}">

Usuário atual

O usuário atual pode ser recuperado usando a função auth()->user(). Para mais detalhes sobre autenticação, você pode consultar a documentação do Laravel.

Funções

Você pode recuperar um certo número de parâmetros do site através das funções dedicadas:

Função Descrição
site_name() Recupera o nome do site
site_logo() Permite que você tenha o link do logotipo do site
favicon() Permite que você tenha o link do favicon
format_date() Exibe uma data formatada com o idioma atual. Esta função usa uma instância de Carbon\Carbon como parâmetro
money_name() Retorna o nome da moeda do site
format_money() Retorna um valor formatado com a moeda do site

Mostrar os jogadores conectados ao servidor

Para exibir os jogadores conectados, basta verificar se a variável $server não é nula, e se o servidor está online, e se estiver, use $server->getOnlinePlayers() para recuperar a contagem de jogadores online.

@if($server && $server->isOnline())
    {{ trans_choice('messages.server.online', $server->getOnlinePlayers()) }}
@else
    {{ trans('messages.server.offline') }}
@endif

Traduções

Um tema pode, se precisar, carregar traduções.

Para isso, basta criar um arquivo messages.php no diretório lang/<idioma> (ex: lang/en). De um tema, você pode exibir uma tradução via trans: {{ trans('theme::messages.hello') }} ou via diretiva @lang: @lang('theme::messages. olá'). Você também pode usar trans_choice para uma tradução com números, e trans_bool para traduzir um booleano (retornará em inglês Yes)./No.

Para mais detalhes sobre traduções, você pode consultar a documentação do Laravel.

Configuração

Você pode adicionar uma configuração em um tema, para isso basta criar na raiz de um tema:

  • Uma visualização config/config.blade.php contendo o formulário para a configuração.
  • Um arquivo config/rules.php contendo as diferentes regras de validação para a configuração de um tema.
  • Um arquivo config.json onde será armazenada a configuração do tema, contendo os valores padrão.
Exemplo

config.blade.php

<form action="{{ route('admin.themes.update', $theme) }}" method="POST">
    @csrf

    <div class="form-group">
        <label for="discordInput">{{ trans('theme::carbon.config.discord') }}</label>
        <input type="text" class="form-control @error('discord-id') is-invalid @enderror" id="discordInput" name="discord-id" required value="{{ old('discord-id', config('theme.discord-id')) }}">

        @error('discord-id')
        <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
        @enderror
    </div>

    <button type="submit" class="btn btn-primary">
        <i class="bi bi-save"></i> {{ trans('messages.actions.save') }}
    </button>
</form>

config.json

{
    "discord-id": "625774284823986183."
}