web-dev-qa-db-fra.com

Association inattendue de balises parent

J'utilise 3.3.0 et j'ai commencé à jouer avec les tags. J'ai remarqué que toutes les balises récemment créées avaient la balise Joomla comme parent. Lorsque je modifie la balise, le menu déroulant Parent est défini sur Aucun. Cependant, si je dé-publie la balise Joomla, les balises suivantes deviennent également non publiées (et ne peuvent pas être publiées tant que je n'ai pas publié la balise Joomla). Est-ce comportement attendu?


Quelques captures d'écran

Composants => Tags

J'ai supprimé la balise Joomla, qui annule également la plupart de mes autres balises (curieusement, pas Baking, bien que celle-ci ait été ajoutée à un moment différent de celui des autres, ce qui me porte à croire que quelque chose a changé entre-temps). Si je clique sur le statut de SciLab, cela ne changera pas. Si je change le statut de Joomla, tout le monde (sauf pour Baking) fera de même.

enter image description here

Composants => Tags => SciLab

Aucun parent n'est défini. Ici, je peux publier le tag, et il semble persister jusqu'à ce que je bascule le tag Joomla; Joomla se comporte toujours comme le parent.

enter image description here

Composants => Tags => Cuisson

Pourquoi la cuisson ne partage pas le sort de tous mes autres tags, ça me dépasse.

enter image description here


En réponse à @FFrewin

Voici une capture d'écran de ma table jos_tags. Il semble y avoir des problèmes avec les valeurs lft/rgt. De plus, le chemin indique que Joomla est le parent de toutes les balises , même si Baking ne se comporte pas comme si elle avait un parent.

enter image description here

3
bobthechemist

S'il n'y a pas d'autres hacks sur le code qui affectent les fonctions de sauvegarde du composant, alors ce problème me fait penser que quelque chose peut être gâché dans le modèle de jeu imbriqué dans la table jos_tags .

Vous aurez besoin de vérifier vos balises db_table avec un outil tel que phpmyAdmin , pour connaître ces valeurs, et peut-être si vous avez besoin de conseils supplémentaires, postez ici une capture d'écran des colonnes de la table des étiquettes pour un examen plus approfondi.

Pour plus d'informations, consultez ce très bon article qui décrit le concept modèle d'ensemble imbriqué. Une bonne lecture pour tout le monde.

Le diagramme du modèle d'ensemble imbriqué:

The Nested Set Model diagram


Votre table de balises Joomla

Mais dans un résumé, si tous vos tags sont ceux que je vois dans la capture d'écran, vous devriez vous attendre à voir quelque chose de similaire à la capture d'écran que je publie ici.

Ce que vous devriez plus vous soucier de ma capture d’écran est le parent_id (bien sûr), les valeurs lft, rgt, level et path. right tags table for the question
Puisque vous voulez que toutes vos balises soient des enfants de la balise racine (c’est-à-dire qu’elles n’ont aucune autre balise en tant que parent), elles doivent toutes être définies sur level = 1 et parent_id = 1. Pour les valeurs lft et rgt, Tous vos tags doivent avoir des nombres ne différant pas plus de 1, entre leurs valeurs gauche/droite, alors que ROOT doit avoir la valeur lft définie sur 0 et la droite définie sur le nombre le plus élevé de ce calcul: "(nombre total de tags * 2 ) -1".

Généralement, il n’existe pas de solution simple pour les com_tags. S'il arrive que vous n'ayez que quelques balises, vous pouvez éditer les valeurs lft/rgt à la main (bien sûr après les avoir calculées). Si vous avez un grand nombre de balises, vous devrez probablement chercher à écrire un script php, qui calculera et définira ces valeurs correctement.

J'espère que cela aide et ne sera pas trop déroutant.

Pour être plus précis, procédez comme suit:

Réglez ROOT lft/rgt 0-13, Joomla lft/rgt sur 1-2 cuisson 3-4 et continuez ainsi jusqu’à votre dernier voyage avec une étiquette qui devrait être 11-12. Supprimez également du chemin les parties joomla et slash. Mais dans tous les cas, commencez par faire une sauvegarde de votre base de données.

2
FFrewin