1
votes

Un moyen facile de contrôler le contenu de la page d'accueil avec laravel

J'ai donc créé le cms pour le commerce électronique qui gérera toutes les opérations pour les produits, les catégories ... etc, maintenant je veux contrôler le contenu de la page d'accueil comme la définition des produits en vedette, des offres et des nouvelles collections .

Quelle est la meilleure idée pour créer une page de contrôle facile pour modifier ce contenu?

J'ai essayé d'utiliser des préréglages comme ceci:

 entrez la description de l'image ici

mais bien sûr, il devrait y avoir une autre idée


2 commentaires

«Meilleur» est subjectif. Pour vous, cela peut être une chose, pour quelqu'un d'autre - une autre. S'il n'est pas possible de marquer la question comme étant basée sur l'opinion, elle sera portée à l'attention du modérateur.


@DanielProtopopov par "Best" Je veux dire un moyen qui fonctionne correctement.


3 Réponses :


1
votes

Je le ferais avec une catégorie comme un tableau, mais uniquement pour contrôler la maison de commerce électronique.

Une autre option pourrait être d'utiliser des tables polymorphes. Une relation polymorphe permet au modèle cible d'appartenir à plus d'un type de modèle en utilisant une seule association.

Ensuite, vous pourriez créer un tableau comme celui que vous avez mis dans votre question, mais avec des produits, des bannières ou des catégories associés, de cette façon vous ne toucheriez pas aux ressources que vous ne devriez pas.

Pour en savoir plus, ici


4 commentaires

Génial! la relation polymorphe résout clairement le problème du type prédéfini, merci mais qu'en est-il de l'idée en général? est-il bon d'utiliser quelque chose appelé Presets pour contrôler la maison de commerce électronique, ou existe-t-il une meilleure idée?


Si vous faites référence à quel est le meilleur nom pour donner le modèle et la table dépend de votre goût, mais je l'appellerais Sections ou HomeSections


Oui, cette dénomination aide vraiment, existe-t-il un package laravel pour contrôler le contenu de la page d'accueil?


Je n'en connais pas.



1
votes

Voici ce que j'ai utilisé sur un site en direct

Pour tous les contenus qui changent rarement

  1. a créé la table site_contents avec l'ID de colonne, la page, la clé, la valeur (texte)

 entrez la description de l'image ici

  1. La valeur est jsonable, sur votre modèle, mentionnez-la pour la diffusion automatique en tant que tableau ou objet afin de ne pas avoir à json_decode tout le temps

    $ casts = ['value' => 'array']

  2. Maintenant, sur le contrôleur, vous interrogez chaque page comme SiteContent :: where ('key', $ page) -> get (['id', 'key', 'value']) code >

  3. Lors de l'enregistrement, s'il peut y avoir plusieurs clés (comme des bannières), utilisez la méthode create () . Et si la clé doit être unique (comme la mission), utilisez la méthode updateOrCreate ()

Pour le contenu qui change fréquemment

Des changements fréquents se produisent sur les produits populaires, les produits en vedette ou ... Je suggère d'ajouter les indicateurs is_popular, is_featured, is_latest à la table products et de les interroger manuellement là où c'est nécessaire

Si vous voulez les vider dans la table comme vous l'avez montré dans votre question en écrivant les codes de dumping sur votre modèle de produit comme indiqué ci-dessous

Modèle de produit

protected static function boot()
{
    parent::boot();

    static::created(function ($product) {
        if ($product->is_featured) {
            // write your code to dump it to site_contents table
            // or create an event ProductCreated and fire that here
        }
    });

    static::updated(function ($product) {
        if ($product->isDirty('is_featured ')) {
            // someone changed the is_featured flag
            if($product->is_featured) {
              // dump to site_contents table
            } else {
              // remove from site_contents table
            }
        }
    });
}


3 commentaires

Utiliser des booléens comme "is_featured" est si bon pour définir des attributs, même si j'utilise de nombreuses plates-formes pour afficher les données, je ne peux donc pas simplement les stocker en tant que json dans la base de données:


Si vous ne souhaitez pas utiliser de booléens, vous pouvez créer une table distincte comme features_products. Mais si vous ne voulez rien stocker dans la base de données, ajoutez une sélection multiple pour tous les produits. Selon la sélection effectuée, vous mettrez directement à jour la table site_contents.


En ce qui concerne, ne pas utiliser la valeur json, vous pouvez ajouter des colonnes Nullable supplémentaires selon les clés json



0
votes

Je vous suggère de développer les pages sur Blade sans avoir à récupérer le contenu de la base de données. croyez-moi, ça vaut le coup. car vous pouvez ajouter de nombreuses fonctionnalités à vos vues.

Et s'il s'agit d'un site Web de commerce électronique, eh bien, il sera plus difficile de gérer les événements de référencement et de suivi.

Ce qui devrait être dynamique, ce sont vos produits, les catégories pour les récupérer et les ajouter à vos vues.


2 commentaires

Les produits, catégories et autres données sont déjà dynamiques, mais je dois gérer la manière de les afficher comme présentés sur la page d'accueil.


Ah d'accord, donc pour mon propre projet, ce que je fais est de définir un widget comme Wordpress où j'ajoute mon propre fichier lame. voici le package que j'utilise: github.com/arrilot/laravel-widgets Donc par exemple si je veux montrer les produits vedettes je viens d'ajouter ceci à la page d'accueil: {{Widget :: run ('vedetteProducts')}}