Posts tagged Tab

WordPress 管理画面でウィジットをドラッグ&ドロップするとおかしくなるのを修正

2

WordPress の管理画面でダイナミックウィジットを編集する機能で、ウィジットをドラッグ&ドロップして順番を入れ替えることができます。しかし、ドロップする場所によっては下記画像のようになってしまいます。

管理画面のウィジット
(続きを読む…)

CakePHP の開発を簡単にする 5 つの Tips

1

“開発を便利にする5つのTips” フォーラム – CakePHP Users in Japan で紹介されていた記事です。

Make your life easier with these five CakePHP Quicktips ? Debuggable Ltd

1. prd という便利な関数を作成する

pr($someVar);
die;

というコードをよく書くなら prd という関数を作ってしまえば、もっと楽できますね。

function prd($var) {
    pr($var);
    die;
}

(続きを読む…)

OpenPNE 2.10 のメールサーバの設定

1

OpenPNE のインストール時にメールから日記の投稿などを受け付けるためにメールサーバの設定を行います。
OpenPNE のバージョン 2.10 からメールアドレスに新たに編集のアドレスが加わっていますが、ググッてみても 2.8 のころの形式の設定方法しか情報がないので書いておきます。
(続きを読む…)

WordPress の設定を使ってデータベースにアクセスする方法

8

WordPress をプラグインの作成やカスタマイズするときに WordPress のデータベースの設定を使用してアクセスする方法です。

WordPress では wpdb のオブジェクトが $wpdb というグローバル変数に入っています。この wpdb クラスを使用してデータベースにアクセスします。wpdb クラスは wp-includes/wp-db.php で定義されています。

SQL を発行する

$wpdb->query('SQL文');

(続きを読む…)

CakePHP1.2 安定版がもうすぐ出るようです

1

CakePHP 1.2 stable coming soon | The Bakery, Everything CakePHP : Articles

The CakePHP team is gearing up to finally push out a stable 1.2 release! If you are following the trac timeline you can see that everybody is putting in huge amounts of work to fix bugs and get everything stable.

(続きを読む…)

WordPress を高速化する5つの方法

17

WordPress を高速化する5つの方法です。

  1. テーマの効率化
  2. PHP の高速化
  3. ページキャッシュプラグインの使用
  4. MySQL クエリキャッシュ
  5. MySQL テーブル最適化

(続きを読む…)

CakePHP1.2 文字コードを EUC-JP に設定する

1

現在開発しているシステムが文字コードを EUC-JP で制作しなければいけないのですが、今まで CakePHP は UTF-8 でしか制作したことがなく、設定方法などメモしておきます。開発に使用しているのは CakePHP1.2 です。

データベースの文字コード

app/config/database.php

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '',
    'login' => 'user',
    'password' => 'password',
    'database' => 'database_name',
    'schema' => '',
    'prefix' => '',
    'encoding' => 'ujis'
);

EUC のときは encoding に ujis と設定します。
ちなみに
Shift-JIS のときは sjis
UTF-8 のときは utf8
とします。
これは MySQL の SET NAMES でそのまま使用されるためです。

システムの文字コード

CakePHP1.2 では下記のように設定します。
app/config/core.php
Configure::write('App.encoding', 'euc-jp');

CakePHP 1.1 の方法はちょっとコードを調べたのですが、 core.php などにも特に設定するところがなく分かりませんでした。分かる方いらっしゃったら教えてください。

CakePHP メール送信許可フラグによってメールを一斉送信するメールビヘイビア

2

Acts As Emailable | The Bakery, Everything CakePHP : Articles

メール送信許可フラグによってメールを一斉送信することができるメールビヘイビアが上記エントリで紹介されています。
ビヘイビアというのは今まで使ったことがなかったのですが、モデルに共通の振る舞いをさせるようなときに使う感じでしょうか。このメールビヘイビアはモデルにメールの一斉送信機能を付加します。

テーブル

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL default '',

  `emailable` tinyint(4) NOT NULL default '1',
  `email` text NOT NULL,
  PRIMARY KEY  (`id`)
)

emailable カラムは 0 or 1 の値で、1の場合はメール送信許可です。
email カラムはメールアドレスが入ります。

モデル

app/models/user.php

< ?php
class User extends AppModel {
     var $actsAs = array('emailable');
}
?>

モデルでメールビヘイビアを使うことを定義します。

ビヘイビア

Acts As Emailable | The Bakery, Everything CakePHP : Articles にメールビヘイビアのコードがあります。
これを app/models/behaviors/emailable.php として保存します。
ただし1点修正が必要でした。
322行目の
App::import('Component', 'EmailComponent');

App::import('Component', 'Email');
として保存してください。
Email コンポーネントが修正前のコードでは読み込めずにエラーになります。

メールテンプレート

< ?php
    echo "テストメッセージです。名前は".$username."です";
?>

保存先ですが、どこがいいのか悩みましたが今回は app/views/emails/test_template.php としました。
テンプレート内の変数はモデルのカラム名が使用できます。

メール送信

$email_options = array('from' => 'hoge@example.com', 'subject' => 'テストです');
$template = "views/emails/test_template.php";
$this->User->send_campaign_to_emailable($template, $email_options);

これでメール送信許可している(users.emailable=1)のユーザにメールが送信されます。

そのほかに以下のようなメソッドがあります。
send_campaign_to_all($template, $email_options)
登録されているユーザ全てにメールを送信します。

send_campaign_to_non_emailable($template, $email_options)
登録されているユーザでメール送信許可していないユーザにメールを送信します。

add_emailable($id)
ID で指定したユーザの emailable=1 にします。

remove_emailable($id)
ID で指定したユーザの emailable=0 にします。

デフォルトは mail 関数でメール送信しますが、SMTP を指定して送信することもできます。

まとめ

このメールビヘイビアを今回試すことによってビヘイビアの使い方、便利さが少し理解できました。まだビヘイビアを試されていない方は一度試して見てはいかがでしょうか?

.htaccess で error_reporting を設定するときの注意点

5

.htaccess で PHP が出力するエラー表示を制御するには E_ALL などの定数は使えないので、ビット値で指定する必要があります。

E_ALL & ~E_NOTICE を設定する場合
php.ini
error_reporting = E_ALL & ~E_NOTICE

php コード内
error_reporting(E_ALL ^ E_NOTICE);

.htaccess
php_value error_reporting 6135

error_reporting に設定する値は PHP: error_reporting – Manual を参照するといいでしょう。

定数
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR

ちなみに E_ALL & ~E_NOTICE の値が 6135 になる理由は E_ALL の値が 6143、E_NOTICE の値が 8 なので 6143-8=6135 になります。(または E_NOTICE と E_STRICT 以外の値を足した数が 6135 になります。

私は開発中は E_NOTICE も表示するようにしていますが、結構表示させない人が多いようで人のコードを修正するときなど Notice エラーが出て困ることがあります。E_NOTICE を表示するようにしておくと未定義の変数などバグの元になりやすいものを教えてくれるのでお勧めです。

また、開発終了して本番運用するときにはブラウザにエラーを出力しないように
error_reporting(0);
を設定しておくことを忘れずに!
その際も PHP のエラーはエラーログに記録されるようにしておかないのも忘れずに。

scriptaculous.js を使ってマトリックス状に配置した要素を並び替える

1

scriptaculous.js を使って並び替えを行う を応用して格子状に並んだ要素を並び替える例です。基本的な部分はリスト形式の並び替えと同じですので省略します。
最初にデモ、その後にコードを紹介します。

デモ


#sortarea { width: 350px; } #sortarea div { float: left; width: 100px; height: 70px; border: 1px solid #000; margin: 5px; text-align: center; padding-top: 30px; cursor: default; }

A1
A2
A3
A4
A5
A6
A7
A8
A9

ソートする要素

前回は li タグで要素を定義しましたが、今回は div タグで定義しました。
CSS で格子状に並ぶようにしています。

<style>
#sortarea {
width: 350px;
}

#sortarea div {
float: left;
width: 100px;
height: 70px;
border: 1px solid #000;
margin: 5px;
text-align: center;
padding-top: 30px;
cursor: default;
}
</style>

<div id="sortarea">
<div id="drag_1">A1</div>
<div id="drag_2">A2</div>
<div id="drag_3">A3</div>
<div id="drag_4">A4</div>
<div id="drag_5">A5</div>
<div id="drag_6">A6</div>
<div id="drag_7">A7</div>
<div id="drag_8">A8</div>
<div id="drag_9">A9</div>
</div>

ソートする JavaScript コード

Sortable.create の option に overlap:’horizontal’ を指定しなくても並び替えはできますが、少しぎこちない感じになりますので、指定しておいたほうがいいでしょう。

<script type="text/javascript" language="javascript">
// <![CDATA[
Sortable.create("sortarea",{
    tag:'div',overlap:'horizontal',constraint: false,
});
// ]]>
</script>
Go to Top