web-dev-qa-db-ja.com

#__menuテーブルで「lft」と「rgt」は何をしますか?

データベースにメニュー項目を手動で追加しようとしました。 #__menuテーブルの2つのフィールドに気付いたときは、 この質問 を参照してください。 2ずつ自動増加しているように見えます。たとえば、最新のメニューアイテムに{lft:121、rgt:122}がある場合、新しいメニューアイテムには{lft:123、rgt、124}があります。簡単な検索で、それらが「ネストされたモデル」と呼ばれるものに関連していることがわかります。私は他のJoomlaテーブルを調べます。多くの場合、これらの2つのフィールドもあります。

それらが何であるかを理解せず、テーブルに新しいレコードを追加し、自動インクリメントを維持しながら、各新しいレコードにこれら2つのフィールドを指定しました。

今日、私はバックエンドを介して新しいメニュー項目を追加して、このエラーメッセージを取得しようとしました:

次のエラーで保存が失敗しました:例外「UnexpectedValueException」とメッセージ「MenusTableMenu :: _ getNode(1、)failed。」 /home/p/public_html/libraries/joomla/table/nested.php:1532スタックトレース:#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/libraries/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/component /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 {メイン}

nestedがこの問題に関係しているので、無視した2つのフィールドと関係があると思います。これを修正するには?

PS、私はいくつかのPHPレコードを#__menuに追加するためにハードコーディングしました。これも問題の一部であると思います。#__menu以外のメニュー項目を追加しすぎると、私が世話をする必要がある他のテーブルはありますか?

1
shenkwen

LftおよびrftコードはJoomlaで非常に古いものであり、コア機能のサブセットでのみ使用されます。基本的には...

  • lft:左側のアイテムのアイテムID
  • rgt:右側のアイテムのアイテムID

テーブルに項目を追加すると、メニューを「再構築」する必要がある場合があります。これは、基本的にすべてのlftとrftの値を設定するメニューマネージャーの上部にあるボタンです。

プログラムでメニュー項目をデータベースに追加する場合は、後でメニュー項目を「再構築」する必要がある場合があります。

参考文献

3
AndyGaskell

単に-それはサブセットで注文するためのものです。それに関する実際の情報が必要な場合-Wiki「ネストされたセット」を参照してください

Joomlaとカスタムを介したメニュー項目の追加についてPHP-ここで提供されているものを使用するのは簡単です https://docs.joomla.org/Using_nested_sets

注意すべき点について-#__assetsテーブルもネストされたセットを使用します

0
Alexandr