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.
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.
Afin d'implémenter la classification Infinitus, vous devez créer une table de classification qui contient généralement les champs suivants:
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.
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.
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.
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.