web-dev-qa-db-ja.com

予期しない親タグの関連付け

3.3.0を使用しており、タグの使用を開始しました。最近作成したすべてのタグに、親としてJoomlaタグがあることに気付きました。タグを編集すると、[親]プルダウンメニューが[なし]に設定されます。ただし、Joomlaタグを非公開にすると、後続のタグも非公開になります(Joomlaタグを公開するまで公開できません)。これは予想される動作ですか?


一部のスクリーンショット

コンポーネント=>タグ

私は他のタグのほとんどを非公開にするタグJoomlaを非公開にしました(奇妙なことに、ベーキングではありませんが、他のタグとは別のときに追加されたため、その間に何かが変更されたと思い込んでいます)。 SciLabのステータスをクリックしても変化しません。 Joomlaのステータスを切り替えると、すべて(ベーキング用に保存)がそれに続きます。

enter image description here

コンポーネント=>タグ=> SciLab

親は設定されていません。ここでタグを公開できますが、Joomlaタグを切り替えるまで持続するようです。 Joomlaはまだ親のように動作しています。

enter image description here

コンポーネント=>タグ=>ベーキング

なぜベーキングが他のすべてのタグの運命を共有していないのかは、私を超えています。

enter image description here


@ FFrewinによる回答に応じて

これが、jos_tagsテーブルのスクリーンショットです。 lft/rgt値に問題があるように見えます。さらに、パスは、Bakingが親を持っているかのように動作していない場合でも、Joomlaがタグの親allであることを示しています。

enter image description here

3
bobthechemist

コンポーネントの保存機能に影響を与えるコードに他のハックがない場合、この問題により、Nested Set Modelで何かがめちゃくちゃになる可能性があると思いますjos_tagsテーブル

phpmyAdminなどのツールでタグdb_tableを確認し、これらの値について確認する必要があります。さらにアドバイスが必要な場合は、タグテーブルの列のスクリーンショットを投稿してください。調査。

詳細については、ネストされたセットモデルの概念を説明するこの非常に優れた記事を確認してください。誰にとっても良い読み物。

入れ子集合モデル図:

The Nested Set Model diagram


Joomlaタグテーブル

しかし、簡単に言うと、すべてのタグがスクリーンショットに表示されているものである場合、ここに投稿したスクリーンショットと同様のものが表示されるはずです。

私のスクリーンショットからもっと気を付けるべきことは、parent_id(もちろん)、lft、rgt、レベル、パスの値です。 right tags table for the question
すべてのタグをルートタグの子にする(つまり、他のタグを親として持たない)必要があるため、それらはすべてlevel = 1およびparent_id = 1に設定する必要があります。lft値とrgt値の場合、すべてのタグには、左/右の値の差が1以下である必要があります。一方、ROOTのlft値は0に設定され、右はこの計算のより高い数に設定されます: "(タグの総数* 2 )-1 "。

一般に、com_tagsでこれに対処する簡単な方法はありません。数個のタグしかない場合は、lft/rgt値を手動で編集できます(もちろん、それらを計算した後で)。タグの数が多い場合は、phpスクリプトを作成して、これらの値を適切に計算および設定する必要があります。

これが役立ち、あまり混乱しないことを願っています。

より具体的にするには、次の手順に従ってください:

ROOT lft/rgt 0-13を設定し、Joomla lft/rgtを1-2ベーキング3-4に設定し、最後のタグが11-12になるまでこのように続けます。また、パスからjoomlaとスラッシュ部分を削除します。ただし、いずれの場合も、最初にデータベースのバックアップを取ってください。

2
FFrewin