Re: ブロックにおける追加テンプレートでのDBアクセス

2015年2月2日 at 20:10

ブロックのカスタムテンプレートを作成して試してみましたが、データベースからデータは取得できます。まあ、本来はビューではなくコントローラーに記載したいところですが…とりあえず動いてはいます。このようなコードでテストしました

$db = Loader::db();
$q = "select * from Pages";
$r = $db->query($q);
$row = $r->fetchRow();
var_dump($row);

考えられるのは、ブロックキャッシュが効いているためにSQLを追加する前の状態になっていることです。管理画面からキャッシュをクリアしてみてください。

Re: ブロックにおける追加テンプレートでのDBアクセス

2015年2月3日 at 14:25
hissy 様

ご教授ありがとうございました。
キャッシュクリアにより無事SQLは動作しました。助かりました。

合わせてご質問です。
ちょっと別件でのご質問で申し訳ないのですが、本件のSQL処理において「ClloctionVersionBlockStyle」テーブルのカラム「bID」を取得し、現在有効なブロックにおいて設定されたcss_idの値を取得し、その値の内容により、JavaScriptを動作させているテンプレートとなっていました。
その他のSQL条件は、「CollectionVersions」テーブルのカラム「csIsApproved」が1(おそらく承認され現在有効なデータの条件だと思いますが・・・)としています。

Ver5.4.1.1.1の場合は、一度作ったブロックを何回更新・承認してもbIDが変化しなかったのが、Ver5.6.3.2の場合、承認ごとにbIDがカウントアップしていきました。
(尚、bIDはシステムで一意っぽいですね。他のブロックを追加したらさらに1つカウントアップしていましたので・・・)、

ブロックテンプレート用に作成したphpの中で「$contoroller->bID」にてブロックIDを取得していますが、このbIDは次に承認されるときに設定されるbIDとなっています。(未来のbID)
ただ、現在のDBに存在しているbIDは現在承認されているbIDなので、取得したbIDより-1小さい値です。【例:現在DBに登録されているbIDは150とした場合、「$contoroller->bID」にて取得できるbIDは151となっている】

その為、テンプレートを設定した段階では条件に設定されたbIDではDBに値が存在しない為取得できず、結果としてJsが動作しない状況となっていました。
ただ、承認後はSQLが実行されれば値が取得できるので、該当ページを開くたびに動作するSQLと構成するJsにてうまくいくかと思いきや、ページを開いてもJsは構成されず、SQLも動いていませんでした。
phpで記載したSQLやJsは更新時(管理画面での設定時)一回のみ動作して画面を構成する仕組みなのでしょうか?
画面を開く度に、毎時SQLが動作するわけではないのでしょうか?