OpenPNE 画像を色々なサイズで表示する

1

以前書いたエントリ「OpenPNE 画像の保存、表示方法 」で、OpenPNE にアップロードした画像の表示方法を紹介しました。

表示方法は下記のとおりです。
<img src=&qt;({t_img_url filename=$pet.image1 w=180 h=180})&qt;>

しかし、この方法では 240×240 のような画像が表示できませんでした。
ソースを追ってみると設定ファイルで許可するサイズを設定するところがありました。

openpne/config.php
$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array('76x76', '120x120', '180x180');

この配列に ’240×240′ を追加すれば 縦か横の長い方が 240px の写真が表示できます。
また、
$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array();
のように空の配列にすれば制限がなくなり、自由に大きさを指定できます。
ただ、制限はかけておいた方がいいでしょう。

CakePHP 保存したデータをすぐに find したい場合キャッシュを OFF にする

1

CakePHP で保存したデータをすぐにfind するとキャッシュが効いている為に保存したばかりのデータを取得することができません。
その場合はキャッシュを OFF にすることにより新しいデータを取得することができます。

$this->Model->cacheQueries = false;

シェルから CLI版 PHP を実行した場合の返り値

0

シェルから PHP を実行してその結果を元にシェルで処理をしたいので、PHP からシェルに値を戻す方法を調べた。
exit で引数を指定できるのを知らなかったのでメモ。

●参考PHPマニュアル
PHP: exit – Manual

正常終了の場合
exit(0);
異常終了の場合
exit(1);
とすれば

/usr/bin/php hoge.php
if [ $? -ne "0" ]; then
    異常終了時の処理
else
    正常終了時の処理
fi

と “$?” で php からの返り値をチェックしてその後の処理の分岐に使用できます。

ホスト名にアンダスコア(アンダバー)を使用すると IE でクッキーを設定できなくなる

4

test_hoge.example.com のようにアンダスコアをホスト名に使用すると IE ではクッキーを受け付けなくなります。
ホスト名ではアンダスコアは使用できない文字なので IE では受け付けないようになっているようです。

これは結構はまり解決までに時間がかかってしまったのでメモしておきます。
Firefox ではアンダスコアの入ったホスト名でもクッキーを受け付けます。

ホスト名を設定してくれたサーバ管理者に聞いても知らなかったようなので、はまる人多いのではないかと思います。
実は結構常識だったりしますか?

CakePHP findAll の条件に NOT IN 演算子を使う

0

前回の投稿の「CakePHP findAll の条件に IN 演算子を使う」のつづきで、NOT IN 演算子を使用するときに少し調べたのでメモしておきます。

$this->model->findAll('field NOT IN (1, 2, 3)');
または、
$this->model->findAll(array('NOT' => array('field' => array(1, 2, 3))));
で出来ました。

CakePHP findAll の条件に IN 演算子を使う

1

CakePHP の findAll の条件に IN 演算子には下記のように条件を指定すればOKです。

$this->model->findAll(array('field IN (1,2,3)'));
または、

$params = array(1,2,3);
$this->model->findAll(array('field' => $params));

配列で渡せば勝手に IN 演算子を使用してくれるんですね。

OpenPNEでのSmarty の覚書

1

OpenPNE PHP で作成したプログラムを組み込む」で書いたように、

/openpne/webapp_ext/modules/pc/page/hoge_foo.php に

class pc_page_hoge_foo extends OpenPNE_Action
{
    function execute($requests)
    {
    	// ここに処理を書く
    }
}

のようにすると ?m=pc&a=page_hoge_foo でアクセスできるようになります。
このときにどうやって Smarty に値を渡すのか少し戸惑ったのでメモしておきます。

Smarty タグ

通常は 「{」「}」 ですが、OpenPNE では 「({」「})」 です。

assign

$smarty->assign("var", $var);
のようにして Smarty に値を渡したいときは execute メソッド内で
$this->view->set("var", $var);
とすればOK。

display

$smarty->display("hoge_foo.tpl");
は自動的にやってくれます。

default_modifiers (escape)

また、OpenPNE の smarty オブジェクトはオブジェクト生成時に
$smarty->default_modifiers に escpae 修飾子が設定されているので、
テンプレート変数に HTML タグが設定されていて HTMLタグを出力したい場合は
({$var|smarty:nodefaults})
とすれば、escape 処理されずに出力されます。

私は HTML_QuickForm をよく使うので、form タグ関係を出したいことがありますので、その場合に使用しています。

OpenPNE PHP で作成したプログラムを組み込む

1

OpenPNE PHP で作成したプログラムを組み込むときのメモです。
基本的に、/openpne/webapp_ext/ 以下に追加するファイルを置きます。

URLのパターン

OpenPNE の URL は下記のようになります。

  • ?m=pc&a=page_hoge_foo
  • ?m=pc&a=do_hoge_foo

携帯だと m=ktai とかになりますが、今回はPC のみ考えます。

page_hoge_foo のパターンはページを表示する
do_hoge_foo のパターンはモデルに対して処理を行う

page_hoge_foo でモデルに対して処理を行うこともできるが
MVC の意味がないかも。

?m=pc&a=do_hoge_foo のURL を追加する

/openpne/webapp_ext/modules/pc/do 以下に
hoge_foo.php を作成
hoge_foo.php

class pc_do_hoge_foo extends OpenPNE_Action
{
    function execute($requests)
    {
    	// ここに処理を書く
    }
}

/openpne/webapp_ext/modules/pc/validate/do 以下に
hoge_foo.ini を作成
例えば ?m=pc&a=do_hoge_foo&id=10&no=20 のように id, no を GET で渡したい場合は

[id]
type = "int"
required = 1
[no]
type = "int"
required = 1

のように定義する。

こうしておくと do/hoge_foo.php 内で
$id = $requests["id"];
のようにバリデーションを通して値を取得できる。

?m=pc&a=page_hoge_foo のURL を追加する

/openpne/webapp_ext/modules/pc/page 以下に
hoge_foo.php を作成
hoge_foo.php

class pc_page_hoge_foo extends OpenPNE_Action
{
    function execute($requests)
    {
    	// ここに処理を書く
    }
}

/openpne/webapp_ext/modules/pc/validate/page 以下に
hoge_foo.ini を作成
中身は do_hoge_foo の場合と同じ。

その他

/openpne/webapp_ext/lib
クラスファイルなどを置きました

自分で作成クラスをインクルードしたいときは /openpne/webapp_ext/lib
からインクルードします。

OpenPNE 画像の保存、表示方法

2

OpenPNE で写真のアップロード機能を作成していて調べたことをまとめておきます。

画像を保存するテーブル c_image

OpenPNE では画像をDB に保存しています。保存するテーブル名は c_image です。
このテーブルにはプロフィール写真や日記の写真、スキンの画像などが保存されるようです。

CREATE TABLE c_image (
  c_image_id int(11) NOT NULL auto_increment,
  filename text NOT NULL,
  bin longblob NOT NULL,
  r_datetime datetime NOT NULL default '0000-00-00 00:00:00',
  `type` text,
  PRIMARY KEY  (c_image_id),
  KEY filename (filename(100))
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
filename
画像のファイル名、任意につけていいみたいですが、プロフィール写真だと
m_2_1188204858.jpg
という感じです。
最初の 「m 」はたぶんプロフィール写真を表す文字、
次の「2」はプロフィール写真のNo(2番目にアップした写真)
次の10桁の数字は多分 time() 関数で取得したアップロードした時間
bin
base64_encode した画像ファイルのバイナリデータ
type
画像のタイプ( jpg | gif | png )
r_datetime
登録日時

表示方法

c_image テーブルに格納した画像を表示するHTML
<img src="/img.php?filename=m_2_1188204858.jpg&w=180&h=180&m=pc">

Smarty のタグで書くと
<img src="({t_img_url filename=$pet.image1 w=180 h=180})">

filename に c_image.filename を指定して、
w, h に幅と高さの最大値を指定する。
幅と高さは最大値を超えると自動的にリサイズする。

その他

c_image に画像を保存しておくと管理画面からアップロードされた写真をすべて管理することができるので、SNS を運営する上で便利だと思います。

OpenPNE テンプレートのカスタマイズ

2

OpenPNE は Smarty を使用していますが、そのテンプレートを修正したい場合、直接オリジナルのテンプレートを編集するのではなくカスタマイズ用のテンプレートを作成して修正することができます。

ディレクトリは下記になります。
オリジナルのテンプレート
/openpne/webapp/modules/pc/templates/
カスタマイズ用のテンプレート
/openpne/webapp_ext/modules/pc/templates/

/openpne/webapp_ext/modules/pc/templates/ ディレクトリは最初からはないので作成します。
次にカスタマイズしたいテンプレートをオリジナルのテンプレートディレクトリからカスタマイズ用のディレクトリにコピーします。

次に /openpne/config.php の
define('USE_EXT_DIR', false);

define('USE_EXT_DIR', true)
に変更すれば、カスタマイズ用ディレクトリにテンプレートが存在すればそちらを優先して使用されます。

カスタマイズ失敗してもカスタマイズ用のテンプレートを削除すればオリジナルのテンプレートが使用されますので、便利ですね。
この /openpne/webapp_ext/ ディレクトリはテンプレート以外でも webapp ディレクトリのファイルを上書きできます。

Go to Top