短い説明:Sulu CMS:特定の属性の特定の値を持つ特定のタイプのコンテンツを検索/フィルタリングする方法は?状況の
- 我々は我々のウェブサイトの構造/木を持っているPostgreSQLの とDB接続
- 、スールー1.5.2、PHP 7.1、Windowsサーバ環境のフォークバージョンを実行していますトップレベルには
house
のテンプレートがあります。各家はhouse_rooms
と1つのhouse_occupants
テンプレートを持っています。各house_rooms
テンプレートはNhouse_rooms_room
テンプレートを持ち、それぞれhouse_occupants
テンプレートはNhouse_occupants_occupant
テンプレートを持っています。これは、N人部屋とN人部屋を持つ実際の家を表しています。そのgender
属性持つ値「女性」:
今私は、インスタンスの属性の特定のパターンを(以下のすべてのhouse_occupants_occupant
内容を具体的に取得する方法があるかどうかを知りたい例えば、と思いますそのdate_of_birth
のパラメータが> = 1990/01/01)、それぞれhouse
をロードせずに、その子のうちhouse_occupants
ページを見つけて、そのテンプレートのhouse_occupants_occupant
の子をループし、その生まれた日時誕生の属性の。
私はすでにでき::findAll()
と::findByUuids()
ContentRepositoryクラスがあることがわかったが、特定の(テンプレートの種類のように、テンプレートの属性、...)の属性に基づいてフィルタリングするための方法があるようには思えません。
$this->pdo->query("SELECT identifier, props FROM phpcr_nodes WHERE props LIKE '%>house_occupants_occupant<%'");
私ができる:だから私は、具体的には、特定のテンプレート名の発生のためのprops
属性をスキャンし、データベース内phpcr_nodes
テーブルの上に直接PDOクエリを実行し、私自身の「リポジトリ」を作成するの回り道をしましたprops
には、XML文書を表す文字列値が含まれていることがわかります。ただし、属性と値のペアを持つテンプレート全体に翻訳されますが、タグレベルや特定の属性が特定の値とどのように関連するかは不明です。だから、理論の私house_occupants_occupant
データのために、私のようなものを得ることができるように、私は、人間が読めるものにこれを有効にするために、特定のXMLパーサーを使用することができます:私はフィルタリングでき、ということだろうとき
// what I would get after putting the props through a certain XML parser:
$xmlHumanReadableData = [
'<the_uuid_of_occupant_1>' => [
...
'gender' => 'female',
'date_of_birth' => '1992-05-18T00:00:00.000+00:00',
...
],
... //etcetera etcetera
];
をどのコンテンツを保持したいのかを確認するために読み取り可能なデータを取得し、$theUuids
変数にnode-uuidを追加し、SuluのContentRepository::findByUuids($theUuids)
メソッドを使用して実際のコンテンツを取得します。これは、2つのクエリといくつかのPHP配列のフィルタリングを必要とするだけです。これは、特定の親からすべての子コンテンツをループし、すべての親とそのすべての子をトラバースするまでこれを行うよりも優れています。 (例えば、すべてhouse
のノードを検索したい場合は、house_occupants_occupant
ノードのうちの少なくとも1つが10歳未満の子供を表す場合はオーバーヘッドが増えます。 ...すべてをループよりも優れ大きな;-))
だから私の質問は、ソートの二つです::。「最後のクエリで使用filterdataしかし、まだを設定
- は何ですかスルー特有のXMLパーサーこの
props
列のXML文字列値を、適切な属性と値のペアを使用して人間が読める形式に変換できますか? - および/または、うまくいけば:私はすべてのこのナンセンスを避けるだけ特定の値特定の属性ためで特定のテンプレートタイプの内容を取り出すの少ない低レベルの方法を使用することができます方法はありますか?
ご返信ありがとうございます。私はそれを読んで、一度私はショットを与えたこの記事に戻る:) –