ページ 11

テンプレートで呼び出すチャンク名にリソース変数を利用したい

Posted: 2014年3月31日(月) 14:28
by aki
いつもお世話になっております。

表題の件について、うまくいかないので質問させてください。

●チャンク:メインコンテンツ、サブコンテンツなど各ブロックをパーツとして扱えるよう作る
●テンプレート:チャンクにした各ブロックをコンテンツに応じて呼び出す

上記のような形で利用しています。
この時、リソースの「エイリアス」を利用して、呼び出されるチャンクを可変にしたいと考えています。

例えば、以下のように各リソースのエイリアス名を含むチャンクを作っています。
●リソースのエイリアス:about、contact、profileなど
●チャンク名:side_about、side_contact、side_profileなど(※それぞれ表示内容が違う)

そして、共通で使うテンプレートに「{{side_[*alias*]}}」と書けば、
エイリアスによって読み込まれるチャンクが切り替わる、ことを想定していたのですが、うまくいきません。
全く何も表示されない(1.0.12J-r2-b5)か、
side_aboutのようにチャンクの中身ではなく名前がそのまま出てしまう(それ以前のバージョン)状態です。

しかし、デモサイトで同じようなものを作ってみると、きちんと動作したため、
デモサイトに入っておらず、こちらの環境でインストールしている
PHxプラグインを停止してみたところ、期待通りの結果(チャンクの中身が表示)が得られたのですが、
このような使い方に、PHxが何か影響するのでしょうか?

# 今までPHxが入っているせいでうまくいかなかったのは、MaxiGalleryとか、
# スニペットでテンプレート変数をいっぱい使うもの?だった気がしたので…。

aliasを使うのに問題があるのかもとも思い、longtitleなど別のリソース変数でも試しましたが
やはりPHxをオンにしたままでは、うまくいきませんでした。

PHxやMODXの仕様上、こういった使い方は無理ということならば諦めて別の方法を探そうと思います。
何かわかることがありましたら、お教えいただけると幸いです。
よろしくお願いします。

-----
ご利用のサーバ:さくらサーバー
MODXのバージョン:1.0.12J-r2-b5
PHPのバージョン:5.3.27
MySQLのバージョン:5.1.67
ブラウザ:Firefox(Windows)
-----

Re: テンプレートで呼び出すチャンク名にリソース変数を利用したい

Posted: 2014年3月31日(月) 19:33
by aki
追記です。
フォーラムを過去の投稿を回ってみたところ、こちらの内蔵PHxで親のページタイトルが取得できず、
idが出てしまう問題と似ているような気がしました。
http://forum.modx.jp/viewtopic.php?f=7&t=1059

PHxのphx.parser.class.incから処理を1行削除してみるアドバイスがあったので、
やってみましたが、ダメでした。(※上記トピックでも変化なしだったようです)

なんの処理が引っかかってしまうのかは、わかりませんが、
上記トピックにあった小さなスニペットを作って値を取得する方法を見よう見真似でやってみました。

コード: 全て選択

<?php
$ownalias = $modx->documentObject['alias'];
echo "{{side_".$ownalias."}}";
?>
PHPは詳しくないので、こんな感じで大丈夫か心配ですが、
このスニペットをテンプレートで呼び出すと、表示させたかったチャンクが出てきたので
ひとまずはこれでしのごうと思います。

そもそもテンプレートでのリソース変数の扱い方が間違っているとか、何かアドバイスがありましたら、
引き続きお待ちしております。よろしくお願いします。

Re: テンプレートで呼び出すチャンク名にリソース変数を利用したい

Posted: 2014年4月01日(火) 14:42
by yama
PHxやMODXの仕様上、こういった使い方は無理ということならば諦めて別の方法を探そうと思います。
・・・ということになるのかな、、と思います。PHxプラグインは本体の主要なパース処理を横取りして自前でパースを行ないます。そのため副作用が多いですので、(スニペットを自作するなどして)PHxプラグインを使わずにすむ場合は使わないほうが無難だと思います。
(内蔵のPHx機能は、プラグイン実装では無理があるため作られたという経緯があります)

Re: (解決)テンプレートで呼び出すチャンク名にリソース変数を利用したい  【解決済み】

Posted: 2014年5月26日(月) 23:40
by aki
お返事いただいたまま、長らく反応をしないままですみません。
こちらの件、単体プラグインのPHxを使わないということで解決いたしました^^

今まで、プラグインのPHxをどうしても使いたかった理由に、
さまざまなリソース変数やテンプレート変数を読み込み、PHxのifを使った条件判定で
各部の表示を自動的に切り替えたかったことがありました。

以下の内蔵PHxの説明を読んでいて
http://modx.jp/docs/extras/plugins/phx.html
単体プラグインとしてのPHxや、Ditto同梱機能としてのPHxと比べると、機能面においてはif構文が使えないという違いがあります。
とありましたので、内蔵PHxでは、ifでの条件判定ができないものと思い込んでいたのですが、
http://chibinowa.net/modx/features/modifier.html
こちらのサイト様のモディファイアの一覧を見つけて、値の一致や不一致などの簡単な条件判定なら
内蔵PHxでもできることを知り、プラグインのPHxを導入しなくてもやりたいことが実現できました。

お騒がせして申し訳ございません :oops:
内蔵のものでこれだけいろいろなことができるなら、あとは少しテンプレート変数などを工夫して用意するだけで
十分に動的な仕掛けのあるサイトが作れますね。いつもMODXには感謝しております。