Templates différents avec des éléments commun chargés par un seul contrôleur

a marqué ce sujet comme résolu.
Auteur du sujet

Bonsoir,

Je travail sur un projet depuis quelques mois et j’avance à pas de fourmi, mais j’avance. Or, en ce moment, je bloque, d’où ce sujet.

J’essaie de faire un mini-CMS avec Laravel. Ce projet se compose de plusieurs modules qui sont listés sur la page principale. Quand on clique sur un des modules, on accède à la page du module. Il faut savoir que les modules ont un type. En fait, la page des modules a un socle commun et quelques blocs différents en fonction du type.

Je passe donc par le contrôleur du module pour charger la vue. Le problème, c’est que je ne sais pas comment charger les différences en fonction du type du module. Pour que vous pussiez mieux visualiser ce que je veux faire, on peut par exemple dire qu’il y a une balise <aside> commune et une balise <main> variant en fonction du type.

Je ne suis pas sûr d’avoir été clair, donc n’hésitez pas à me poser des questions.

+0 -0

Je passe donc par le contrôleur du module pour charger la vue. Le problème, c’est que je ne sais pas comment charger les différences en fonction du type du module. Pour que vous pussiez mieux visualiser ce que je veux faire, on peut par exemple dire qu’il y a une balise <aside> commune et une balise <main> variant en fonction du type.

Helmasaur

Bonsoir, tu veux dire que des modules se clipseront à la balise aside de ta page et d’autres sur ton main ? Si oui, tu peux partir sur un module layout qui va afficher le rendu de ta page en appelant les différentes modules composants (à partir de hooks). A toi de voir comment tu les lient entre eux mais ça permet dans le back-office d’afficher/cacher un module à la volée.

Tant de choses, tant de vies, tant de possibilités.

+0 -0
Auteur du sujet

Je ne dais pas ce qu’est un hook pour Laravel. Je pense que ça sera plus clair avec des bouts de codes en fait.

ModuleController

public function index($id)
{
    $module = Module::find($id);

    return view('modules.index')->with(['module' => $module]);
}

Vue

@extends('layouts.base')

@section('title', $module->name)

@section('content')
    <main>
        <h2>{{ $module->name }}</h2>
        <p>{{ $module->content }}</p>
    </main>
@endsection

Tous les modules, quelque soit leur type auront cette base. Il faut imaginer qu’en fonction du type, d’autres éléments s’y grefferont.

J’avais pensé ajouter un identifiant (en plus de l’entier qui s’incrémente) et faire ajouter des conditions dans le contrôleur. Sinon, j’avais pensé hériter ModuleController, mais je ne sais pas comment faire et je ne pense pas que ça soit la bonne solution.

+0 -0

J’ai l’impression que tu veux utiliser un layout différent en fonction du type de module, non ?

Il est possible de faire une hiérarchie de layouts, mais c’est plus un bidouillage qu’autre chose j’ai l’impression. As-tu regardé du côté des composants par contre ?

Mes tutos — Architecte technique : JS/Node/Angular/Mongo, PHP/MySQL, AWS — Consultant qualité, ergonomie et UX

+1 -0
Auteur du sujet

J’ai l’impression que tu veux utiliser un layout différent en fonction du type de module, non ?

viki53

Non, pas entièrement. Le contenu de <h2> et de <p> sera différent à chaque fois. En fait, il peut y avoir plusieurs modules avec le même type. Chacun a son propre nom et contenu. Par contre, certains types ont des champs en plus. Il vaudrait mieux peut-être hérité et dans une table avoir le nom et le contenu jointe à une table du type en question ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte