2017-06-13 4 views
0

短い説明:Sulu CMS:特定の属性の特定の値を持つ特定のタイプのコンテンツを検索/フィルタリングする方法は?状況の

  • 我々は我々のウェブサイトの構造/木を持っているPostgreSQLの
  • とDB接続
  • 、スールー1.5.2、PHP 7.1、Windowsサーバ環境のフォークバージョンを実行していますトップレベルにはhouseのテンプレートがあります。各家はhouse_roomsと1つのhouse_occupantsテンプレートを持っています。各house_roomsテンプレートはN house_rooms_roomテンプレートを持ち、それぞれhouse_occupantsテンプレートはN house_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テーブルの上に直接PD​​Oクエリを実行し、私自身の「リポジトリ」を作成するの回り道をしました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文字列値を、適切な属性と値のペアを使用して人間が読める形式に変換できますか?
  • および/または、うまくいけば:私はすべてのこのナンセンスを避けるだけ特定の値特定の属性ため特定のテンプレートタイプの内容を取り出すの少ない低レベルの方法を使用することができます方法はありますか?

答えて

0

あなたが見つけたContentRepositoryは、既にページの要件の一部を抽象化しています。あなたの要件はすでにかなり特定なので、SQL-2のquery language for PHPCRを使用して独自のクエリを作成する必要があります。

これにより、要件に合ったクエリを記述することができます。

+0

ご返信ありがとうございます。私はそれを読んで、一度私はショットを与えたこの記事に戻る:) –

関連する問題