web-dev-qa-db-fra.com

Que font 'lft' et 'rgt' dans la table #__menu?

J'essayais d'ajouter manuellement un élément de menu à la base de données. Voir cette question , quand je remarque ces deux champs dans le #__menu table. Il me semble qu’ils augmentent automatiquement de 2. Par exemple, si le dernier élément de menu a {lft: 121, rgt: 122}, le nouvel élément de menu aura alors {lft: 123, rgt, 124}. Une brève recherche montre qu'ils sont liés à quelque chose appelé "modèle imbriqué", et je regarde d'autres tables Joomla, beaucoup ont aussi ces deux champs.

Ne comprenant pas ce qu’ils sont, j’ajoute un nouvel enregistrement à la table et attribue à chaque nouvel enregistrement ces deux champs, en conservant l’incrémentation automatique.

Aujourd'hui, j'ai essayé d'ajouter un nouvel élément de menu via le back-end et d'obtenir ce message d'erreur:

L'enregistrement a échoué avec l'erreur suivante: l'exception "UnexpectedValueException" avec le message "MenusTableMenu :: _ getNode (1,) a échoué". dans /home/p/public_html/libraries/joomla/table/nested.php:1532 Trace de pile: # 0 /home/p/public_html/libraries/joomla/table/nested.php(773): JTableNested -> _ getNode (1 ) # 1 /home/p/public_html/libraries/legacy/table/menu.php(243): JTableNested-> store (false) # 2 /home/p/public_html/administrator/components/com_menus/models/item.php (1258): JTableMenu-> store () # 3 /home/p/public_html/administrator/components/com_menus/controllers/item.php(267): MenusModelItem-> save (Array) # 4/home/p/public_html/bibliothèques/legacy/controller/legacy.php (728): MenusControllerItem-> save () # 5 /home/p/public_html/administrator/components/com_menus/menus.php(18): JControllerLegacy-> execute ('apply') # 6 /home/p/public_html/libraries/cms/component/helper.php(405): require_once ('/ home/p/public _...') # 7/home/p/public_html/libraries/cms/composant /helper.php(380): JComponentHelper :: executeComponent ('/ home/p/public _...') # 8/home/p/public_html/libraries/cms/application/administrator.php(98): JComponentHelper :: renderComponent ('co m_menus ') # 9 /home/p/public_html/libraries/cms/application/administrator.php(152): JApplicationAdministrator-> dispatch () # 10/home/p/public_html/libraries/cms/application/cms.php ( 257): JApplicationAdministrator-> doExecute () # 11 /home/p/public_html/administrator/index.php(51): JApplicationCms-> execute () # 12 {main}

Je vois que nested est impliqué dans ce problème, alors je suppose que cela a quelque chose à voir avec les deux champs que j'ai ignorés. Comment régler ceci?

P.S., j’ai codé certains PHP pour ajouter un enregistrement dans le #__menu, Je pense que cela joue également un rôle dans le problème. Pour ajouter un élément de menu, en plus de #__menu, y a-t-il une autre table dont je devrais m'occuper?

1
shenkwen

Le code lft et rft est assez ancien dans Joomla et n’est utilisé que dans un sous-ensemble de fonctionnalités de base. Fondamentalement, cela signifie ...

  • lft: l'identifiant de l'article à gauche
  • rgt: l'identifiant de l'article à droite

Si vous ajoutez des éléments à la table, vous constaterez peut-être que vous devez "reconstruire" le menu. Il s’agit d’un bouton situé en haut du gestionnaire de menus qui définit toutes les valeurs lft et rft.

Si vous ajoutez des éléments de menu par programme à la base de données, vous devrez peut-être les "reconstruire" par la suite.

Lectures complémentaires

3
AndyGaskell

Simplement, c'est pour commander en sous-ensembles. Si besoin d'informations réelles à ce sujet - voir Wiki "Ensembles imbriqués"

Concernant Joomla et l’ajout d’éléments de menu via custom PHP - c’est simple si vous utilisez ce qui est fourni ici https://docs.joomla.org/Using_nested_sets

En ce qui concerne ce que vous devriez garder à l'esprit - la table #__assets utilise également des ensembles imbriqués

0
Alexandr