で空dataWrapハンドル私はtx_extension_domain_model_item
レコードで参照されたときtt_content
レコードをレンダリング生成する必要があり、次のTypoScriptスニペット、「継承」しました:のTypoScript
lib.recordBasedHighlight = CONTENT
lib.recordBasedHighlight {
table = tt_content
select.orderBy = sorting
select.languageField = sys_language_uid
select.andWhere.stdWrap.cObject = TEXT
select.andWhere.stdWrap.cObject {
dataWrap = DB:tx_extension_domain_model_item:{GP:tx_extension_pi1|item}:referenced_content
wrap3 = uid IN ({|})
insertData = 1
}
select.pidInList.stdWrap.cObject = TEXT
select.pidInList.stdWrap.cObject {
dataWrap = DB:tx_extension_domain_model_item:{GP:tx_extension_pi1|item}:pid
wrap3 = {|}
insertData = 1
}
renderObj < tt_content
renderObj.list.10 >
}
をreferenced_content
フィールドは、いくつかの実際のコンテンツを持っているとき、これが正常に動作します(値はtt_content
のuidになります)。これが当てはまらない場合、wrap3
ステートメントの結果はuid IN()
になります。これは予期したとおり、SQLエラーをスローします。
私はコンテンツが参照されていない場合、そのフィールドが空である場合andWhere
句が空になるように、pidInList
にPIDからフェッチされている全てのコンテンツをもたらす.select.andWhere.stdWrap.cObject
構成にrequired = 1
を追加しようとしました。
referenced_content
が空の場合、正しいtt_content
レコードがレンダリングされ、レコードがレンダリングされないように、上記のスクリプトスニペットをどのように変更する必要がありますか?
SQLインジェクションを防ぐには、 'intval = 1'を使用してください! –
良い点ですが、どこに置くべきかわかりませんが、適用できる唯一の変数は 'GP:tx_extension_pi1 | item'です。そして、整数への明示的なキャストはありませんが、このtyposcriptが実装される唯一の方法は、有効なUIDがGETパラメータに渡されるときです(コントローラアクションプロパティを使用して)。私はスクリプトに他の情報を渡そうとしましたが、いくつかのランダムな内容のGETパラメータを持つURLをいくつか要求し、何が起きているかを調べるためにxdebugのブレークポイントを追加しましたが、何もデータベースに渡されませんでした。 – Plenka
GET/POSTパラメータが整数にキャストされていることを確認するためにintvalをどこに置くべきかを指定できますか?私はそれを追加することを傷つけることはありません。 :) – Plenka