Position actuelle: Accueil> Derniers articles> ThinkPhp5 Infinitus Classification Implémentation Explication détaillée et exemples de code

ThinkPhp5 Infinitus Classification Implémentation Explication détaillée et exemples de code

gitbox 2025-08-05

Introduction de base à la mise en œuvre de la classification Infinitus avec ThinkPhp5

La classification Infinitus est une méthode de classification courante dans la gestion des données, adaptée aux scénarios multi-niveaux et multi-sous-classe, tels que la classification des produits ou des articles. Cet article expliquera comment concevoir et implémenter le processus complet et l'exemple de code de classification Infinitus via le framework ThinkPHP5.

Le concept et l'application de la classification infinite

La classification Infinitus permet à une classification d'avoir plusieurs sous-catégories, et chaque sous-catégorie peut également continuer à avoir sa propre sous-catégorie pour former un système de classification à col de couche. Cette structure est flexible et pratique pour gérer et afficher des relations de classification complexes.

Conception de la table de base de données

Afin d'implémenter la classification Infinitus, vous devez créer une table de classification qui contient généralement les champs suivants:

  • ID: clé primaire, identifiant unique de classification
  • Nom: nom de classification
  • parent_id: ID de classe parent, pointant vers la catégorie correspondante dans le même tableau

Définition du modèle

Dans ThinkPhp5, utilisez la classe de modèle pour fonctionner sur les données de classification. L'exemple suivant définit le modèle de catégorie et met en œuvre des méthodes pour obtenir des sous-classes directes et obtenir toutes les sous-classes:

 namespace app\index\model;
use think\Model;
class Category extends Model
{
    // Spécifiez le nom de la table(Si les règles par défaut ne sont pas respectées)
    protected $table = 'category';

    // Obtenez la sous-catégorie directe de la classification actuelle
    public function childrenCategories()
    {
        return $this->hasMany('Category', 'parent_id', 'id')
                    ->order('id', 'asc');
    }

    // Obtenez de manière récursive toutes les sous-catégories,Sous-catégorie comprenant une sous-catégorie
    public function allChildrenCategories()
    {
        return $this->childrenCategories()->with('allChildrenCategories');
    }
}

La méthode ci-dessus utilise la fonction du modèle d'association de ThinkPHP pour faciliter l'obtention de données hiérarchiques de classification flexibles.

Appel des données de classification de l'opération du modèle dans le contrôleur

Le contrôleur peut interroger et exploiter des informations de classification via le modèle. L'exemple de code obtient la classification de premier niveau et la traversée obtient la sous-classe:

 $categories = Category::where('parent_id', 0)->select();

foreach ($categories as $category) {
    $childrenCategories = $category->childrenCategories;
    // La sous-classe peut être traitée ici
}

Si vous devez obtenir toutes les sous-catégories d'une certaine catégorie (y compris les sous-catégories à plusieurs niveaux), vous pouvez utiliser:

 $allChildrenCategories = $category->allChildrenCategories;

Cette méthode renvoie une collection de modèles associatifs qui peuvent continuer à effectuer plus d'opérations.

Rendu des données de classification des calques de vue

Dans la vue, afin d'afficher des données de classification à plusieurs niveaux, l'affichage d'indentation hiérarchique peut être implémenté via des fonctions récursives:

 function renderCategories($categories, $indent = 0)
{
    foreach ($categories as $category) {
        echo str_repeat('    ', $indent);
        echo $category->name . '<br/>';
        renderCategories($category->childrenCategories, $indent + 1);
    }
}

renderCategories($categories);

De plus, le moteur de modèle ThinkPHP5 prend en charge le rendu récursif des catégories à l'aide de la balise volontaire , exemple:

 <ul>
{volist name="categories" id="category"}
    <li>{$category.name}</li>
    {volist name="category.childrenCategories" id="child"}
        <ul>
            <li>{$child.name}</li>
            {include file="category_tree" /}
        </ul>
    {/volist}
{/volist}
</ul>

Cette méthode est simple et facile à entretenir et réalise l'affichage récursif de la classification à plusieurs niveaux.

Résumer

Grâce à une structure de table de données raisonnable, à la définition de la relation du modèle et à l'affichage récursif, ThinkPhp5 peut implémenter efficacement et flexiblement la fonction de classification infinie pour répondre aux besoins de classification complexes. J'espère que l'introduction et l'exemple de code de cet article pourront vous aider et vous référer à implémenter la classification à plusieurs niveaux dans votre projet.