PDFファイルを生成するためのPHPライブラリ「TCPDF」

昨年末にWordPressの投稿や固定ページをPDF形式でダウンロード出来るようにするプラグイン、「POST2PDF Converter」をリリースしたところ、予想外に反響があった。

そもそも、同様の機能を持つプラグインは既に複数存在しており、「POST2PDF Converter」は、特に目新しいプラグインではないのであるが・・・。

投稿や固定ページをPDFへ変換するプラグインのうち、人気のものは外部のオンラインサービスを利用してPDFファイルの変換している。

例えば、「Print Friendly and PDF Button」は、「printfriendly」と言うサービスを利用してPDFに変換している。

また、「PDF24 Article To PDF」は、「PDF24」というサービスを利用しており、「PDF & Print Button Joliprint」は、「joliprint」を利用している。

これらのサービスは、PDF変換以外の機能も提供しているケースが多く、概ね高機能である。

対して「POST2PDF Converter」は、「TCPDF」というオープンソースのPHPライブラリを利用しており、外部サービスに依存せず、サーバー上で変換を行う。

もっとも、「TCPDF」を利用したプラグインは、以前から他にも存在しており、この点でも「POST2PDF Converter」が特に目新しいものでは無いのであるが・・・。

どちらかと言えば、「TCPDF」を利用したプラグインは、WordPressのプラグインの中ではマイナーな部類になるが、それは「TCPDF」が機能的に劣ると言うことではなく、UTF-8のWordPressコンテンツとも基本的に相性が良い。

「TCPDF」は、イタリア人のNicola Asuni氏(Tecnick.com S.r.l)によって開発されたPHPライブラリであり、「FPDF」の派生である。

このライブラリを使用するには、PHP 5が必要であるが、PHP 4用のパッケージも用意されている。

PHPのライブラリであるが故に、WordPressとの相性も良く、簡単な記述でDBからHTML形式のコンテンツ取得し、それを「TCPDF」に渡してPDF形式に変換することが出来る。

また、グラフやQRコードなどのバーコードの描画も可能であり、工夫次第で、かなり凝ったPDFを生成できるようになっている。

APIは単純とは言えないが、僅かなコードの追加でHTMLをPDFに変換するための処理を記述できる。
WordPressのようにコンテンツをHTML形式で取得し易いシステムであれば、導入に苦はないはずである。

PDFへの変換処理に関しては「TCPDF Examples」でサンプルが用意されているので、これを真似て書くと手っ取り早いだろう。

少し版は古いが「MONZEN.ORG」で日本語ドキュメントが用意されているので、これも参考になる。

ディレクトリパス、フォント、フォントサイズと言った設定パラメーターは「/config/tcpdf_config.php」で定数として設定する形になっており、必要に応じてこれを編集する。

「/config/lang」ディレクトリには、各言語用の設定ファイルが格納されている。

バージョン5.9.145からは日本語用の設定ファイル「jpn.php」が同行されているので、これを使えば良いが、設定ファイルの記述自体は単純であり、足りない言語の設定ファイルも簡単に自作することが出来る。

$l['a_meta_charset'] で文字コード、$l['a_meta_dir']で記述方向(左から右ならltr、右から左ならrtl)、$l['a_meta_language']で言語コード定義する。

そして、$l['w_page']では、「page」の訳を定義する。

下記は、UTF-8、日本語の場合の記述例である。

// Japanese

global $l;
$l = Array();

// PAGE META DESCRIPTORS --------------------------------------

$l['a_meta_charset'] = 'UTF-8';
$l['a_meta_dir'] = 'ltr';
$l['a_meta_language'] = 'ja';

// TRANSLATIONS --------------------------------------
$l['w_page'] = 'ページ';

//============================================================+
// END OF FILE
//============================================================+

この設定ファイルは、最初にrequire_once()で読みこめば良い。

更にもう1つ、言語によって変更すべき要素があり、それがフォントである。

フォントは、setHeaderFont、setFooterFont、SetFont、SetDefaultMonospacedFontメソッドで指定する。

なお、SetDefaultMonospacedFontでは、プロポーショナルフォントを指定することは出来ず、等幅フォントを指定する必要がある。

標準の日本語フォントは、

  • cid0jp(ArialUnicodeMS)
  • kozgopromedium(Kozuka Gothic Pro)
  • kozminproregular(Kozuka Mincho Pro)

の3つであるが、残念ながら文字化け等が発生するケースがある。

場合によっては、オープンソースのTrueType日本語フォントなどをTCPDF用に変換して、それを使った方が良いかもしれない。

バージョン5.9.123からは、TrueTypeフォントをTCPDF用に変換するためのメソッド、addTTFfont()が追加されたので、フォントの変換の際にはこれを利用する。

また、5.9.122以前に同梱されていたツールを使っても良い。

なお、このサイトでもオープンソースのIPAフォントと梅フォントをTCPDF用に変換したものを公開している。

TCPDFは、HTMLタグを解釈し、タグに従ってレイアウトを行った上でPDFに変換するが、全てのタグや属性を正しく解釈できる訳ではない。

また、通常ウェブサイトは、別途CSSを読み込んでレイアウトを行なっているが、このCSSがPDFに反映される訳でもない。(あくまでHTMLのみ解釈する。)

そのため、生成したPDFは、実際のウェブサイトとレイアウトが異なってしまう場合が多い。

必要であれば、HTMLにstyle属性を付加するなどして、微調整する必要がある。

PDFに変換される事を意識してHTMLを書くのも良いし、HTMLをそのままTCPDFに渡すのではなく、その前の段階で、HTMLをTCPDFに最適化させる処理を入れても良い。

拘れば、ここが最も面倒な作業になるだろう。

Posted in PHP, WordPress, ネット・PC | Tagged , , | Leave a comment

Disqus Comment System for EZ zenback Ver. 2.70 modified 2.0 リリース

「Disqus Comment System for EZ zenback Ver. 2.70 modified 2.0」を公開した。

Ver.2.70 for EZ zenback modified 2.0 2012/01/28

最新の「Disqus Comment System for EZ zenback」をダウンロード

このバージョンは、リリース予定の「EZ zenback」(バージョン1.5.2を予定)に対応したバージョンであり、「EZ zenback」のユーザーは、事前にこのバージョンにアップデートして欲しい。

勿論、現行の「EZ zenback バージョン1.5」および過去のリリースも対応している。

「Disqus Comment System for EZ zenback Ver. 2.70 modified 2.0」は、「EZ zenback」との併用が前提となっているので、これ単体では使用しないこと。

Posted in WordPress, ネット・PC, 自作アプリ | Tagged , , , | 1 Comment

POST2PDF Converter バージョン0.3 リリース

WordPressの投稿や固定ページをPDF形式でダウンロード出来るようにするプラグイン「POST2PDF Converter バージョン0.3」をリリースした。

Ver.0.3 2012/01/26

最新の「POST2PDF Converter」をダウンロード

「POST2PDF Converter」は、一度、変換されたPDFを保存せず、ダウンロードリンクがクリックされる度に、新たにPDFへの変換を行う方式を採用しており、この方法は、記事を変更した場合にも、リアルタイムでPDFにも反映されるというメリットがあるが、サーバーに負荷を掛けると言うデメリットもある。

このあたりは次のバージョンでの改善を考えているが、バージョン0.3では、この問題を解決する1つの手段として設定画面上で管理者が手動で記事をPDFに変換し、ダウンロード出来るようにした。

POST2PDF Converter PDFファイルの作成

設定画面で作成したPDFファイルに、記事に任意の場所でリンクを貼れば、サーバーに負荷を掛ける事なく、記事をPDF形式でダウンロード出来るようになる。

また、「POST2PDF Converter」がPDF作成のために利用してる「TCPDF」は、PC用のTrueTypeフォントを直接フォントとして使用することが出来ず、予め変換を行う必要があるが、バージョン0.3では、この変換作業を設定画面上で行うこと出来るようになった。

POST2PDF Converter フォントの変換

変換できるフォントは、TrueTypeフォント、OpenTypeフォント、Type1フォントなどである。

なお、変換テストは、TrueTypeフォントでしか行なっていない。

TCPDF用フォントへの変換は、プログラムの改変する行為であり、またPDFで使用すると言うことは、広く一般に配布されるドキュメントでフォントを埋め込む事を意味する。

そのため、変換が許されるフォントは、ライセンス上、改変が許され、PDFの埋め込みフォントとして利用でき、作成したPDFの配布が許されているフォントに限られる。

現実的は、オープンソースのフォントや自作のフォントに限られるだろう。

変換後のフォントを再配布する場合も、ラインセンス上、問題がないか確認すること。

Posted in WordPress, ネット・PC, 自作アプリ | Tagged , , , | Leave a comment

Google Translate API v1の終了とWordPressの翻訳プラグイン

Googleが無料で提供している翻訳サービス「Google 翻訳」大変便利で、広く使われているが、その無料APIである「Google Translate API v1」が残念なことに昨年12月にサービスを終了し、有料の「Google Translate API v2」のみの提供となってしまった。

WordPressの翻訳系プラグインでも広く使われていたAPIであるので、WordPressへの影響は大きく、これを機に開発を終了してしまったプラグインや、公開されてはいるものの動作しないプラグインが出てきている状況である。

実際、私が使っていたWordPressプラグイン「Gtranslate」も「Google Translate API v1」を使っていたため、機能しなくなった。

また、WordPressプラグインではないが、このブログの下に表示される多機能ツールバー「Wibiya」の翻訳サービス「iTranslation」も同様の理由で機能しなくなってしまった。

そのため、代わりのプラグイン、サービスを探す必要が生じた。

APIが公開されている翻訳サービスは数多くあるようであるが、日本語に対応し、対応言語(翻訳可能な言語)が多く、使いやすく、サービスが継続されそうなものとなると殆ど皆無で、「Bing Translator」の「Microsoft Translator API」が良さそうである。

ただし、「Google Translate API v1」と比べると対応言語が37と少ないなど、機能面で見劣りすることは否めないが・・・。

そこで「Microsoft Translator API」をサポートするWordPressプラグインを探してみたが、多くのプラグインが「Google Translate API」を採用しており、予想外に見つからない。

それだけ「Google Translate API」が優れているということだろうが、私が探した範囲では、「Transposh Translation Filter」が、唯一「Microsoft Translator API」を採用し、まともに使えるプラグインだった。

厳密に言えば、「Transposh Translation Filter」は、「Google Translate API」と「Microsoft Translator API」の両方をサポートしており、「Microsoft Translator API」を使うなら、37の言語、日本語を除いて実質36の言語への翻訳が可能である。

設定画面上で、言語の有効化/無効化を行うが、言語と対応するAPIも分かりやすい。

Transposh WordPress Translation 言語の設定

ただし、言語名の表記が、その言語でされているため、何の言語なのか分からないという難点がある。

言語の選択を行うウィジェットを追加できる他、ブラウザの言語に応じて、予め翻訳済みの記事を自動表示するように設定することも出来る。

実際に「WordPressのショートコードAPI」を英語に翻訳してみると・・・

Transposh WordPress Translationで英語に翻訳

本文だけでなく、タイトル、メニューのラベル、カレンダーと言ったかなり細かなところまで翻訳されていることが分かる。

このプラグインの最大の特徴は、「Google Translate API」と「Microsoft Translator API」を利用した自動翻訳機能を備えながらも、サイトの訪問者などに翻訳して貰う機能を備えている点である。

サイトの訪問者は、自動翻訳による訳文に気に入らない部分があれば、そこを簡単に修正することが出来る。

これを利用すれば、人の手による翻訳で翻訳の精度を上げることが出来るが、もっとも、これは訪問者の協力が得られればの話である。

設定にもよるが、自動翻訳、または人の手による翻訳によって作られた訳文はデータベースに保存されるようで、翻訳の度に必ずしもAPIにアクセスするわけではないようである。

設定項目は多く、細かな設定が出来るプラグインであるが、基本的には、最初の「Supported languages」の設定さえ行えば、問題なく使えるはずだ。

ただし、「wp-config.php」で、$_SERVER['HTTP_ACCEPT_LANGUAGE']を使って定数「WPLANG」の設定を振り分けてローケルを切り替えている場合は、「Enable override for default locale」を無効にしないと、管理画面の表示が思わぬ結果になる。

ちなみに、今のところ、WordPressの翻訳系プラグインは選択肢不足の状況にあるので、もし、人気のプラグインを作りたいなら、翻訳系のプラグインは狙い目かもしれない。

Posted in WordPress, ネット・PC | Tagged , , | 2 Comments

Plugin Directoryの自分のプラグインページにバナーを設置する

WordPressのプラグイン公開サイトである「WORDPRESS.ORG Plugin Directory」を見ると昨年末より、バナーが表示されているページが増えて来たことに気づくだろう。

これは、昨年末より「Plugin Directory」がバナーの表示をサポートしたからであり、これに関する記事が「WordPress Development Updates」にMattの手で書かれている。

バナーを表示させるだけでも随分と見栄えが良くなり、プラグインの機能を端的に伝える事も出来る。

プラグインを開発し、「Plugin Directory」で公開しているなら、ぜひバナーを設置したい。

以下、バナーを表示させる方法をまとめる。

  1. まず、横772ピクセル、縦250ピクセルの画像を用意する。画像はjpegかpng形式でなければならない。ファイル名は、「banner-772x250.jpg」、または「banner-772x250.png」とすること。
  2. 続いて、「assets」というディレクトリを、SVNのルートの作成し、その中に作成した画像を入れてアップロードする。(ローカルで作成して、単にコミットすれば良い。)「assets」の作成場所は「trunk」の中ではない事に注意。

以上で、暫くするとバナーが表示されるはずである。

これらの情報は、「Developer FAQ」にも書かれており、ここを読むと更に面白いことが出来ることに気づく。

?banner_url=画像のURL

というパラメーターをプラグインページのURLに付加することで、指定した画像をバナーに使用して、プラグインページを表示させることが出来る。

以下のURLは、同じプラグインページへのURLであるが、パラメーターによるバナー画像の指定で、バナーが変化することが分かる。

http://wordpress.org/extend/plugins/wp-syntaxhighlighter/

http://wordpress.org/extend/plugins/wp-syntaxhighlighter/?banner_url=http://plugins.svn.wordpress.org/wp-wapuu-widget/assets/banner-772×250.png

※URL中の「×」が全角で表示されているが、正しくは半角。

Posted in WordPress, ネット・PC | Tagged , , , | Leave a comment

CodeMirror for CodeEditor バージョン0.5 リリース

「CodeMirror for CodeEditor バージョン0.5」をリリースした。

Ver.0.5 2012/01/12

最新の「CodeMirror for CodeEditor」をダウンロード

バージョン0.5では内包する「CodeMirror」ライブラリをアップデートしている。

新機能としては、タブをマーカーで表示して、タブによるインデントを見えるようにする機能が追加された。

また、検索、置換機能が新しくなり、キー操作によって必要な時だけ表示するタイプに変わった。

そのためツールバーは、以前のバージョンに比べてすっきりしている。

CodeMirror for CodeEditor 0.5のツールバー

例えば、検索機能は、CtrlとFキーの同時押しで起動する。(または、CmdとFキー)

CodeMirror for CodeEditor 0.5の検索機能

その他の操作は下記の通り。

  • 下候補:CtrlとGキーを同時に押す。(または、CmdとGキー)
  • 上候補:Shift、CtrlとGキーを同時に押す。(または、Shift、CmdとGキー)
  • 置換:Shift、CtrlとFキーを同時に押す。(または、Cmd、OptionとFキー)
  • 全置換:Shift、CtrlとRキーを同時に押す。(または、Shift、Cmd、OptionとFキー)

ただし、フルスクリーンモードでは、検索、置換機能が使えなくなった。

Posted in WordPress, ネット・PC, 自作アプリ | Tagged , , , | Leave a comment

初心者による初心者のためのPHP講座 第7回 配列

「配列」は変数の一種であるが、通常の変数が、1つの変数に1つの値しか格納できないのに対して、「配列」とは、複数の値を格納する変数のことである。

配列は、格納する値同士の紐付けが容易であるため、重宝する場面が多く、出番も多いので必ずマスターしておく必要がある。

私の場合、それほど多用するわけではないが、設定パラメーターを格納する際には、よく配列を用いている。

配列の定義

例えば、年齢を変数に格納するとしよう。

複数の年齢を格納する場合は、今まで学んだ知識の範囲でこれを記述するとなると、

<?php
$age1 = 13;
$age2 = 25;
$age3 = 46;
?>

のように複数の変数を定義する必要がある。

値の数が少ない場合は、上記のような定義も悪くはないが、値の数が1,000個、10,000個となると、定義すべき変数の数が膨大になり、非常に効率が悪い。

しかし、配列を用いれば、複数の値を1つの変数に格納することが出来る。

実際に配列を使って定義すると以下のようになる。

<?php
$age[0] = 13;
$age[1] = 25;
$age[2] = 46;
?>

上記の例では、1つの変数と言うことも出来る配列$ageに全ての構成要素が格納されている。

配列と言っても通常の変数と書式に違いはないが、配列に格納される各要素(値)を定義する場合は、角括弧構文を用いて[キー]を指定する必要がある。

<?php
$変数名[キー1] = 値1;
$変数名[キー2] = 値2;
$変数名[キー3] = 値3;
?>

「キー」と「値」は、必ずペアになっており、「キー」に紐付けられた「値」を配列の要素と呼ぶ。

「要素」は「値」が住んでいる部屋で、そのルームナンバーが「キー」と理解すると良いだろう。

配列から値を取り出したい場合も、ルームナンバーである「キー」を使って取り出すことが出来る。

値としては、通常の変数同様に、整数値、浮動小数点、文字列、論理値、NULLが格納できる他、配列を格納することも出来る。

配列を格納する配列を、多次元配列と呼ぶが、これについては後ほど説明する。

以下の例では、配列$ageを定義し、$ageからキー「1」の値を取り出してecho()で表示させている。

<?php
$age[0] = 13;
$age[1] = 25;
$age[2] = 46;

echo $age[1];
?>

以上のように、特定の値を取り出す場合にも角括弧構文を用いて、キーで指定する。

キーに0から始まる整数値を使う場合は、下記のように角括弧構文の中のキーを省略して定義することも出来る。

<?php
$age[] = 13;
$age[] = 25;
$age[] = 46;

echo $age[1];
?>

上記の例では、キーは省略されているもの、各要素には先頭から順に0、1、2・・・と言った整数値がキーとして与えられており、「25」と表示される。

また、配列は角括弧構文以外でも定義でき、配列の定義のために用意されているarray()関数を使って配列を定義することも出来る。

<?php
$age = array(13, 25, 46);
?>

キーは、省略されているが、この場合も、各要素には0から始まる整数値のキーが自動的に割り当てられる。

明示的にキーを書くならば、下記のようになる。

<?php
$age = array(0 => 13, 1 => 25, 2 => 46);
?>

array()関数を用いる場合は、演算子「=>」を使って、キーと値の関係を記述し、要素を定義できる。

また、explode()関数を使えば、特定の文字で区切られた文字列を配列に格納することが出来る。

<?php
$str_age = "13,25,46";
$age = explode(",", $str_age);

echo $age[1];
?>

上記の例では、「,」を区切り文字として「,」で元の文字列を分解し、先頭から順に要素として格納している。結果、「25」と表示される。

その他、str_split()関数、preg_split()関数など、戻り値として配列を返す関数は、数多く有り、これらも配列の定義に利用することが出来る。

空の配列

array()関数を使って配列を定義し、下記のように引数を省略すれば、要素を持たない空の配列を定義することが出来る。

<?php
$var = array();

if ($var === NULL) {
	echo "NULLです。";
} else if (is_array($var)) {
	echo "配列です。";
}
?>

ただし、型としては配列であるため、型の違いまで考慮すれば、NULLとは本質的に異なる。

なお、is_array()関数は、変数が配列の場合はtrue、そうでない場合は、falseを返す。

予め空の配列を定義する行為に意味がないわけではなく、配列が要素を持たない場合にも、空の変数ではなく、空の配列として識別が可能であるため、例えば、条件分岐によって要素を与え、条件によっては、全く要素が追加されず、空になるケースが考えられる場合でも、型としては配列であり、それを判定することが出来る。

特に角括弧構文を用いて要素を定義し、配列を組み立てる場合は、1つ目の要素が定義されるまでは、仮に参照したとしても未定義の変数でしかないので、予め、空の配列として定義しておくと良い。

<?php
$age = array();
$age[0] = 13;
$age[1] = 25;
$age[2] = 46;

echo $age[1];
?>

些細な事ではあるが、空の変数と区別する場合は重要である。

配列全体を表示する

配列全体を表示させる処理を実際のプログラムの中で使うことは、少ないかもしれないが、デバッグ用に出力して配列の中身を確認する必要性が生じるケースは少なくないので、これも覚えておく必要がある。

しかし、下記の例は上手くいかない。

<?php
$age = array(13, 25, 46);

echo $age;
?>

それは単純にecho()関数が、キーを指定せずに配列全体を表示させることは出来ず、結果は「Array」と表示してしまうからである。

代わりにprint_r()関数、var_dump()関数、var_export()関数を使うと良い。

<?php
$age = array(13, 25, 46);

print_r($age);
?>

連想配列

「連想配列」と言っても特殊な配列ではなく、整数値ではなく、文字列をキーに持つ要素を格納する配列のことである。

<?php
$age['suzuki'] = 13;
$age['yamada'] = 25;
$age['tanaka'] = 46;
?>

<?php
$age = array('suzuki' => 13, 'yamada'=> 25, 'tanaka' => 46);
?>

が「連想配列」になる。

「キー」には、アルファベット、数字、アンダースコアを使うことが出来るが、最初の1文字はアルファベットかアンダースコアである必要がある。

このようにキーに文字列を使い意味を持たせることで、配列の意図がより分かりやすいものになる。

連想配列の場合も、角括弧構文を用いて、キーを指定して配列から値を取り出すことができる。

<?php
$age = array('suzuki' => 13, 'yamada'=> 25, 'tanaka' => 46);

echo $age['yamada'];
?>

多次元配列

多次元配列とは、値として配列を格納する多重構造の配列である。

値として配列を格納することで、より複雑なツリー構造を構築でき、構造自体は複雑になるかもしれないが、配列の持つ意味は、明示的なものであり、PHPのコードで考えるよりも構造を図示をした方理解しやすいかもしれない。

これまで例では、名前と年齢を紐付けた連想配列を作成したが、ここでは、加えて性別も格納するとする。

以下で、その構造を図示してみた。

  • suzuki
    • age:13
    • sex:male
  • yamada
    • age:25
    • sex:female
  • tanaka
    • age:46
    • sex:male

黒四角が各要素の「キー」であり、黒丸が値になるが、値は複数あるので、それぞれの黒丸のペアも独立した配列になる。

つまり、連想配列の中で、名前に紐付けられた形で年齢と性別の連想配列を格納する。

ちなみに、これは二次元配列である。

以下、3つの方法で連想配列を定義してみた。

<?php
// array()関数を使わずに定義
$prof['suzuki']['age'] = 13;
$prof['suzuki']['sex'] = 'male';
$prof['yamada']['age'] = 25;
$prof['yamada']['sex'] = 'female';
$prof['tanaka']['age'] = 46;
$prof['tanaka']['sex'] = 'male';

echo $prof['yamada']['sex'];
?>

<?php
// 内包する配列のみarray()関数を使って定義
$prof['suzuki'] = array('age' => 13, 'sex' => 'male');
$prof['yamada'] = array('age' => 25, 'sex' => 'female');
$prof['tanaka'] = array('age' => 46, 'sex' => 'male');

echo $prof['yamada']['sex'];
?>

<?php
// 全てにarray()関数を使って定義
$prof = array(
	'suzuki' => array('age' => 13, 'sex' => 'male'),
	'yamada'=> array('age' => 25, 'sex' => 'female'),
	'tanaka' => array('age' => 46, 'sex' => 'male'),
);

echo $prof['yamada']['sex'];
?>

おそらく3番目の方法が一番分かりやすいだろう。

末端の値を取り出す場合も、一次元の配列同様に角括弧構文を用いて「キー」で指定する。

ただし、複数のキーを記述する必要がある。

以下のように書いても良いし、以下の例のほうが、その意味が分かりやすいかもしれない。

<?php
$val = $prof['yamada'];
echo $val['sex'];
?>

キーの自動付与

キーを省略した場合は、自動的に0から始まる整数値がキーとして与えられることは前にも書いたが、ここでは少し複雑な例を扱う。

下記の例では、最後の要素に与えられるキーはどのようになるだろうか?

<?php
$color[3] = 'black';
$color[11] = 'white';
$color[] = 'blue';
?>

答えは、「12」である。

上の例では、キーの最大値が11であるため、その続きとして12となる。

これは、次のようにarray()関数を用いた場合も同様である。

<?php
$color = array(3 => 'black', 11 => 'white', 'blue');
?>

配列の操作

ここでは、様々な配列の操作について学ぶ。PHPでは、配列を扱う関数が充実しており、配列に対して様々な処理を簡単に行うことが出来る。

ここでは、一部ではあるが、それらを紹介する。

次の例では、キーとして「2」が与えられている要素が2度定義されている。

<?php
$color[0] = 'black';
$color[1] = 'white';
$color[2] = 'blue';

$color[2] = 'red';

echo $color[2];
?>

上記の例では、最終的に「red」と表示される。

つまり、要素を定義し直すことで、配列の要素を上書き出来るのである。

また、要素を削除するにはunset()関数を使えば良い。

<?php
$color[0] = 'black';
$color[1] = 'white';
$color[2] = 'blue';

unset($color[2]);

print_r($color);
?>

list()関数を使えば、配列を分解し、指定した変数に代入し直すことが出来る。

<?php
$color = array('black', 'white', 'blue');
list($val1, $val2, $val3) = $color;

echo $val2;
?>

extract()関数は、キーを変数名とした変数に値を格納し、配列を個別の変数に分解してくれる。

<?php
$age = array('suzuki' => 13, 'yamada'=> 25, 'tanaka' => 46);
extract($age);

echo $yamada;
?>

配列に格納される要素の数を知りたいなら、count()関数を使うと良い。

<?php
$color = array('black', 'white', 'blue');

echo count($color);
?>

implode()は、指定した文字列で要素の値を結合した文字列を返す。以下の例では「,」で結合されて「black,white,blue」となる。

<?php
$color = array('black', 'white', 'blue');
$color_list = implode(",", $color);

echo $color_list;
?>

配列を値でソートする場合は、昇順ならsort()関数、降順ならrsort()関数を使えば良い。ただし、キーと値との関係は維持されない。

<?php
$color = array('black', 'white', 'blue');
sort($color);

print_r($color);
?>

また、連想配列を値でソートする場合は、昇順ならasort()関数、降順ならarsort()関数を使う。キーと値の関係は維持される。

<?php
$name = array('suzuki' => 'taro', 'yamada'=> 'ichiro', 'tanaka' => 'ai');

asort($name);

print_r($name);
?>

連想配列をキーでソートするならksort()関数、krsort()関数を使う。この場合も、キーと値の関係は維持される。

<?php
$name = array('suzuki' => 'taro', 'yamada'=> 'ichiro', 'tanaka' => 'ai');

ksort($name);

print_r($name);
?>

複数の配列をマージ(結合)するなら、array_merge()関数を使えば良い。

<?php
$name1 = array('suzuki', 'yamada', 'tanaka');
$name2 = array('yamamoto', 'takahashi', 'honda');

$new_array = array_merge($name1, $name2);

print_r($new_array);
?>

以上は一例であり、配列を処理できる関数は数多く存在する。

Posted in PHP, PHP講座, ネット・PC | Tagged | Leave a comment

EZ zenback バージョン1.5 リリース

「EZ zenback バージョン1.5」をリリースした。

Ver.1.5 2012/01/05

最新の「EZ zenback」をダウンロードする

バージョン1.5では、zenbackを表示させる手段として、ショートコードをサポートした。

書式:[zenback]

上記のショートコードは、投稿や固定ページの本文で使うことが出来る。

ショートコードを使えば、投稿や固定ページの任意の場所で、zenbackを表示させる事ができ、特定の投稿や固定ページのみでzenbackを表示させたい場合も、ショートコードを使うことで対応できる。

Posted in WordPress, ネット・PC, 自作アプリ | Tagged , , | Leave a comment

WordPressのショートコードAPI

WordPressは、ショートコードを登録、処理するためのAPIを備えており、このショートコードAPIを使えば、簡単にショートコードを登録することが出来る。

今回は、このショートコードAPIの説明を行う。

ショートコードの登録には、add_shortcode()関数を使用する。

add_shortcode('ショートコードタグ', 'ハンドラー');

ショートコードは、

[ショートコードタグ]

と言った[]で文字列を囲んだ書式であるが、[]を除いたものを「ショートコードタグ」として記述し、「ハンドラー」には、ショートコードと置き換える文字列を戻り値として返す関数の名称を記述する。

例えば、「こんにちは」と表示されるショートコード [hi]を登録する場合は、

add_shortcode('hi', 'my_shortcode_handler');

function my_shortcode_handler() {
	return 'こんにちは';
}

と記述すれば良い。

非常に簡単にショートコードを登録できるようになっているが、内部的には、 do_shortcode()というフィルター関数が、add_shortcode()関数で登録された全てのショートコードハンドラーを使って文字列に変換する処理を行なっており、デフォルトでは、do_shortcode()関数は、the_contentフィルターフックにプライオリティ11で適用されている。

このフィルターによって、投稿や固定ページが表示される際に、ショートコードが決められた文字列に変換され、表示に反映される。

デフォルトでは、ショートコードが使えるのは投稿と固定ページの中だけであるが、他の場所でも使用したいなら、このdo_shortcode()関数を使えば良い。

例えば、コメントでショートコードを使いたいなら、

add_filter('comment_text', 'do_shortcode', 11);

とすれば良い。(プライオリティは11ある必要はない。)

以上がショートコードの登録の基本であるが、ショートコードAPIは、単純なショートコードだけなく、属性値を持つショートコードや囲み型のショートコードもサポートしている。

[ショートコードタグ attr1="値1" attr2="値2" ・・・]任意の文字列[/ショートコードタグ]

次の例は、属性値を持つ、囲み型のショートコードであり、[div id="id1" class="class1"]任意の文字列[/div]と言う書式のショートコードを<div id=”id1″ class=”class1″>任意の文字列<div>に変換してくれる。

add_shortcode('div', 'my_shortcode_handler');

function my_shortcode_handler($atts, $content = null) {
	extract(shortcode_atts(array(
		'id' => 'block',
		'class' => 'block',
		), $atts));

	return '<div id="'.esc_attr($id).'" class="'.esc_attr($class).'">'.do_shortcode($content).'</div>';
}

ハンドラーは、引数としてショートコードで囲まれた部分の文字列を受け取ることが出来る。

加えて、属性名をキー、属性値を値とする配列の形で、ショートコードの記述された全ての属性と属性値を引数として受け取ることが出来る。

しかし、ユーザーが入力する属性、属性値に関しては、何が含まれているか分からない。

そこで、無効な属性が含まれている場合は、これを取り除き、欠けている場合は、デフォルト値を与えて補う必要があるが、これを簡単に行うことができるのが、shortcode_atts()関数である。

上の例では、id、classのデフォルト属性値は「block」となっており、ショートコードで、idまたはclassが省略された場合は、この「block」が値として自動的に割り当てられる。

そして最終的には、extract()を使って属性名を名前とする変数に格納している。

これらの値を用いて、置き換えの文字列を定義し、これを戻り値として返しているが、受け取った属性値は、セキュリティ上も信頼できないので、そのまま出力することは避けたい。

そこで、戻り値として返す前にesc_attr()関数でエスケープしている。

また、$contentに対してdo_shortcode()を適用して、ショートコードに囲まれたショートコード、つまりネストされたショートコードも、ショートコードとして正しく処理されるようにしている。

前にも書いたがdo_shortcode()が、ショートコードを処理するフィルターそのものであるので、do_shortcode()を文字列に適用すれば、文字列内のショートコードが正しく処理される。上記の場合は、$contentに対して、これを行なっている。

Posted in PHP, WordPress, ネット・PC | Tagged , , | Leave a comment

POST2PDF Converter バージョン0.2 リリース

WordPressの投稿や固定ページをPDF形式でダウンロード出来るようにするプラグイン「POST2PDF Converter バージョン0.2」をリリースした。

Ver.0.2 2012/01/02

最新の「POST2PDF Converter」をダウンロード

バージョン0.2では、ショートコードをサポートし、ショートコードを使って、投稿や固定ページの任意の場所にPDFのダウンロードリンクを追加できるようにしている。

書式:[pdf]PDF形式でダウンロード[/pdf]

ショートコードを使えば、特定のページのみPDF形式でのダウンロードを許可すると言ったことが出来る。

また、様々な属性をサポートしており、ページごとに言語やフォントやロゴを変えたり、投稿IDを指定して、別のページをPDFとしてダウンロードさせることも可能だ。

書式:[pdf id="1643" lang="jpn" file="id" font="cid0jp" monospaced="cid0jp" fontsize="11" subsetting="1" ratio="1.35" header="1" logo="1" logo_file="my_logo.png" logo_width="45" wrap_title="1" footer="1" filters="1" shortcode="1" ffamily="0"]Click here to get a PDF[/pdf]

また、このバージョンからは、本文末に署名を表示できるようになった。
任意のテキストを署名として登録できるので、署名以外に、ラインセンス、メッセージなどの表示にも利用できる。

加えて、引用やソースコードが本文に含まれる場合、それを整形して表示する機能も追加され、PDFに変換された際に見やすくなっている。

WP SyntaxHighlighterSyntaxHighlighter EvolvedSyntax Highlighter for WordPressSyntax Highlighter CompressなどのSyntaxHighlighterベースのプラグイン用に書かれたソースコード、WP-SyntaxCodeColorerWP-CodeBoxWP-SynHighlightなどのGeSHiベースのプラグイン用に書かれたソースコードがその対象となる。

設定画面の項目も増え、ヘッダー、フッターの表示/非表示、フィルターの有効化/無効化、長いタイトルの折り返しと言った機能を設定できるようになっている。

また、同梱しているTCPDFをバージョン5.9.142にアップデートしている。

Posted in WordPress, ネット・PC, 自作アプリ | Tagged , , , | Leave a comment