Vérifier si une section est vide dans une vue Laravel Blade

Publié le : 16 mars 20161684 Vues
Vérifier si une section est vide dans une vue Laravel Blade

Si vous avez besoin d'afficher une portion de HTML dans votre vue Blade, seulement si une section n'est pas vide, voici une petite astuce.

Par exemple, vous souhaitez garder la structure de la "sidebar" de votre site dans votre vue principale "master.blade.php" pour ne pas avoir à répéter à chaque fois les tags HTML dans le vues qui l'étende. Un format simple pourrait être :

<div id="sidebar">
    <div class="wrapper">
        @yield('sidebar')
    </div>
</div>
<div id="main">...</div>

Le soucis est donc que dans votre CSS vous avez stylisé la "sidebar" et si elle ne contient rien, elle prend toujours de la place dans le visuel. Le solution pour ne pas l'afficher quand la section est vide est d'utiliser la variable "$__env" disponible dans les vues Blades et qui représente le compilateur "Illuminate\View\Factory". Elle donne accès à des méthodes de lecture du contenu des sections :

@if (trim($__env->yieldContent('sidebar')))
    <div id="sidebar">
        <div class="wrapper">
            @yield('sidebar')
        </div>
    </div>
@endif
<div id="main">...</div>

Ca marche, cependant ce n'est pas une écriture très agréable donc vous pouvez étendre Blade pour ajouter une directive qui fera ce test. Ceci est à ajouter dans la méthode "boot()" de votre fichier "app/Providers/AppServiceProvider.php" :

public function boot()
{
    Blade::directive('ifSectionNotEmpty', function ($section) {
        return "<?php if (trim(\$__env->yieldContent({$section}))): ?>";
    });
}

Pour une utilisation des plus simple :

@ifSectionNotEmpty('sidebar')
    <div id="sidebar">
        <div class="wrapper">
            @yield('sidebar')
        </div>
    </div>
@endif
<div id="main">...</div>

Et voila ça fonctionne !

Tags de l'article

Créée en 2009 et basée à Montpellier, l’agence WebLogin, est résolument tournée vers les Logiciels Libres.
L'agence est spécialisée dans la création de sites Internet et d'applications web, le webdesign, le référencement et la création d'identité visuelle originale. Nous vous proposons nos services pour développer votre présence et votre image sur Internet. Restons en contact :