ブロックにおける追加テンプレートでのDBアクセス
現在Concrete勉強中のものです。
以前Ver5.4.1.1.1にて、別の方がサイト作成したのですが、それを利用して1からVer5.6.3.2でサイト構築しています。(バージョンアップでは無く)
どちらのバージョンも環境は同じところ(物理的に同じサーバーにあります)、DBも両サイト同じものを使用しています。
その中で、ブロックのアドオンテンプレートが作成されており、同じものを5.6.3.2へ配置したのですが、5.4.1.1.1では動作したPHPが5.6.3.2では動作しなくなりました。
SQLログを取得したところ、5.6.3.2では、どうもテンプレートで作成したPHPファイルに記載されたSQLが実行されていないようです。
実行結果から取得した値を利用してJSを実行していたため、SQLが実行されず、結果的に動作しない状況となっていました。
Ver5.6では、ブロックのテンプレートで作成したphpファイル内では、DBアクセスできないのでしょうか?
記述としては、
--------------------------------------------------------
$db = Loader::db();
$q= "select ○○1 "
$q.= "from ○○2 "
$q.= "where ○○3 = ? "
$q.= "and ○○4 = ? "
$cID = "○○"
$cssId = $db >getOne($q,array($cID,$controller ->○○4)
--------------------------------------------
のような形で、$cssIdを利用したjsを記載していました。
ちなみに、単純なSQLも記載してみましたが、SQLは、やはり実行されていませんでした。
($db->query("select ○ from ○")
どなたか何かご教授いただけると幸いです。
よろしくお願いいたします。
Re: ブロックにおける追加テンプレートでのDBアクセス
ご教授ありがとうございました。
キャッシュクリアにより無事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が動作するわけではないのでしょうか?
takuro hishikawa
Re: ブロックにおける追加テンプレートでのDBアクセス
$db = Loader::db();
$q = "select * from Pages";
$r = $db->query($q);
$row = $r->fetchRow();
var_dump($row);
考えられるのは、ブロックキャッシュが効いているためにSQLを追加する前の状態になっていることです。管理画面からキャッシュをクリアしてみてください。