Site

Layouts

v4

O layout é a casca da página (menu, CSS, rodapé). O conteúdo da view entra em$content. A pasta no tema é _layouts/.

💡Underline = peça do tema

Pastas com _ no início são estrutura do tema, não páginas:_layouts (casca) e _components (pedaços reutilizáveis).


No handler

protected string $layout = '_layouts.app';

return $this->view('user.info', $data)->title('Minha Conta');

_layouts.app vira themes/{tema}/_layouts/app.mucrm.php. Se o arquivo antigo layouts/ ainda existir, o engine também tenta esse caminho.


Layout mínimo

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title><?= title() ?></title>
    <meta name="description" content="<?= description() ?>">
    <link rel="stylesheet" href="<?= e(theme_src('css/style.css')) ?>">
    <?= stack_styles() ?>
</head>
<body>
    <?= view('_components.navigation') ?>

    <main>
        <?= $content ?? '' ?>
    </main>

    <?= stack_scripts() ?>
</body>
</html>

title() e description() já vêm escapados. Defina no handler com ->title('Título', 'Descrição', $imagemOg).


CSS e JS extras

O layout imprime as pilhas. A view da página empilha o que for específico dela.

HelperOndeFunção
stack_styles()Layout (<head>)Imprime o CSS empilhado
stack_scripts()Layout (fim do body)Imprime o JS empilhado
push_style / push_scriptView da páginaAdiciona HTML na pilha
plug_style / plug_scriptView do móduloCSS/JS de app/modules/{mod}/views/assets/
<?php
push_style('<link rel="stylesheet" href="' . e(theme_src('css/pagina.css')) . '">');
push_script('<script src="' . e(src('js/pagina.js')) . '"></script>');

plug_style('shop', 'css/shop.css');
plug_script('shop', 'js/shop.js', ['defer' => 'defer']);
?>

Layouts do projeto

AliasArquivo
_layouts.appthemes/default/_layouts/app.mucrm.php
panels.admin._layouts.appthemes/panels/admin/_layouts/app.mucrm.php
panels.admin._layouts.auththemes/panels/admin/_layouts/auth.mucrm.php (login)