WordPressの投稿をPDF形式でダウンロード出来るプラグイン「POST2PDF Converter」

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

Ver.0.1 2011/12/27

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

「POST2PDF Converter」は、PHPライブラリ「TCPDF」を用いて、HTML形式のWordPressのコンテンツをPDFに変換し、ダウンロード出来るようにする。

このページの先頭にも、ダウンロードリンクがあるので、実際の動きを見たいなら試してみると良いだろう。

主な特徴は下記の通り。

  • ダウンロードリンクの追加が簡単、かつ柔軟。
  • PDFのダンロードに制限をかけることが可能。
  • 様々な言語に対応し、言語に応じて最適化される(つもり)。
  • PDFのフォントサイズの変更やフォントの指定が可能。
  • ショートコードを処理するか削除するか選べる。
  • Font subsettingサポートし、PDFのファイルサイズを抑えられる。

なお、「Font subsetting」は、フォントのうち、実際使われている文字だけをPDFに組み込むことで、フォントの組み込みによるPDFのファイルサイズの増大を抑えることが出来る機能であるが、PHPの処理としては負荷がかかる複雑な処理になる。

そのため、場合によっては、「Font subsetting」を無効化し、フォント全体を組み込んだ方が良いかもしれない。

「POST2PDF Converter」で使用している「TCPDF」は、現状、日本語で書かれたHTMLを上手くPDF化出来ず、一部の文字が表示されないなどの問題が発生する。

これは、搭載している日本語フォントが主な原因であるが、この問題を解決するために、別途、TCPDF用日本語フォント「RCJフォント for TCPDF」と「梅フォント for TCPDF」を公開している。

ファイルサイズの関係で、「RCJフォント for TCPDF」と「梅フォント for TCPDF」は「POST2PDF Converter」に同梱していないので、別途インストールして欲しい。

「Font subsetting」を無効化し、フォント全体を組み込むならファイルサイズが比較的小さい「梅フォント for TCPDF」が向いている。

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

TCPDF用日本語フォント「RCJフォント」

TCPDF」用の日本語フォント「RCJフォント for TCPDF」をリリースした。

バージョン003.03 2011/12/22

最新の「RCJフォント for TCPDF」をダウンロード

「TCPDF」は、テキストやHTMLをPDFファイルに変換するためのPHPライブラリであるが、標準のフォントでは、正しく日本語を表示できないなど、日本語環境(おそらくマルチバイト過環境全般)での利用に関して問題も多い。

そこで、オープンソースの日本語フォントである「IPAフォント」ベースに、TCPDF用に変換した「RCJフォント for TCPDF」を作成した。

パッケージには、「IPAゴシック」、「IPA Pゴシック」、「IPA明朝」、「IPA P明朝」と同等のフォントが収められている。

このフォントは、「/tcpdf/fonts/」ディレクトリにインストールして使うことができるが、PDFを受け取った相手が、同じフォント持っていなくとも編集出来るようにするには「FontSubsetting」を

setFontSubsetting(false)

に設定して使用する必要があるため、PDFファイルにフォント全体が組み込まれ、生成するPDFファイルのサイズが大きくなるという問題もある。

「RCJフォント」は、超マイナーなフォントであり、パッケージにソースとして収録はしているが、PDFを受け取った相手のPCに「RCJフォント」がインストールされている確率は皆無であり、そのためPDFにフォントを組み込む必要が生じる。

また、フォント自体のファイルサイズが小さくないため、PHPに割り当てられたメモリの上限が小さい場合は、PDFを正常に生成出来ないかもしれない。

その場合は「php.ini」を編集するなどして、割り当てるメモリの上限を増やす必要がある。

memory_limit = 64M
Posted in ネット・PC | Tagged , , | Leave a comment

WP SyntaxHighlighter バージョン1.7 リリース

「WP SyntaxHighlighter バージョン1.7」をリリースした。

Ver.1.7 2011/12/15

最新の「WP SyntaxHighlighter」をダウンロード

バージョン1.7は、1.6.7に続くリリースとなるが、中身は、バージョンの数字以上に変化している。

まず、bbPress 2.0以上をサポートし、フォーラムのトピック、リプライに含まれるコードを強調表示できるようになった。

WP SyntaxHighlighter bbPressのトピック/リプライを強調表示

bbPressの投稿フォームには、コメント欄と同様にテキスト形式のリンクボタンを挿入できるようになっており、簡単にソースコードを強調表示させることが出来る。

また、過去のバージョンでは、ソースコードのマークアップに<pre>タグのみを用いていたが、バージョン1.7では、ショートコードもサポートした。

書式はWordPress.comで使われているショートコードと互換性がある。

[sourcecode language="php" gutter="true" firstline="1" highlight="" htmlscript="false"]PHP コード[/sourcecode]
[sourcecode lang="xhtml" gutter="true" firstline="1" highlight="" htmlscript="false"]XHTML コード[/sourcecode]

language(lang)以外の属性は、省略しても良い。language(lang)を省略するとプレーンテキストとして強調表示される。

設定にもよるが、ショートコードは、投稿の作成/編集画面、固定ページの作成/編集画面、コメントの投稿欄、管理画面上のコメントの編集/返信画面、「WP SyntaxHighlighter Widget」で使うことができる他、bbPressのトピック/リプライの投稿フォーム、トピック/リプライの編集フォーム、管理画面のトピック/リプライの作成/編集画面でも使用できる。

実は、より簡略な下記の書式のショートコードもサポートしているのだが、事実上、これらの書式は使えない。

[source language="php" gutter="true" firstline="1" highlight="" htmlscript="false"]PHP コード[/source]
[code lang="xhtml" gutter="true" firstline="1" highlight="" htmlscript="false"]XHTML コード[/code]

なぜならば、この書式を適切に処理できるフィルターを実装していないからだ。そのため、これらの書式を使おうと思うと面倒になる。仮に自身でコードをエスケープしたとしても低い権限しか与えられていないユーザーが投稿した場合は、ソースコードが壊れる場合がある。

そもそも「WP SyntaxHighlighter Widget」の場合は、手入力でのマークアップは想定していないので、多少長くともWordPress.comとの互換性を優先した形になっている。

ショートコードを有効にした状態で、本文中にこれらのショートコードを書くと、表示の際にタグに展開されてしまうので注意が必要だ。

それを避けたい場合は、下記のようにショートコードを「[]」で囲んでエスケープすること。

[[sourcecode language="php" gutter="true" firstline="1" highlight="" htmlscript="false"]PHP コード[/sourcecode]]
[[sourcecode lang="xhtml" gutter="true" firstline="1" highlight="" htmlscript="false"]XHTML コード[/sourcecode]]

例外として、<pre>タグで囲まれたショートコード(sourcecode、source、codeのみ)、つまり、ショートコードを含むソースコードを<pre>タグでマークアップした場合は、ショートコードをエスケープしなくとも、正常に処理されるようにしている。

ショートコードの導入に合わせて、コメント欄、WP SyntaxHighlighter Widget、bbPressの投稿フォームに追加されるテキスト形式のリンクボタンも強化され、<pre>タグだけでなく、ショートコードの挿入もサポートし、設定画面で切り替えることが出来るようになった。

過去のバージョンでは、投稿および固定ページにソースコードを記述することが許されたのは、「unfiltered_htm」権限を持つユーザー、つまりデフォルトのユーザーロールでは、管理者、編集者のみであったが、必要に応じて投稿者や寄稿者など、記事の投稿が許されているユーザー対して、ソースコードの記述を許可出来るようになった。

以上が目に見える機能面での主な新機能であるが、目に見えない部分でも変化している。

構成ファイルのうち、メインファイルが肥大して来たので、役割毎にファイルを分割し、処理を効率化している。

パフォーマンスを重視するなら、設定画面で不要な機能を無効化することをオススメする。

ただし、(過去のバージョンでも既に複雑であったが)設定画面は、我ながら、ここまで必要かと思うほど複雑になっているので、隅まで良く見た方が良い。

デフォルトでも、全てのユーザーが必要としていると思われない機能は、殆ど無効化されているが、設定の煩雑さを考慮して、敢えてデフォルトで有効になっている機能もある。

なお、デフォルトで有効になっている機能は、プラグインインストール時のWordPressのバージョンによっても異なる。

今後のリリースでも、設定画面に関しては、より複雑化する方向に向かうのではないかと思うわれるが、「設定しなくとも使え、設定することで、より幸せになれる」方向で開発を行うつもりであるため、頭が痛くなるようなら設定画面は見ない方が幸せかもしれない。

とは言え、以下の項目だけは、しっかり設定した方が良いだろう。

  • 使用するライブラリ・・・2つのバージョンから選べるが、外観や機能も随分と異なったものになる。
  • テーマ・・・外観を変えたいなら。
  • ツールバー・・・強調表示されたソースコードの右上に表示される「?」やツールバーを消せる。
  • デフォルトの言語・・・必要な言語だけに絞りこめば、ボタンをクリックした時に表示される言語も減るので操作しやすくなる。

コメントやウィジェットの処理を除き、過去のバージョンでは、WordPressのデフォルトフィルターに依存し、独自のフィルターの適用は避けてきたが、必要性に迫られて投稿や固定表示の投稿/編集時、および表示時に適用されるフィルターも追加している。

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

「Ultimate TinyMCE」でWordPressのビジュアルエディターをカスタマイズ

WordPressのビジュアルエディターのカスタマイズを簡単にするプラグインと言えば、「TinyMCE Advanced」が定番であるが、今回紹介する「Ultimate TinyMCE」もビジュアルエディターのカスタマイズを簡単に行う事ができる優秀なプラグインである。

リリースから間もないが、既に人気プラグインとなっており、「Ultimate TinyMCE」も「TinyMCE Advanced」と並んで定番となりそうである。

「TinyMCE Advanced」が4行にわたって自由にアイコンを配置し、順序の変更や区切りの表示も柔軟に出来るのに対して、「Ultimate TinyMCE」は、デフォルトで表示される2行に加えて3行目、4行目に表示するボタンをチェックボックで選択する仕組みを採用している。

Ultimate TinyMCE 設定画面

順番の変更は出来ない。単に表示/非表示が選べるだけである。

柔軟性を欠くものの、その分気軽さがあり、下記のように簡単にビジュアルエディターにボタンを追加できる。

Ultimate TinyMCE 拡張されたエディター

また、ボタンを追加してくれる以外に、標準のボタンの機能拡張も行なってくれる。

下記は、拡張された「リンクの挿入/編集」ボタンである。

Ultimate TinyMCE 拡張された「リンクの挿入/編集」ボタン

既存のボタンの拡張に関しては、個人的には不要なので、設定画面で選択出来るようになると有難い。

過去のバージョンでは、WordPressのインストールパスによっては、設定画面でアイコンが表示されないバグがあったが、バーッジョン1.5.6以降では、これも解消している。

また、バージョン1.5.7以降は、設定画面の日本語表示にも対応した。

ちなみに「TinyMCE Advanced」と「Ultimate TinyMCE」の共存はできない、エラーになるわけではないが、同時に有効化すると、ボタンの配置は「TinyMCE Advanced」の設定が優先され、一部のボタンは「Ultimate TinyMCE」のものと置き換わる。

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

初心者による初心者のためのPHP講座 第6回 条件分岐

ここまで学んだ知識でも、変数の定義や関数を記述して簡単なプログラムを作成することは出来るはずである。

しかし、条件分岐やループ処理などの制御構文を記述することで、初めて複雑なプログラミングが可能になる。

今回は「条件分岐」について説明する。

「条件分岐」とは、特定の条件を満たすか否か判定し、その結果に応じて処理を割り当てる制御構文である。

条件分岐には「if文」、「switch文」が使われる。

if文

「if文」とは、「もし~ならば、処理を実行する」といった意味を持つ構文である。

条件式の評価を行い、その条件が真(ture)であれば、処理を実行する。

<?php
if (条件式) {
	処理;
}
?>

下の例では、変数$colorが、「red」であれば、echo()関数が実行され、「Red」と表示される。

<?php
if ($color == "red") {
	echo "Red";
}
?>

if文では、「()」内に評価する条件式を記述し、対応する処理は「{}」内に記述する。

条件式の評価の部分で使われている「==」は、比較演算子と呼ばれる構文で、この場合は、左辺と右辺の値が等しいことを意味している。

「$colorがredと等しい」か否かの評価、つまり「$colorがred」であるか否かの評価を行なっている。

上記のif文は、条件式の評価が偽(false)である場合は、何も行わない、単一の条件の評価であるが、「else if文」を使えば、最初の「もし(if) ならば」が偽であれば、「あるいは ならば」といった別の評価を行うことが出来る。

下記の例では「$colorがred」である場合は、「echo “Red”;」実行して、if文を終了するが、「$colorがred」でない場合は、続いて「$colorがblue」か否かの評価が行われる。

<?php
if ($color == "red") {
	echo "Red";
} else if ($color == "blue") {
	echo "Blue";
}
?>

「else if」文は、下記のように複数回記述することも出来る。

<?php
if ($color == "red") {
	echo "Red";
} else if ($color == "blue") {
	echo "Blue";
} else if ($color == "black") {
	echo "Black";
}
?>

「else if」は、空白を空けずに「elseif」と書いても良い。

個人的には、「else if」と書く癖があるが、同様の構文を持つJavaスクリプトで「elseif」と書くべきところを、「else if」と書いて失敗することがある。

そう言った意味では「elseif」で覚えたほうが良いかもしれない。

更に、「else文」を使えば、いずれの条件式評価も偽となった場合の処理を記述することが出来る。

<?php
if ($color == "red") {
	echo "Red";
} else if ($color == "blue") {
	echo "Blue";
} else if ($color == "black") {
	echo "Black";
} else {
	echo "ERR: Unknown Color";
}
?>

意図して「else」を使わない場合もあるが、例外的な処理として「else」を記述した方が良いケースも少なくない。

例えば、次のケースでは、すべての条件式評価が偽の場合は、変数$stringは、未定義となるが、「else文」で例外的な場合の代入値を定義することも出来る。(予め、$stringのデフォルト値をif文の前で定義して、それを例外的な場合の値としても良い)

<?php
if ($color == "red") {
	$string = "Red";
} else if ($color == "blue") {
	$string = "Blue";
} else if ($color == "black") {
	$string = "Black";
}
?>

「else if文」や「else文」を組み合わせる場合は、if文の条件式は先頭から順に評価されることを意識しなければならない。

いずれかの条件式が真となった時点でif文は終了されるため、条件式の順序がまずいと、予想外の結果になる可能性がある。

下記は、今まで学んだ内容のみで組み立てたサンプルである。

現在の時間の「分」が偶数であれば、「もう、~です。」、奇数であれば「まだ、~です。」と表示する。

<!doctype html>
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>if文</title>
</head>
<body>
<?php
$min = date("i");
$min_remainder = $min % 2;
if ($min_remainder == 0) {
	echo "もう、".date("H:i:s")."です。";
} else {
	echo "まだ、".date("H:i:s")."です。";
}
?>
</body>
</html>

上記のスクリプトの実行結果を表示

比較演算子

比較演算子とは、左辺と右辺の値を比較するための構文である。

そして比較の結果が真であれば「true」、偽であれば「false」を返す。

「if文」の説明でも、条件式の記述に比較演算子「==」を使用しているので、大まかには理解できていることと思うが、条件式を記述するために比較演算子は欠かせない。

「==」は左辺と右辺が等しいか比較する演算子であるが、次の結果は予想できるだろうか?

<?php
$a = 1;
if ($a == "1") {
	echo "Yes";
} else {
	echo "No";
}
?>

変数$aは、整数「1」として定義されているが、if文では、文字列「1」と等しいか評価を行なっている。

型が異なるわけであるが、PHPでの型の扱いについては、何度が述べてきたので、おそらく予想出来ていたと思うが、このケースは、「Yes」と表示される。

つまり、「==」では型の違いは無視される。

厳密に言えば、整数と文字列の比較の場合は、文字列は、自動的に整数型に変換された上で比較される。

しかし、PHPでは、型の評価を行う比較演算子が用意されているので、型を含めた比較を行うことも出来る。

以下に、PHPで用いられる比較演算子をリストする。

  • == ・・・左辺と右辺の値が等しい。
  • === ・・・左辺と右辺の値と型が等しい。
  • != ・・・ 左辺と右辺の値が等しくない。
  • <> ・・・ 左辺と右辺の値が等しくない。
  • !== ・・・ 左辺と右辺の値が等しくない、または型が等しくない。
  • > ・・・ 左辺が右辺より大きい。
  • >= ・・・ 左辺が右辺より大きい、または等しい。
  • < ・・・ 左辺が右辺より小さい・
  • <= ・・・ 左辺が右辺より小さい、または等しい。

以下のサンプルでは、様々な比較演算子をif文で使用してる。

<?php
if ($age >= 20) {
	echo "お酒、タバコが許されます。";
} else if ($age == 18) {
	echo "ようやく普通免許が取れますね。";
} else if ($age == 14) {
	echo "中二病の可能性があります。";
} else if ($age <= 12) {
	echo "運賃は、半額です。";
}
?>

論理演算子

「論理演算子」を使えば「AかつB」、「AまたはB」、「AかつB、またはAかつC」と言った条件を記述することが出来る。

つまり、複数の条件式を繋いで評価することが出来る。

PHPで用いられる論理演算子は下記のとおりである。

  • 左辺 && 右辺 ・・・ 左辺、右辺共に真。
  • 左辺 and 右辺 ・・・ 左辺、右辺共に真。
  • 左辺 || 右辺 ・・・ 少なくとも、左辺または右辺のどちらかが真。
  • 左辺 or 右辺 ・・・ 少なくとも、左辺または右辺のどちらかが真。
  • 左辺 xor 右辺 ・・・左辺または右辺の一方が真。両方が真の場合は、偽を返す。
  • !値(式) ・・・ 値(式)が偽である。値(式)が偽の時に真を返す。

次の例では、「&&」を使って、年齢(変数$age)、性別(変数$sex)の両方が特定の条件を満たすか判定している。

<?php
if ($age >= 18 && $sex == "male") {
	echo "結婚できます。";
} else if ($age >= 16 && $sex == "female") {
	echo "結婚できます。";
} else {
	echo "結婚できません。";
}
?>

また、論理演算子は、算術演算子と同様に「()」を使うことで、評価の優先順位を変えることが出来る。

以下の例では、まず「()」内が真であることが条件となる。

<?php
if ($sex == "male" && ($age == 25 || $age == 42 || $age == 61)) {
	echo "厄年です。";
} else if ($sex == "female" && ($age == 19 || $age == 33 || $age == 37)) {
	echo "厄年です。";
} else {
	echo "厄年ではありません。";
}
?>

性別と年齢の両方が真であることが、条件式が真となる条件であるが、年齢に関しては、「()」内のいずれかを満たせば真となる。

if文のネストと「{}」の省略

if文は、次のように別のif文にネスト(入れ子)することも出来る。

<?php
if ($sex == "male") {
	if ($age == 25 || $age == 42 || $age == 61) {
		echo "厄年です。";
	} else {
		echo "厄年ではありません。";
	}
} else if ($sex == "female") {
	if ($age == 19 || $age == 33 || $age == 37) {
		echo "厄年です。";
	} else {
		echo "厄年ではありません。";
	}
}
?>

if文内の処理が1行で書ける場合は、次のように「{}」を省略することが出来る。

<?php
if ($age >= 20)
	echo "成人です。";
?>

if文での真偽の解釈と演算子を省略した条件式

if文は、条件式の比較演算子を省略し、次のように書くことも出来る。

<?php
if ($value) {
	echo "tureです。";
}
?>

これは次の式の省略形であるが、比較演算子が、型を無視する「==」である以上、話は単純ではない。

<?php
if ($value == true) {
	echo "tureです。";
}
?>

つまり、条件式が真となるのは、$valueにtrueが代入されている時だけとは限らない。

変数$valueが、整数の「0」、浮動小数点の「0.0」、空の文字列、文字列「”0″」、NULL以外の値を持つ時は、常に真となる。

他にも、変数が配列の場合やオブジェクトの場合も考慮する必要があるが、ここでは省略する。

上記の2つの例のような条件式であっても、変数の型が論理値であると確信できる場合は、変数に格納された値がtrueであることの判定に十分に使えるが、そうでない場合は、変数に何か値が格納されているたけで、条件式が真となる可能性があることを覚えておく必要がある。

場合よっては比較演算子に「===」を使うべきである。

また、比較演算子を省略し、条件式に変数のみを記述する方法は、変数が空である可能性を除き、0などの条件式が偽となる値が変数に格納されることがないと確信できるなら、変数に値が格納されているか否かの判定に使うことも出来る。

同様に、次のような省略も成立する。

if (!$value) {
	echo "tureです。";
}
?>

ここでは、論理演算子「!」を使用しており、「$valueが、trueでない」という意味になる。

if文では、必ずしも型を判定する比較演算子を使用する必要はなく、むしろ必要のない判定は省いた方が処理上もスマートであるが、変数に格納される可能性のある値を十分に把握しておかなければ、予想外の結果になる可能性がある。

switch文

switch文は、if文でも代用できるが、変数の値に応じて、処理を割り当てたい時などに適した構文である。

下記のように、case文やbreak文と組み合わせて使用する。

<?php
switch (式または変数){
	case 値1:
		式または変数が、値1と等しい場合の処理;
 		break;
	case 値2:
 		式または変数が、値2と等しい場合の処理;
		break;
	case 値3:
  		式または変数が、値3と等しい場合の処理;
		break;
	default:
		式または変数が、いずれの値とも等しくない場合の処理;
}
?>

「break」は、ループ(繰り返し)処理を抜けるための制御構造であり、条件に一致し、それに応じた処理が終了した時点で。switch文を終了するために記述している。

switch文は、if文と異なり、一度、いずれかの条件に一致しまうと、「break」が記述されている行まで、(case文の条件を無視して、本来、他の条件のための)処理の実行を継続してしまうため、「break」の記述が必要になる。

必要がなければ、「defaut」は省略しても良い。

次の例では、曜日が格納されている変数$dateの値に応じてメッセージを変えている。

<?php
switch ($date){
	case '月曜日':
		echo '休み明けは、ダルいですね。';
 		break;
	case '金曜日':
 		echo '明日からお休みです。';
		break;
	case '日曜日':
  		echo '明日から仕事です。';
		break;
	default:
		echo '今日も頑張りましょう。';
}
?>

以下の例では、複数の条件に、同じ処理を割り当てている。

<?php
switch ($country){
	case 'イギリス':
		echo 'ヨーロッパ';
 		break;
	case '日本':
  		echo 'アジア';
		break;
	case 'ドイツ':
 		echo 'ヨーロッパ';
		break;
	case '中国':
  		echo 'アジア';
		break;
}
?>

次は、「break」の記述を忘れた例である。

<?php
switch ($country){
	case 'イギリス':
		echo 'ヨーロッパ';
	case '日本':
  		echo 'アジア';
		break;
	case 'ドイツ':
 		echo 'ヨーロッパ';
		break;
	case '中国':
  		echo 'アジア';
		break;
}
?>

この場合、変数$countryの値が「イギリス」の場合、まず「ヨーロッパ」と表示し、「アジア」と表示した後に、「break」と出会って、switch文を終了する。

これを逆手に取れば、次のような処理を記述することも出来る。

<?php
switch ($country){
	case 'イギリス':
	case 'ドイツ':
 		echo 'ヨーロッパ';
		break;
	case '日本':
  		echo 'アジア';
		break;
	case '中国':
  		echo 'アジア';
		break;
}
?>

上での例では、変数$countryの値が、「イギリス」または「ドイツ」である場合に、「ヨーロッパ」と表示される。

三項演算子

「三項演算子」は、条件分岐を行う構文のように見えるが、演算子であり、条件に応じて式を返す。

条件に応じて処理を実行するif文、switch文とは本質的に異なる。

今まで学んだ演算子は、数学で言うところの2つの項を使用する「二項演算子」であるが、「三項演算子」は、唯一、3つの項を使用する演算子である。

個人的には、「三項演算子」は使わず、if文で記述することが多いが、知っておかないと、他の人が書いたプログラムを読めなくなってしまう。

「三項演算子」は、以下のようにシンプルに記述できる。

条件式 ? 式1 : 式2

条件式が真の場合は、「式1」を返し、偽の場合は「式2」を返す。

次の例では、返された式を変数$strに代入するように記述している。

変数$ageが20以上の場合は、「成人です。」を返し、変数$strに代入され、20未満の場合は、「未成年です。」が返されて変数$strに代入される。

<?php
$str = ($age >= 20) ? "成人です。" : "未成年です。";
echo $str;
?>

条件式を囲む「()」は省略しても良い。

<?php
$str = $age >= 20 ? "成人です。" : "未成年です。";
echo $str;
?>

以下のように記述した場合も、処理としては全く同じ結果となる。

<?php
echo $age >= 20 ? "成人です。" : "未成年です。";
?>
Posted in PHP, PHP講座, ネット・PC | Tagged | Leave a comment

WordPress 3.3のHTMLエディターにクイックタグを追加する

この記事は、「WordPress 3.3 ベータ 3」に基づいて書かれており、不確定な要素を含んでいる。

WordPressは、記事の作成、編集のために「ビジュアルエディター」と「HTMLエディター」の2つのエディターを備えており、操作を簡略化するために、それぞれ独自のボタンを配している。

「ビジュアルエディター」で表示されるボタンは、ビジュアルエディターのベースとなってるライブラリ、「TinyMCE」が標準で搭載してるボタンか、「TinyMCE」のプラグインとして導入されているものである。

また、「HTMLエディター」に表示されるボタンは「クイックタグ(Quicktag)」と呼ばれ、「ビジュアルエディター」のボタンとは異なるものである。

HTMLエディターのクイックタグ

(現時点では、未だリリースされていないが)「WordPress 3.3」では、この「クイックタグ」の処理が変更されており、従来方法ではクイックタグを「HTMLエディター」に追加出来なくなってしまっている。

そのため、独自のクイックタグを追加するようなプラグインは、WordPress 3.3に合わせて修正しない限り、WordPress 3.3では、クイックタグが表示されないと言った問題が発生することが予想される。

この記事では、WordPress 3.3のHTMLエディターに独自のクイックタグを追加する方法を説明する。

下記は、<pre>タグ(および終了タグ</pre>)を入力するためのクイックタグを追加する場合の例である。

プラグインやfunctions.phpで記述すれば良い。

<?php

function add_my_quicktag() {
?>
	<script type="text/javascript">
	//QTags.addButton('ID', 'ボタンのラベル', '開始タグ', '終了タグ');
	QTags.addButton('ed_pretag', 'pre', '<pre>', '</pre>');
	</script>
<?php
}

add_action('admin_print_footer_scripts',  'add_my_quicktag');

?>

「ID」は任意のもの、「ボタンのラベル」には、ボタン上に表示したい文字を設定する。

「開始タグ」には、ボタンをクリックした時に、選択範囲の前に挿入されるタグを入力する。

「終了タグ」は、不要であれば省略することも出来る。

その他に、タイトル(title属性)、アクセスキー、プライオリティと言ったパラメーターを指定することも出来る。

詳しくは、

/wp-includes/js/quicktags.dev.js

のコメントを参照のこと。

上記の例は、単にタグを挿入するだけの処理であるが、より高度な処理を行うために、指定したJavaスクリプトの関数を実行させることもでき、この場合も、シンプルに記述することが出来る。

<?php

function add_my_quicktag() {
?>
	<script type="text/javascript">
	//QTags.addButton('ID', 'ボタンのラベル', 関数名);
	QTags.addButton('ed_saywordpress', 'Say WordPress', say_wordpress);
	function say_wordpress() {
		alert('WordPress');
	}
	</script>
<?php
}

add_action('admin_print_footer_scripts',  'add_my_quicktag');

?>

「関数名」は、クォーテーションで囲んではいけない。

また、「WordPress 3.3」では、「quicktags_settings」と言うフィルターフックが新しく追加されており、このフックを使えば、デフォルトで表示させるクイックタグを制御することが出来る。

標準では、デフォルトで表示されるクイックタグは、strong(b)、em(i)、link、block(b-quote)、del、ins、img、ul、ol、li、code、more、spell(lookup)、close(close tags)、fullscreenであるが、下記のように記述することで、これを変更することが出来る。

function default_quicktags($qtInit) {
	$qtInit['buttons'] = 'strong,em,link';
	return $qtInit;
}

add_filter('quicktags_settings', 'default_quicktags', 10, 1);

上記の例では、strong(b)、em(i)、linkがデフォルトで表示されるクイックタグとなる。

なお、デフォルトのクリックタグの指定は、最初に説明した方法で追加したクイックタグには影響を与えないので、デフォルトのボタンとして指定しなくとも表示される。

詳しくは、

/wp-includes/class-wp-editor.php

のeditor_settings()関数を参照のこと。

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

初心者による初心者のためのPHP講座 第5回 演算子

PHPに限らず、プログラムでは、「演算子」と呼ばれる数学的または論理的な演算を行うための記号を使用する事が多い。

この演算子を使えば、足し算、引き算などの四則演算を行ったり、値の代入を行うことが出来る。

また、PHPのプログラムでは、ある条件を満たすか否かの判定、つまりは真偽(true、false)の判定を行うことが多いが、このような判定では「比較演算子」、「論理演算子」が欠かせない。

既に「初心者による初心者のためのPHP講座 第3回 文字列」で「文字列演算子」について触れ、「初心者による初心者のためのPHP講座 第4回 定数と変数」で「代入演算子」と「算術演算子」についても触れており、実際に使用しているが、それら以外にも演算子には様々な種類がある。

とは言え、復習的な部分も少なくない。

演算子は、必ず知っておく必要があるが、演算子だけ取り上げて学習するよりも、プログラムの中で実際に使った方が感覚的にも分かりやすいかもしれない。

具体的な使い方は、実際にプログラミングしながら覚えれば良い。

しかし、演算を行うための演算子という記述があることは、少なくとも覚えておこう。

算術演算子

単純な計算を行うための記述にであり、「5+3」、「2×3」の「+」や「×」に相当するもので、プログラミングの知識が無くとも、馴染みがあり、理解しやすいはずである。

PHPでは、以下の5つの四則演算子が用意されている。

+	足し算
-	引き算
*	掛け算
/	割り算
%	割り算の余りを求める

下記は、算術演算子を使ったサンプルである。

<!doctype html>
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>四則演算子</title>
</head>
<body>
<?php
$cal1 = 8 + 3;	// 8と3の足し算。$cal1には整数11が代入される。
$cal2 = 8 - 3;	// 8から3を引く。$cal2には整数5が代入される。
$cal3 = 8 * 3;	// 8に3を掛ける。$cal3には整数24が代入される。
$cal4 = 8 / 3;	// 8を3で割る。$cal4には浮動小数点2.66666666667が代入される。
$cal5 = 8 % 3;	// 8割る3の余り。$cal3には整数2が代入される。
echo "8 + 3 = ".$cal1."<br />";
echo "8 - 3 = ".$cal2."<br />";
echo "8 × 3 = ".$cal3."<br />";
echo "8 ÷ 3 = ".$cal4."<br />";
echo "8 ÷ 3の余りは ".$cal5."<br />";
echo $cal3." - ".$cal1." = ".($cal3 - $cal1); // 変数同士の演算
?>
</body>

上記のスクリプトの実行結果を表示

算術演算子では単純な計算しか出来ないが、高度な演算については関数が用意されているので、それらを使えば良い。

例えば、指数演算を行うpow()関数、サインを求めるsin()関数などがある。

演算子「+」は、算術演算子としてだけでなく、配列演算子として配列の結合に使われる場合もある。

文字列演算子

文字列を連結する際に使用する演算子「.」を指す。

「.」で接続された文字列(変数)は、左の文字列の後ろに右の文字列を加える形で1つに連結される。

"東京"."都"		// 東京都となる

代入演算子

代入演算子は右辺の値を左辺の代入する「=」が基本となるが、 算術演算子や文字列演算子と組み合わせて、より複雑な値の代入を行うことが出来る。

=		// 左辺に右辺を代入
+=		// 左辺に右辺を加えた数を左辺に代入
-=		// 左辺から右辺を引いた数を左辺に代入
*=		// 左辺に右辺を掛けた数を左辺に代入
/=		// 左辺を右辺で割った数を左辺に代入
%=		// 左辺を右辺で割った余りを左辺に代入
.=		// 左辺に右辺を連結した値を左辺に代入

加算子、減算子

加算子、減算子とは、値を1つ増やしたり、1つ減らしたりする演算子の事である。

$a++	// $a += 1と同じ
$a--	// $a -= 1と同じ

以下の例では、変数$aの値を加算子、減算子で増減させている。

<?php
$a = 0;
$a++;		// 1加算されて$aの値は1になる
echo $a."<br />";
$a--;		// 1減算されて$aの値は0になる
echo $a;
?>

下記のように変数の前に「++」、「–」を配置しても良い。

<?php
$a = 0;
++$a;		// 1加算されて$aの値は1になる
echo $a."<br />";
--$a;		// 1減算されて$aの値は0になる
echo $a;
?>

厳密に言えば「$a++」と「++$a」、「$a–」と「$a++」では内部処理が異なる。

「++」または「–」を変数の後に記述した場合は、まず、元の変数の値を返してから加算、減算が行われる。

それに対して、変数の前に記述した場合は、最初に加算、減算が行われ、その結果を変数の値として返す。

次のサンプルでは、その違いがはっきりと結果に現れている。

<!doctype html>
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>加算子、減算子</title>
</head>
<body>
<?php
$a = 0;
$b = 0;
echo '++$aは '.++$a."です。<br />";
echo '$aは '.$a." です。<br />";
echo '$b++は '.$b++." です。<br />";
echo '$bは '.$b." です。";
?>
</body>
</html>

上記のスクリプトの実行結果を表示

その他の演算子

「比較演算子」、「論理演算子」もよく使用する演算子であるが、これらは別の機会に説明する。

演算子の優先順位

演算子には、演算の優先順位がある。

例えば「*」、「/」、「%」は、「+」、「-」より優先して演算される。

つまり、掛け算、割り算は、足し算、引き算よりも優先されると言うことだが、これは数学上の数式と同じである。

意図して優先順位を変える場合は、数学同様に「()」を使えば良い。

<?php
echo 1 + 3 * 5;		// 16になる
echo "<br />";
echo (1 + 3) * 5;	// 20になる
?>

演算と型

変数等の値を考える場合、その型を意識する必要がる。

基本的に同じ型同士でなければ演算できないが、都度、型を変換する必要がないように自動的に型の変換が行われるようになっている。

<!doctype html>
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>演算と型</title>
</head>
<body>
<?php
echo "2" + "3.3";
echo "<br />";
echo "2a" + "3";
echo "<br />";
echo "a2" + "3";
echo "<br />";
echo "2.3b" + "3b";
echo "<br />";
echo "a" + "3";
?>
</body>
</html>

上記のスクリプトの実行結果を表示

「整数」と「浮動小数点」の演算では、「整数」が「浮動小数点」に変換された後に演算が行われ、演算結果の型は、「浮動小数点」となる。

変わったところでは、文字列と数値、文字列同士の演算も成立する。

文字列が数字で始まる場合、始まりの数字の部分が値として使われ演算される。

文字列が数字で始まらない場合は、整数の0として扱われる。

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

WordPressにソーシャルボタンを追加する「Facebook, Twitter & Google+ Social Widgets」

WordPressにソーシャルボタンを追加するプラグインは、数多くあるが、今回紹介する「Facebook, Twitter & Google+ Social Widgets」もその1つである。

このプラグインは、どちらかと言えば後発で、機能も非常にシンプルであるが、既にかなりの人気を獲得している。

「Facebook, Twitter & Google+ Social Widgets」で追加できるボタンは、「Facebook いいね!」、「ツイート」、「Google+」の3つに限られており、この3つのボタンのうち、選択したものを単に横並びに記事に表示するだけである。

Facebook, Twitter & Google+ Social Widgets ボタン

しかし、この3つのボタンは、世界中で人気のサービスであり、ある意味、的を得た選択と言える。

「Facebook, Twitter & Google+ Social Widgets」は、単に有効化するだけでも使えるが、表示に関して細かな設定でき、このあたりも人気の秘密だろう。

Facebook, Twitter & Google+ Social Widgets 設定

まず、ボタンの順序を自由に入れ替えることが出来る。

また、ボタンを表示するページを次から複数選択することが出来る。

  • 投稿
  • 固定ページ
  • ホーム
  • カテゴリーページ
  • タグページ
  • タクソノミーページ
  • 日付別ページ
  • 作成者ページ
  • 検索結果
  • 添付ファイルページ

加えて、ページ内でのボタンの表示位置が指定でき、「投稿の上」、「投稿の下」、または「両方」に表示させることが出来る。

なお、このプラグインの作者は、以前、「WP SyntaxHighlighter」用にとDOSバッチファイル用のBrushファイルを作成してくれた方である。

参考:SyntaxHighlighter用のBrushファイル「DOS バッチファイル」

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

TinyMCE Backslash Button バージョン0.2 リリース

「TinyMCE Backslash Button バージョン0.2」をリリースした。

Ver.0.2 2011/11/03

最新の「TinyMCE Backslash Button」をダウンロードする

バージョン0.2では、HTMLエディター上でもフォントの指定付きでバックスラッシュを入力出来るQuicKtagを追加した。

TinyMCE Backslash ButtonのQuicktag

これによって、ビジュアルエディター、HTMLエディターの両方でバックスラッシュの入力が可能になった。

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

WP SyntaxHighlighter バージョン1.6 リリース

「WP SyntaxHighlighter バージョン1.6」をリリースした。

Ver.1.6 2011/11/02

最新の「WP SyntaxHighlighter」をダウンロード

「WP SyntaxHighlighter」は、基本的に標準のビジュアルエディターの使用を想定したものであり、HTMLエディターを主に利用しているユーザーにとっては使い易いとは言えなかった。

バージョン1.6では、ソースコードをエースケープし、<pre>でマークアップして強調表示の対象とできるQuicktag(ボタン)「SH pre」をHTMLエディターに追加した。

WP SyntaxHighlighter 「SH pre」ボタン

これにより、HTMLエディターでのソースコード記述が大幅に楽になっている。

「SH pre」ボタンの基本的な操作は、TinyMCEの「pre」ボタンを同じである。

WP SyntaxHighlighter 「SH pre」ボタンのポップアップウィンドウ

ただし、タグの編集が出来るHTMLエディターのボタンであることもあり、「pre」ボタンと異なり、設定値の変更機能は備えていない。

また、一度「SH pre」ボタンで処理したソースコードは、特殊な文字がエスケープされて表示されるため、見かけ上、元々のソースコードとは、異なった表示となってしまう。

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