hiromasa.zone : o)

2007/4/30 Monday 投稿時の月齢:13.3  月名:待宵月  潮汐:大潮 Moon:13.3[待宵月]今日の心技体 : 好調期低調期好調期

PHP で遊ぼう(7) – if と 変数だけでプラグインをつくる このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 17:46

いやぁ、、ずいぶん間が空いてしまいました。 すいません。。 というわけで、前回。

PHP で遊ぼう(6) – if と 変数と

では今回の例題カードならべかえの3枚版を。 $center が真ん中です。 😛

ということで、if と変数をつかって2枚のカードのならべかえをやってみました。 if は式を評価して、プログラムを分岐させる構文でした。 比較演算子と呼ばれるのが、 == とか < とか > で、これは2項演算子といい、両辺に書いた2つの変数や数字を比較できます。

2項ということで、2枚のカード(変数)の比較は簡単ですが、これを3枚にしたら、、というのが最後に書いたことでした。 なんとやってくれた方が2名も!

PHPのお勉強: ifを使って3枚並び替え@naoki さん

PHP で遊ぼう(6) – if と 変数とにて、PHPで3枚の数字を並び替えについて問題があったので、やってみました。

雑念ベース ≫ PHP による並べ替え@よしともさん

ループを使うのが普通ですが、ここはあえて使わない方向で挑んで見ました。長ったらしいコードになってしまっていますが、これはいわゆるバブルソートですね。隣同士を比較して入れ替えていくというやつです。N個の場合の比較回数は N(N-1)/2 で、3(3-1)/2 = 6/2 = 3。なので3回分の if を書いています。

3つのカードが並ぶパターンを全て if で表現されているのが、naoki さん版。 一方、よしともさん版は、入れ替えをしたときに最大何回いれかえる必要があるかという観点でかかれています。

うーん、すばらしい。。 おそらくこの問題ではこの2種類の書き方に大きく別れるのではないかと思います。 ある程度一度に同時処理できる人間の考え方に近いのが naoki さん版(人間はこの if をいっきに処理できる)で、順次だけれど高速に処理できるコンピュータの特性を生かしたのがよしともさん版です。 ぜひ、みなさんもみてみてください。 🙂

というわけで、コンピュータ言語の比較の基本は2項です。 なにかとなにかが同じなのか、違うのか。 多いのか、少ないのか。 プログラムもなるべくこの形にもっていったほうが、分かりやすいし書きやすくなります。 複数の条件を比べる場合は if を 2つつかったり、 && (アンド)や || (オア)でつなげる必要があります。

ではカードでは”数字”を比べてみましたが、他のものは比べられるのか。。 変数には数字以外にも文字列をいれることができます。 ここからがスクリプト言語の恐ろしさです。

いままでのサンプルは毎回同じ答えがでるものでした。 画面からの入力とかをやっていないので、あたりまえなのですが、これじゃー面白くないってことで…。 画面からいれなくても変わるものということで、今回は”時間”をタネにしてみます。

$time = Date('H:i');

PHP の組み込み関数というのに、Date というのがあります。 とりあえず詳細はまた。 上記のようにすると $time という変数に「24時間表記で現在の時間」がたとえば、"17:01" とかという文字列が変数に格納されます。

じゃー、これを if で比較したらどうなるのか。 朝、昼、夜でためしに比較してみましょう。

  1.  <?php
  2.  $time = Date('H:i');
  3.  
  4.  if($time >= "05:00" && $time <"10:00") {
  5.   echo "朝だよ";
  6.  }
  7.  else if ($time >= "10:00" && $time <"18:00") {
  8.   echo "昼だよ";
  9.  }
  10.  else {
  11.   echo "夜だよ";
  12.  }
  13.  ?>

なんと恐ろしいことにうまく比較できてしまいました。

まず、&& はアンドを表す演算子で、その両方の条件がそろうことを意味します。範囲を指定したい場合、このような表現になります。(数学みたいに 100 < x < 200 とかできない)

今回の文字列の比較をすんなり受け入れられる方は、まったく問題ありません。 逆に、高級言語でプログラムを書かれる方には異常に見えるかもしれません。 詳しく調べていませんがPHP の場合、文字列通しの比較を行うとおそらく設定されている文字コード順で大小比較されます。 ということで、24時間制で表現された文字列の場合、上記の if でうまく比較できます。

これがスクリプト言語の「のり」ってやつですが、とりあえずそれっぽく書いてみると大抵うごきます。 どんどんやってみてください。 :-)

さてさて、正直こんなプログラム、動かしてもつまんないわけです。 でも、つかう場所によっては面白くなるかも...! というわけで、これを WordPress のプラグインにしてみましょう。 大量のデータは、プログラムに命を与えます。

ターゲットは、ブログのコメント欄。 ここって、時間だせますが、そのまんまだすと書き込んだ時間が赤裸々に。。 気になる方もいるでしょうから、これを上の if をつかって化かしてあげるプラグインにしてみます。

WordPress のプラグインの基本的な考え方は、のっとりです。 特に画面表示系ののっとりのことを、filtter hook といいますが、簡単に言えば表示する文字列を、プラグインでうばって置き換えてしまう仕掛けです。

詳しくは、

WordPress プラグイン作成時のノウハウ - 前編 -

で、今回奪い取りたいのはコメントの時間欄。 これは、get_comment_time というフィルターでうばいとれます。 奪う、には add_filter という WP 組み込み関数を使い、処理をする自分の「関数」を指定します。

  1.  <?php
  2.  /*
  3.  Plugin Name: wp-ohayo
  4.  Plugin URI: http://wppluginsj.sourceforge.jp/wp-ohayo/
  5.  Description: converts the time of the comment into the image
  6.  Author: hiromasa
  7.  Version: 0.01
  8.  Author URI: http://zone.maple4ever.net/blog/
  9.  */
  10.  function wpohayo($time) {
  11.  
  12.   //WordPress の変数からそれぞれのコメント時間を変数 $time に取得
  13.   global $comment;
  14.   $time = mysql2date('H:i', $comment->comment_date);
  15.  
  16.   //$time の時間によって、$message にメッセージを作成
  17.   if($time >= "05:00" && $time <"10:00") {
  18.   $message = "朝だよ";
  19.   }
  20.   else if ($time >= "10:00" && $time <"17:15") {
  21.   $message = "昼だよ";
  22.   }
  23.   else {
  24.   $message = "夜だよ";
  25.   }
  26.  
  27.   //作成した $message を WordPress に返して文字を置き換える
  28.   return $message;
  29.  
  30.  }
  31.  
  32.  add_filter('get_comment_time', 'wpohayo');
  33.  ?>

一番下の行に、add_filter がみえ、get_comment_time をうばい、wpohayo という関数を指定しているのが分かります。 で、その上にあるのが実際に処理をする wpohayo 関数で先ほどの朝、昼、夜分岐が見えます。 また、コメント時刻を取得するのに WP の変数を読んでいるのが分かります。(この辺はちょっとノウハウがいりますね。 似たような処理をしているプラグインをみるのが早道です)

最初の、プログラムでは echo で画面に表示していましたが、WP のプラグインの場合、表示はせずに表示させたい文字列を return してあげます。 こうすることで、WP がその文字を表示してくれる仕掛けになっています。

wp-ohayo

というわけで、かなり駆け足でしたが if と変数だけでつくる、WordPress プラグインでした。

簡単なプログラムもデータによっては結構楽しくなります。 というわけで次のエントリでこのプラグインの 1.00 の紹介を。 :-)

6 Comments

Trackback

  1. From: hiromasa.zone :o) - 2007/4/30 Monday Nighttime (Trackback)

    wp-ohayo 1.00 リリース…

    連動企画? というわけで、プログラムの解説しながらプラグインをつくってみましたのでリリースします。

    WordPress Plugins/JSeries ≫ wp- (more…)

  2. From: WordPress情報関連サイト一覧 - 2008/5/5 Monday Daytime (Pingback)

    […] hiromasa.zone o) ≫ PHP で遊ぼう(7) – if と 変数だけでプラグインをつくる […]

Comment

  1. From: naoki - 2007/5/5 Saturday Daytime (Comment)

    PHPで遊ぼうの続編ありがとうございます。
    しかもWPのプラグインまで扱ってもらえて、とてもうれしかったです。
    比較だけでいろいろなプログラムが組めそうですね。
    僕もカテゴリーページでエントリー一覧をAmazonにあるようなテーブルタグにしたいなーって思って、ifを使ってみました。こういうのができると結構面白いですね。なんだかできた時達成感があります:lol:

    そして最近、WPのプラグインを眺めることが多いのですが、今回のエントリーの説明と似ている箇所もあってとても勉強になりました。また、真似させていただいて自分でもオリジナルのプラグインを作って見たいと思います。

    あと、恥ずかしながら基本的ところで質問があるのですが、wp-ohayoプラグインの中の
    $time = mysql2date(‘H:i’, $comment->comment_date);
    「->」この記述って何の意味なんでしょうか?
    Googleなどの検索エンジンではこの文字は検索できないんで、ちょっと意味がわからず困っていました。教えもらってばかりで恐縮なのですが、教えていただければありがたいです。

    あと、ひろまささんの
    >大量のデータは、プログラムに命を与えます。
    これ、かっこいい言葉ですね~。僕もいつかこんな風に言ってみたいです:oops:

  2. From: ひろまさ - 2007/5/5 Saturday Nighttime (Comment)

    naoki さん、こんにちは。 😀 いやー、遅れてしまって申し訳ないです。。

    いろいろいじっているとおもしろいですよね~。 時間がかかってもうまくできたときの達成感は格別なものです。

    WP のプラグインは、応用はあるにせよほとんどこの形なので見比べていけばきっとすぐなんでもできるようになると思います!

    $comment->comment_date ですが、ちょっと難しいですね。 オブジェクト指向のクラスの表記なのですが、 $comment という変数がさらに comment_date という変数をもっているようなイメージでみていただければ良いと思います。

    $comment (コメント)にはいろいろ属性があって、たとえば内容とか時間(comment_date)とか投稿者(comment_author)とか。 その親玉が $comment で -> の後ろがその属性(メンバ)たちみたいな感じです。 とりだすときに、-> がつくだけで、あとはふつうの変数と同じ扱いで使えます。

    WP の中のファイルで同じようにいろいろつかわれていますので、この辺はぱくってくれば大丈夫だと思います。 :mrgreen:

    >僕もいつかこんな風に言ってみたいです 😳

    あはは、すいません。。 中身の割にはかっこよすぎました。。 😳

  3. From: naoki - 2007/5/5 Saturday Nighttime (Comment)

    ひろまささんこんばんは。早速のお返事ありがとうございます。

    $comment->comment_date
    ですが、なるほど!そういうことだったんですね!WPのプラグインにもバンバン入っているのでこれが何かわからず困ってたんですが、これで一歩進めたような気がします。(あくまで気がするですが・・:cry:)
    わかりやすい解説ありがとうございました。

    >>僕もいつかこんな風に言ってみたいです 😳
    >あはは、すいません。。 中身の割にはかっこよすぎました。。 😳
    いえいえ、本当にとても良かったですよ。「ああ、プログラムを作り上げるのってこういうことなのかぁ」って思いました。

    何度も質問などに答えていただきありがとうございました。
    これからもひろまささんの記事楽しんで読ませていただきます。
    それでは。

  4. From: ひろまさ - 2007/5/6 Sunday Nighttime (Comment)

    naoki さん、こんにちは。

    どうもありがとうございます。 なにかあったらまたコメントいただければ! プログラムの世界楽しんでいただければこれ以上はないです。

    今度ともよろしくお願いいたします。 😮


このサイトはコンテンツをフリーズしました。トラックバック・コメントは閉じられています。

新しいサイトは、

hiromasa.another :o)

です。 :-)

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

30 queries. 0.081 seconds.

このページの先頭へ