2010年5月29日土曜日

シングルページの変更方法

エラー表示ページなどの「シングルページ」を変更したい場合の方法が、
concrete5日本公式サイトに書かれています。
実装の必要があるので、リンクメモをしておきます。

http://concrete5-japan.org/help/design/customize-single-pages/

ありがたや。。

アップロードファイルをファイルマネージャーで。

concrete5で、FTPにてアップロードしたファイルをファイルマネージャーで管理するには、
/files/incoming/
というディレクトリ(フォルダ)をつくって、
書き込み権限を与えるといいのですね。


http://concrete5-japan.org/community/forums/chat/post-607/
に詳細が書かれています。

便利。

concrete5のレスポンスアップ

concrete5の管理画面トップに、過去数日の閲覧件数がflashで表示されていますが、
この表示を切ると、レスポンスが早くなり幸せになれます。

concrete5日本のフォーラムにやり方が書いてあります。
http://concrete5-japan.org/community/forums/chat/post-461/

要約すると、
1、/config/site.phpの中に
define('STATISTICS_TRACK_PAGE_VIEWS', false);
を追加して、新しく定数を定義。

2、
/concrete/elements/dashboard/modules/reports.php
を、トップディレクトリにある
/elements/ディレクトリ配下に、
dashborad/modules/reports.php
というように、階層的にディレクトリをつくって、最後にreports.phpファイルを作り、
中身に、

<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
<div id="dashboard-reports" style="width:330px;height:280px;">
<p>アクセス解析を中止</p></div>

といったように、不正アクセスブロックコードと、必要があればメッセージを記入して、保存。

3、そしてMySQL内の「PageStatistics」というテーブルをバックアップし、必要なければ削除。

でOKです。

お決まりですが、 適用は自己責任で。

やってみたら、体感できるぐらいスピードアップしてくれて、幸せです。

2010年5月10日月曜日

concrete5上に同一サーバ内別DBデータ表示を表示。(覚え書き)

concrete5上に、同一サーバ内の別DBからデータをselectして表示させる必要があり、色々試行錯誤が必要だったのでメモです。

1、まず、無料のPHPブロックを使って、普通にMySQL関数で外部DBを読み込ませるとすぐOKになり、一見完璧だったのですが、ページのリロードなどをすると、ADOdbに関するエラーが出て、アウトでした。

2、そこで、本家ドキュメントを見に行き、
http://www.concrete5.org/documentation/developers/system/database-connectivity
にADOdbを使って他のDBにアクセスする方法の概要が出ていたので、コードの変更を行うことにしました。

$db = Loader::db( 'newserver', 'newuser', 'newpassword', 'newdatabase', true);
という感じで、外部DBにアクセス。
$rows=$db->Execute('select * from TestTable');
で実行&格納。

3、http://adodb.sourceforge.net/
にADODBの記述法が書いてあったので、参考にしながら色々やってみました。
 途中、whileの書き方が良くなかったらしく、無限ループに入ってまいりました。。
 PHPブロックのデータが入ったbtNdPhpBlockContentというテーブルに、記述したコードがあったので、そちらを削除して回避しました。。

4、最終的に以下のような感じで、目的のデータを表示できました。
foreach ($rows as $row) {
printf("<p>■「%s」(%s):%s</p> ",$row['title'],$row['date'],$row['content']);
}
5、以下のコードを挿入すると元のDBにアクセスし直す、ということだったので、挿入。(これを入れないと、自分の経験ではループに入ってしまう感じです。。)
// return to the original db session
$db = Loader::db(null, null, null, null, true);
 
 これでlocalサーバ内の別DBからのデータもconcrete5上で表示させることができ、エラーも出なくなって、目的が達成されました。

2010年4月30日金曜日

jQueryライブラリの読み込ませる順番でミスした。

header.phpの中で、べた書きでjsをインクルードさせたら、
アクティブになってくれず、しばし悩みました。。

おかしいと思ったら、

<?php Loader::element('header_required'); ?>
の前に記述していたのが原因でした。

というのも、jQueryの本体を読み込む前に、ライブラリを読み込ませていた、と。
大ボケ。

<?php Loader::element('header_required'); ?>
の後に記述し直したら、無事jsが機能してくれました。

良かった。

jsファイルのインクルード

concrete5で、jsファイルをインクルードするには、
トップディレクトリ配下の「js」ディレクトリ内にjsファイルをアップロードし、
該当ページで、「設定」⇒「カスタム属性」⇒「追加ヘッダー要素」欄に、以下のように普通にscriptタグでインクルードさせたらOKでした。

<script type="text/javascript"  src="/js/fontsize.js"></script>
<script type="text/javascript"  src="/js/cookie.js"></script>
(補足:パスの"/js/cookie.js"などの最初の"/"を抜かしてこれまで書いていました。もし参考にして,インクルードがうまくいかなかった方がおられればすみません!)

テンプレート全体でインクルードするなら、
<?php echo $this->getThemePath().'/js/fontsize.js'; ?>
といったように、テーマのheader.phpでインクルードするのが良いかな、と。
(ファイルやディレクトリ名の前に/が必要です。忘れたら、エラーが出て焦りました。。)

もっといい方法があるかな。。

imgをテンプレート内から参照する方法メモ

<img src="<?php echo $this->getThemePath().'/images/image.gif'; ?>" />
といったように囲むと吉。

$this->getThemePath().がミソですね。

これ、スタイルシートのインクルードにも使えます。
要するに、テーマのパスを取得して返してくれる、という便利なおまじないです。