« 2006年11月 | トップページ | 2007年01月 »

・[2006年12月06日]Yahoo! UIライブラリを使ってみよう
・[2006年12月05日]WindowsでPEARを自動インストールしてみよう
・[2006年12月05日]複数ファイルを圧縮してダウンロードしよう
・[2006年12月04日]jQueryを使ってみよう

2006年12月06日

Yahoo! UIライブラリを使ってみよう

javascriptの3大フレームワーク(私が勝手に思ってるだけ)といえば、「prototype.js」「jQuery」「Yahoo! UIライブラリ」です。
今までにprototype.jsやjQueryを紹介してきましたので、今日はYahoo! UIライブラリを紹介します。

まずは以下の本家サイトからYahoo! UIライブラリをダウンロードしてください。
Yahoo! UI Library
*「Download YUI」ボタンをクリックするとダウンロードできます。

ダウンロードしたファイルを解凍すると、以下のディレクトリ構成になっていると思います。(var.0.12.0)

[yui]
 └─[ build]
 └─[ docs]
 └─[ examples]

[build]の中にjsファイルあります。
[docs]はドキュメント
[examples]はサンプルです。

今回は、Ajax(サーバとの通信)を行いますので、必要なファイルのみ(以下の2つのファイル)を適当なディレクトリに入れてください。

build/yahoo/yahoo.js
build/connection/connection.js

説明しやすいように今回は[home]ディレクトリの中に入れたと仮定します。

[home]ディレクトリの中に「sample.txt」を準備してください。
sample.txtにはUTF-8で「初めてのYahoo! UIライブラリ」など、自由にテキストを入れてください。
次に、index.htmlを作ります。最終的に以下のような構成になります。

[home]
 └─ index.html
 └─ sample.txt
 └─ yahoo.js
 └─ connection.js

早速試してみましょう。
index.htmlをテキストエディタで開いて「yahoo.js」と「connection.js」をインクルードさせます。
<script type="text/javascript" src="yahoo.js"></script>
<script type="text/javascript" src="connection.js"></script>

これで、Yahoo! UIライブラリを使うことができます。

次に、簡単なボタンと表示用のタグを準備します。以下のように「button」と「div」を記述してください。

<input type="button" value="sample.txtを読み込む" onClick="sampleAjax('sample.txt');">
<input type="button" value="no.txtを読み込む(存在しないファイル)" onClick="sampleAjax('no.txt');">
<p id="message"></p>

「sample.txtを読み込む」ボタンをクリックすると、sample.txtのテキストがdivタブの中に挿入されます。
「no.txtを読み込む」ボタンをクリックすると、no.txtは存在しないのでエラーメッセージをdivタブの中に挿入させます。

準備ができたので、Ajaxを作って行きます。
Yahoo! UIライブラリでAjaxを行うには以下のメソッドを使います。

YAHOO.util.Connect.asyncRequest(method, url, callback, arg)
method:GETかPOSTを指定
url:読み込むURLを指定
callback:コールバック
arg:POST指定した場合のパラメータ

実際に作ってみながら説明します。以下のjavascriptを追加してください。

function sampleAjax(url) {
  YAHOO.util.Connect.asyncRequest('get', url, callback, null);
}

第一引数には「get」を、第二引数には読み込む「url」を指定します。
第四引数には今回は「get」なので「null」を入れます。
第三引数の「callback」は個別に指定します。以下のスクリプトを追加してください。
function sampleAjax(url) {
  var callback = {
    success: ajaxReturn,
    failure: ajaxError
  }

  YAHOO.util.Connect.asyncRequest('get', url, callback, null);
}


指定URLを読み込んだ後に、「callback」を呼び出します。
「success」は「url」の読込に成功した場合の関数を定義します。
「failure」は「url」読込に失敗した場合の関数を定義します。
最後に成功時と失敗時の関数を記述します。
function sampleAjax(url) {
  var callback = {
    success: ajaxReturn,
    failure: ajaxError
  }
  
  function ajaxReturn(ajaxObj) {
    document.getElementById('message').innerHTML = ajaxObj.responseText;
  }
  function ajaxError(ajaxObj) {
    document.getElementById('message').innerHTML = ajaxObj.status +':' + ajaxObj.statusText;
  }

  YAHOO.util.Connect.asyncRequest('get', url, callback, null);
}


これで完成しました。実際に動かしてみてください。
そういえば、ajaxReturnとajaxErrorの引数に「request」と言う変数を定義したら、動きませんでした。
「request」変数はYahoo! UIライブラリ専用の予約語みたいなのかなぁ?

上記の例で、「ajaxObj」オブジェクトには以下のようなプロパティがあります。

成功の場合
tId:トランザクションID(呼び出す度に+1されます)
同じユーザーのみが対象なので、ページをリロードしたり別ユーザーがアクセスした場合は0スタートです。
status:HTTPのステータスコード(200とか)
statusText:HTTPのステータスメッセージ(OKとか)
responseText:取得したテキスト
responseXML:取得したテキストをDOM documentオブジェクトとして取得する
argument:callbackで指定したargumentプロパティで定義した引数
allResponseHeaders:全てのHTTPヘッダを取得

失敗の場合
tId:トランザクションID(呼び出す度に+1されます)
同じユーザーのみが対象なので、ページをリロードしたり別ユーザーがアクセスした場合は0スタートです。
status:HTTPのステータスコード(404とか)
statusText:HTTPのステータスメッセージ(Not Foundとか)
argument:callbackで指定したargumentプロパティで定義した引数

実際に使ってみた感想は、他のフレームワークよりもちょっと難しいけど細かいとこまで定義できるのはすばらしいです。(失敗時の処理とか)

他にも沢山の機能があるので、機会があったら勉強してみようかと思ってます。

・関連記事
Yahoo! UIのイベントリスナー(addListener)を使ってみよう
prototype.jsの使い方
jQueryを使ってみよう
HTML_AJAXを使ってみよう

| | コメント (0) | トラックバック (0)

2006年12月05日

WindowsでPEARを自動インストールしてみよう

以前に「レンタルサーバーでPEARを使う方法」を紹介しました。PEARのサイトからファイルをダウンロードして手動でセットアップする方法なのですがPEAR::HTTP_Download等は依存ファイルが多く手動でセットアップするのも面倒です。
そこで私はWindowsに自動インストールして、インストールされたファイルをコピペしてレンタルサーバー等で使っています。
今回は、PEARの自動インストールを紹介します。

1.PEARのインストールプログラムを起動させる
2.コマンドプロンプトが立ち上がり必要な情報を入力する
3.インストールが完了したらコマンドプロンプトから必要なパッケージをインストールする

PHPは「C:\php」にインストールされていると過程して話を進めます。
はじめにgo-pear.batファイルが有ることを確認します。

C:\php\go-pear.bat

もしgo-pear.batがない場合は、PHP本家のサイトからインストールされているPHPバージョンに合わせて、PHP 4.x.x zip package(xはバージョン)をダウンロードします。解凍したファイルの中から「go-pear.bat」ファイルと「PEAR」ディレクトリを「C:\php」ディレクトリに移動します。

go-pear.batファイルをダブルクリックしてください。
コマンドプロンプトが立ち上がって以下のメッセージが表示されるはずですので、[Enter]を押します。

Welcome to go-pear!

Go-pear will install the 'pear' command and all the files needed by
it. This command is your tool for PEAR installation and maintenance.

Go-pear also lets you download and install the PEAR packages bundled
with PHP: DB, Net_Socket, Net_SMTP, Mail, XML_Parser, PHPUnit-0.6.2.

If you wish to abort, press Control-C now, or press Enter to continue:


次に以下のメッセージが表示されますので、ここでも[Enter]を押します。
HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none::

ここでも[Enter]を押します。
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.

1. Installation prefix : C:\PHP4
2. Binaries directory : $prefix
3. PHP code directory ($php_dir) : $prefix\pear
4. Documentation base directory : $php_dir\docs
5. Data base directory : $php_dir\data
6. Tests base directory : $php_dir\tests
7. php.exe path : C:\PHP4\cli\php.exe

1-7, 'all' or Enter to continue:


インストールするかどうかを聞かれるので「y」を押して、[Enter]を押します。
The following PEAR packages are bundled with PHP: DB, Net_Socket, Net_SMTP,
Mail, XML_Parser, PHPUnit-0.6.2.
Would you like to install these as well? [Y/n] :


The following PEAR packages are bundled with PHP: DB, Net_Socket, Net_SMTP,
Mail, XML_Parser, PHPUnit-0.6.2.
Would you like to install these as well? [Y/n] : y

基本的なライブラリがインストールされます。正常にインストールされると「pear.bat」が生成されます。
C:\php\pear.bat

インストールが完了すると、下記のメッセージが表示されるので何かキーを押してコマンドプロンプトを閉じます。
続行するには何かキーを押してください . . .

PHPのモジュール等で正常に動作しないモジュールがある場合、インストールに失敗するようです。
(Oracleがインストールされていないのに、php_oracle.dllが有効になっている場合など)
その場合は、php.iniを変更してモジュールを無効にして再挑戦してみてください。

では、コマンドプロンプトからPEARをインストールしてみましょう。
コマンドプロンプトを立ち上げて、以下のコマンドを実行してみてください。

C:\php\pear

以下のメッセージが表示されればOKです。
Usage: pear [options] command [command-options]
Type "pear help options" to list all options.
Type "pear help " to get the help for the specified command.
Commands:
build Build an Extension From C Source
bundle Unpacks a Pecl Package

省略

upgrade-all Upgrade All Packages

試しにPEAR::HTTP_Downloadをインストールしてみましょう。
以下のコマンドでインストールできます。
C:\php\pear install HTTP_Download

正式リリースされていないパッケージをインストールしたい場合は、パッケージ名の後ろに「-beta」か「-alpha」を付けます。
C:\php\pear install HTTP_Download-beta

C:\php\pear install HTTP_Download-alpha

依存ファイルもまとめてインストールしたい場合は「-a」を指定します。
C:\php\pear install -a HTTP_Download

依存ファイルの中に安定版じゃないパッケージが含まれている場合、インストールが出来ないので「-beta」か「-alpha」を付けます。
C:\php\pear install -a HTTP_Download-beta

C:\php\pear install -a HTTP_Download-alpha

インストール済のパッケージを確認したい場合は
C:\php\pear list

インストール可能なパッケージを確認したい場合は
C:\php\pear list-all

パッケージを検索したい場合は以下のコマンドを実行します。(下記の例は「excel」のつくパッケージを検索)
C:\php\pear search excel

下記のようにパッケージを直接検索することも可能です。
C:\php\pear search HTTP_Download

パッケージを最新版にアップグレードするには以下のコマンドを実行します。(下記の例はHTTP_Downloadをアップグレード)
C:\php\pear upgrade HTTP_Download

全てのパッケージをアップグレードする場合は以下のコマンドを実行します。
C:\php\pear upgrade-all

pearコマンドのヘルプを参照するには
C:\php\pear help

コマンドごとのヘルプを参照するには(下記はinstallコマンドのヘルプを参照します)
C:\php\pear help install

この他にも沢山のコマンドがあります。詳細はPEARサイトをご覧ください。

インストールされたファイルは

C:\php\PEAR\
の中に格納されています。レンタルサーバー等で使用する場合は必要なファイルをコピペして使ってください。

関連記事
レンタルサーバーでPEARをインストールする方法
SSHやTelnetが使えずにPEARがインストールできない場合にインストールする方法を紹介しています。

| | コメント (0) | トラックバック (0)

複数ファイルを圧縮してダウンロードしよう

なんとなくPEARの本を眺めていたら、「特定ファイルをアーカイブする」という項目が目に入ってきました。
その記事を読んでみると
「条件によって、異なる組み合わせのファイルをまとめてダウンロードできます」
と書いてあります。
そんな便利な物まであるのかと関心しつつ、データのバックアップや必要なデータを取り出す時に使えそうなので早速試してみました。
今日は、PEAR::HTTP_Downloadライブラリを紹介しましす。

・PEAR::HTTP_Downloadダウンロード
PEAR::HTTP_Download
・インストールに関しては下記をご覧下さい
レンタルサーバーでPEARを使う方法

レンタルサーバーご利用の方は、PEAR::HTTP_Downloadは依存ファイルが多いのでご注意ください。

今回のサンプルでは以下のディレクトリ構成を想像してください。

[home]
 └─ index.php
 └─ download.php
 │
 └─[ sample]

[home]ディレクトリの中に全てのファイルが入っています。
index.phpは単純なHTMLで「download.php」にリンクを張ります。
download.phpは圧縮したファイルをダウンロードするプログラムです。
[sample]ディレクトリの中に圧縮させたいファイルが入っています。

index.phpを作ります。
単純なHTMLを作って以下のようなリンクを作ってください。

<a href="download.php">圧縮ファイルをダウンロードする</a>

次に、download.phpを作ります。
まずはHTTP_Download.phpをインクルードさせます。

require_once('HTTP/Download.php');

次に以下の1行を追加します。

HTTP_Download::sendArchive("download.zip", array('./sample/'), HTTP_DOWNLOAD_ZIP);

これでプロうグラム完了です。index.phpからリンクをクリックすると[sample]ディレクトリが圧縮されてダウンロードされると思います。
require_once('HTTP/Download.php');
HTTP_Download::sendArchive("download.zip", array('./sample/'), HTTP_DOWNLOAD_ZIP);

HTTP_Download::sendArchiveの引数の意味は以下のようになります。

HTTP_Download::sendArchive($name, $file, $type, $add, $del);
$name:圧縮ファイル名
$file:圧縮するファイルパス
(配列かスペース区切りのテキスト)
$type:圧縮フォーマット(zipとかtarとか 下記参照)
$add:$fileの前に追加するディレクトリ(任意)
$del:$fileから削除するパス(任意)

タイプの種類は

HTTP_DOWNLOAD_ZIP: .zip
HTTP_DOWNLOAD_TAR: .tar
HTTP_DOWNLOAD_TGZ: .gz
HTTP_DOWNLOAD_BZ2: .bz2

などがあります。

第4引数の$addについては、
例えば「/sample」を「/download/sample」のように階層を増やしたい場合などに使います。
使用例:

HTTP_Download::sendArchive("download.zip", array('./sample/'), HTTP_DOWNLOAD_ZIP, './download/');

第5引数の$delは
「/sample/html/」の「/sample/」部分を省きたい場合に使います。

HTTP_Download::sendArchive("download.zip", array('./sample/'), HTTP_DOWNLOAD_ZIP, '', './sample/');

こう記述すると解凍した際に、sampleディレクトリはなくなっています。

第4引数と第5引数は必須ではなく、任意で付けてください。

PEAR::HTTP_Downloadには他にもいろんな機能があります。
PDFにリンクを張るとブラウザ内にPDFが表示されますが、PDFを強制的にダウンロードさせることもできます。

$param = array(
     "file" => "./sample.pdf",
     "contenttype" => "application/pdf",
     "contentdisposition" => array(HTTP_DOWNLOAD_ATTACHMENT, "download.pdf")
    );

HTTP_Download::staticSend($param);


パラメータを連想配列に入れて、HTTP_Download::staticSendメソッドにセットしています。
これだけでPDFをダウンロードできます。(自分でheader書いたほうが早い気もしますが、、、^^;)
gifやjpegもダウンロードすることができます。

更に、以下のように変数に格納したデータを直接(動的に)ダウンロードさせることもできます。

$param = array(
     "data" => "ファイルのダウンロードテスト\nテキストファイル",
     "contenttype" => "plain/text",
     "contentdisposition" => array(HTTP_DOWNLOAD_ATTACHMENT, "download.txt")
    );

HTTP_Download::staticSend($param);

パラメータには以下のような種類があります。

*以下のいずれか1つを選びます。(必須)
file:ダウンロードするファイルのパス
data:ダウンロードする生データ(変数等)
resource:ダウンロードするデータのリソース

*以下はオプションです(任意)
cache:ユーザーにデータをキャッシュさせるか
contenttype:コンテンツタイプの指定
contentdisposition:Content-Dispositionを指定

オプションは他にもありますので興味のある方は調べてみてください。

圧縮ファイルをダウンロードさせて、Windows用の色々な解凍ソフトを試してみたのですが、解凍ソフトによってはうまくいかないことがあります。実務で使う際には十分注意してください。
解凍がうまくいっても、ファイルの[プロパティ]→[概要]が表示されません。(たぶんデータがないのかな)
データ自体は特に問題ないのですが、ちょっと気になります。今後の改善に期待してます。

追記:
HTTP_DOWNLOADよりも便利な圧縮プログラムがありました。詳細は「PEARを使って、圧縮や解凍をやってみよう」をご覧ください。

PEAR::HTTP_Downloadのご紹介にあたり下記の「PEAR入門 PHP標準ライブラリを極める!」を参考にさせて頂きました。
PEARのインストール方法や基本的なPEARの使い方について書かれています。細かい部分まで記述してありますので参考になると思います。
Product image for ASIN: 4798109592PEAR入門 PHP標準ライブラリを極める!

| | コメント (0) | トラックバック (0)

2006年12月04日

jQueryを使ってみよう

prototype.jsを筆頭に沢山のAjaxフレームワークが開発されてきました。
これらのフレームワークは開発コストが大幅に削減されますので非常に助かります。
今日、紹介するjQueryはデザイナーさんに人気があるようなので、プログラマーの私は全く手を付けてませんでした。しかし、あるきっかけ(仕事です、、、)で使うことになり勉強してみたのですが、あまりの便利さにどっぷりハマっちゃいました^^;
「なるほど、デザイナーさんに支持されるわけだ、、、」
ということで、今日はjQueryの基本を紹介します。

今回の筆記で以下のサイトを参考にさせて頂きました。
Ajaxの最新レポートBlog

まずは、下記のサイトからjQueryをダウンロードしてください。
jQuery本家(英語)
*「Download jQuery」リンクをクリックするとダウンロードできます。

ダウンロードしたjQueryファイルを適当なディレクトリに入れます。
今回の説明ように[home]ディレクトリに[js]ディレクトリを作成してその中にjQueryを入れます。
更に[home]ディレクトリ直下に[index.html]を作ります。
最終的に以下のような構成になると思います。

[home]
 └─ index.html
 │
 └─[ js]
  └─ jquery.js

早速、jQueryを使ってみましょう。
[index.html]をテキストエディタで開いて、HTMLを適当に書いて行きます。
headタグ内にjquery.jsを読み込ませます。

<script src="./js/jquery.js" type="text/javascript"></script>

次にbodyタグ内にbuttonと空っぽのpタグを記述します。pタグにはid属性「message」を付けます。

<input type="button" value="jQueryテスト">
<p id="message"></p>

buttonタグを以下のように変更します。

<input type="button" value="jQueryテスト" onClick="$('#message').html('メッセージ');">

index.htmlをプレビューして、設置したボタンをクリックするとpタグの中に「メッセージ」というテキストが入ると思います。

jQueryでは、「$」を頭に付けて様々な処理を行います。
$後ろを()で囲んで、その中にid名やname・classの名前を入れます。
上記の例では、$('#message')はpタグのid="message"が対象になります。
class="message"であれば、

$('.message')

と記述します。
つまり、CSSと同じ記述方法でjavascriptを操作できるのです。
上記の例では、もちろん
$('p#message').html('メッセージ')

でも可能です。

.html()は、指定のタグ内のテキストを変更します。

$('#message').html('メッセージ')

上記の例では、「id="message"」のタグに「メッセージ」というテキストを書換なさいという意味になります。

次にAjaxを使ってみましょう。
[home]ディレクトリ内に「message.txt」を準備して、「初めてのjQuery!」等自由に入れてください。
index.html内に以下のスクリプトを記述します。

<input type="button" value="jQueryのAjax" onClick="$('#message').load('message.txt');">

message.txt内に書かれたテキストがpタグ内に表示されると思います。
.load()は指定URLからテキストを取り出して、指定のタグ内のテキストを書換ます。

今度はCSSを変更してみましょう。

$('#message').css('font-size', '20px')
このように第一引数にプロパティ、第二引数に値をセットするとCSSを変更できます。

更に、

$('body').css('background-color', '#CCCC33')

とすることで、bodyタグの背景色も変更することができます。

最後にAjaxで外部ファイルから取り出したテキストをHTMLにセットするのではなくて、PHPやCGIに値(postやget)を渡したり、javascriptの変数に格納して自由に扱う方法を紹介します。
index.html内のheadタグ内に以下のスクリプトを記述します。

<script type="text/javascript">
<!--
function jQueryAjax() {
  $.get('ajax_get.php', {message: '初めてのjQuery1', id: '104'}, jQueryRequest);
  $.post('ajax_post.php', {message: '初めてのjQuery2', id: '113'}, jQueryRequest);
}

function jQueryRequest(message, status) {
  alert(message + "\n" + "status:" + status);
}

//-->
</script>

4行目の

$.get('ajax_get.php', {message: '初めてのjQuery1', id: '104'}, jQueryRequest);

$.get()でフォームのGETを使えます。
第一引数に「URL」を指定して、
第二引数に「値」を指定
第三引数にはコールバックを指定します。
上記の例では、message「初めてのjQuery1」・id「104」という値を「ajax_get.php」にGETで渡しています。
「ajax_get.php」ファイルは、$_GET['message']と$_GET['id']でそれぞれの値を受け取れます。
コールバックは、URLを読み込んだ後に処理を行う関数名を指定します。

$.post('ajax_post.php', {message: '初めてのjQuery2', id: '113'}, jQueryRequest);
$.get()を$.post()に変えただけで、引数の意味は同じです。
function jQueryRequest(message, status) {
  alert(message + "\n" + "status:" + status);
}
これはコールバック(URLを読み込んだ後の処理)です。
第一引数にはURLで取得したテキストが入ります。
第二引数にはURLのステータスが入ります。
ステータスには「success」か「error」のどちらか入ります。
success:正常に処理された
error:処理中にエラーが発生した
指定したURLが存在しなかった場合などは、「error」が表示されます。

次にbodyタグ内に

<input type="button" value="messageをalertで出力" onClick="jQueryAjax();">

と記述します。
ボタンをクリックすると、GETから取得したテキストとPOSTから取得したテキストがalert()で表示されると思います。

ここで紹介したのはjQueryのほんの一部で、もっと沢山の機能があります。
また、勉強したら他の機能も紹介しようと思います。

・関連記事
prototype.jsの使い方
Yahoo! UIライブラリを使ってみよう
HTML_AJAXを使ってみよう

| | コメント (0) | トラックバック (1)