Ir para o conteúdo principal

Nova Página

Introdução

Esta feature foi desenvolvida para adicionar um sistema de ordenação aos módulos do painel.
Ela permite tanto ordenações simples, entre registros do mesmo módulo, quanto ordenações complexas, envolvendo relações entre diferentes níveis ou modelos.

Por exemplo, é possível ordenar produtos dentro de uma seção (seção → produto), onde o sistema primeiro filtra os registros pela seção selecionada e, em seguida, aplica a ordenação nos produtos.
Também há suporte para ordenação recursiva dentro da própria model, permitindo cenários em que uma model possui um relacionamento com ela mesma (como um item pai e seus filhos), resultando em uma estrutura de ordenação potencialmente infinita

 

Configuração no controller

Para habilitar o sistema de ordenação em um módulo, é necessário implementar no controller uma função pública chamada orderConfig()
Essa função é responsável por retornar duas arrays principais que controlam todo o comportamento da ordenação: $generalConfig e $configLevels.

 

$generalConfig

A array $generalConfig contém configurações gerais da ordenação.
Atualmente, possui apenas uma propriedade possível:

$generalConfig = ['selfGroupedRecords' => false];
Propriedade Tipo Descrição
 selfGroupedRecords bool Define se a ordenação será recursiva dentro do mesmo módulo (por exemplo, quando um registro pode ter outro como “pai”).

 

$configLevels

A array $configLevels é onde é definida toda a lógica de ordenação.
Cada item dentro dela representa um nível de ordenação — ou seja:

  • Se for uma ordenação simples (sem níveis adicionais ou recursivos), haverá apenas um nível.

  • Se for uma ordenação hierárquica (por exemplo, seção → produto), haverá um nível para cada relação.

💡 Observações:

  • ordem dos itens na array define a hierarquia dos níveis.
    O primeiro item representa o primeiro nível da ordenação, o segundo item o segundo nível, e assim por diante.
  • A chave de cada nível deve ser um identificador em camelCase, de preferência o nome do módulo.

Cada nível da configuração deve conter as seguintes propriedades:

 $configLevels = [

            'levelOne' => [
                'label' => 'Nivel 1',
                'model' => SubmodulesTest::class,
                'sortable' => true,
                'labelBtnNextLevel' => 'Ordernar itens do nível 1',
                'breadcrumbColumnName' => 'name',
                'order' => ['column' => 'order', 'type' => 'ASC'],
                'AdditionalQuery' => function ($q) { $q->where('id', 1); },
                'columnsToList' => [
                    [
                        'name' => 'active',
                        'label' => 'Status'
                    ],
                    [
                        'name' => 'id',
                        'label' => '#'
                    ],
                    [
                        'name' => 'name',
                        'label' => 'Título'
                    ],
                ],
            ],
            'levelTwo' => [
                'label' => 'Nivel 2',
                'model' => NivelDoi::class,
                'sortable' => true,
                'order' => ['column' => 'order', 'type' => 'ASC'],
                'breadcrumbColumnName' => 'name',
                'columnsToList' => [
                    [
                        'name' => 'active',
                        'label' => 'Status'
                    ],
                    [
                        'name' => 'id',
                        'label' => '#'
                    ],
                    [
                        'name' => 'name',
                        'label' => 'Título'
                    ],
                ],
            ],
            // Adicione mais níveis aqui, se necessário
        ];
Propriedade Tipo Descrição
label string Nome descritivo do nível.
model Model Instância da model correspondente ao nível.
sortable bool Define se o nível atual pode ser ordenado (true / false).
labelBtnNextLevel

string

(opcional)

Texto exibido no botão que permite avançar para o próximo nível.
breadcrumbColumnName string Coluna usada para exibir o nome no breadcrumb.
order array Define a ordenação padrão da listagem (['column' => 'id', 'type' => 'asc']).
columnToList array Define as colunas exibidas na listagem de ordenação. Cada item deve conter name (coluna no banco) e label (rótulo exibido no frontend).
additionalQuery

closure

(opcional)

Permite aplicar filtros adicionais na query de listagem.
public function orderConfig()
    {
        $generalConfig = ['selfGroupedRecords' => false];

        $configLevels = [

            'author' => [
                'label' => 'Autores',
                'model' => Author::class,
                'sortable' => true,
                'order' => ['column' => 'order', 'type' => 'ASC'],
                'breadcrumbColumnName' => 'title',
                'columnsToList' => [
                    [
                        'name' => 'active',
                        'label' => 'Status'
                    ],
                    [
                        'name' => 'id',
                        'label' => '#'
                    ],
                    [
                        'name' => 'name',
                        'label' => 'Título'
                    ],
                ],
            ],
            // Adicione mais níveis aqui, se necessário
        ];

        return ['generalConfig' => $generalConfig, 'configLevels' => $configLevels];
    }