LoginSignup
0
1

MODXでリソースID・ページタイトルなどと同時にテンプレート変数の値も取得する

Last updated at Posted at 2017-01-29
$rs = db()->select('id,pagetitle,content','[+prefix+]site_content','id=5');

MODXでは上記のように書くことで、リソース変数の値に直接アクセスすることができます。
が。
テンプレート変数の値を引っ張ってくるのは工夫が必要です。

db()->select (
    array(
        'id'        => 'sc.id',
        'pagetitle' => 'sc.pagetitle',
        '住所'      => 'addr.value',
        '電話番号'  => 'tel.value'
    )
    , array(
        '[+prefix+]site_content sc',
        'LEFT JOIN [+prefix+]site_tmplvar_contentvalues addr ON sc.id=addr.contentid AND addr.tmplvarid=3',
        'LEFT JOIN [+prefix+]site_tmplvar_contentvalues tel ON sc.id=tel.contentid AND tel.tmplvarid=5'
    )
    , 'sc.id=5'
);

上記のように書きます。

SELECT
  sc.id,
  sc.pagetitle,
  addr.value AS 住所,
  tel.value AS 電話番号
FROM modx_site_content sc
  LEFT JOIN modx_site_tmplvar_contentvalues addr
     ON sc.id=addr.contentid AND addr.tmplvarid=3
  LEFT JOIN modx_site_tmplvar_contentvalues tel
     ON sc.id=tel.contentid AND tel.tmplvarid=5
WHERE sc.id=5

1.0.21Jよりも古いバージョンなら上記のように生SQLで記述します。DBAPI自体は昔から使えますが、複雑なパラメータを配列を使って整理して与えることができません。

※2020年3月7日追記

冒頭の例が間違っていたので修正しました。[+site_content+] と書いていましたが、正しくは [+prefix+]site_content です。
あと、DBAPIによる記述を追記しました。

※2020年4月13日追記

DBAPI記述のほうをメインにしました。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1