読者です 読者をやめる 読者になる 読者になる

年の功より亀の甲

カメがプログラミングとか技術系について書くブログです。

phpqueryを業務で使ってみて【ころなとサリー AdventCalendar 2015/12/7】

みなさん、2日ぶりのころなです。

今回は、お仕事でphpQueryを利用した時のお話です。

phpQueryとは

JavaScriptを利用する人には、おなじみのjQueryをインスパイアしたPHPのライブラリです。
htmlのdata属性の取得や設定domオブジェクトを作成するのをjQueryと同様に利用しやすいのが特徴です。
phpQueryを利用した当時は、CSS3については、実装中という状況ではありましたが、デザインはPHP側が
担保しないというシステム要件でしたので、利用いたしました。

phpQueryのダウンロード

今回は、ソースコード本体を公開しているサイト(https://code.google.com/p/phpquery/)から、利用するファイルをダウンロードいたしました。
1ファイルをrequireすれば利用できる「phpQuery-onefile.php」を使用いたしました。

phpQueryの読み込み

さきほどダウンロードした、phpQuery-onefile.phpをディレクトリに設置をして、ソースコード上でrequireかrequire_onceをすれば、実装していくことができます。
同じディレクトリの配下に、phpQueryを配置している場合

require_once 'phpQuery-onefile.php';

オブジェクトの作成

それでは、実際にオブジェクトを作成します。
newDocumentでオブジェクトを作成する自体は完了します。

$bodyObject = phpQuery::newDocument("<div id='dataBox'>" . $data["body"] . "</div>");

特定のタグ以下に入っているhtmlのオブジェクトをループで取得する

オブジェクトを作成で来たところで、実際にhtmlデータを取得していきます。
今回は、さきほど設定したidがdataBoxの子要素について、foreachで回す例を挙げます。

foreach($bodyObject["div#dataBox"]->children() as $childObject) {
	// 取得したタグの値を取得する
	value = $childObject->getAttribute("value");
	
	// htmlに設定した、data-id属性の値を取得する
	data_id = $childObject->getAttribute("data-id");
	
	// オブジェクトのhtmlタグの種類を取得する(textarea等)
	$childObject->tagName;
}

指定したオブジェクトに値を設定する。

さきほどは取得する例だったので、次はhtmlオブジェクトに値を設定する例を紹介します。

$setValue = "100";
$childObject->setAttribute("value", $setValue);

オブジェクト以下の情報をhtml文字列として出力をする

*div要素のdataBoxを含まないhtml情報の例
$dataHtmlInfo = $bodyObject["div#dataBox"]->html();

業務で一番重宝したところ

業務アプリとしては少ないですが、「データベースに格納するための元データがhtmlに格納されている」という特殊なデータソースだったので役に立ちました。

下記が、イメージ画像です。

f:id:sakuriver:20151207235034p:plain

業務アプリでは珍しいですが、ブログのhtml情報を試算にしている会社さんにとっては、htmlデータをベースに使えるというのは需要があるのではと思っいますので、記事として残しておきます。


一つのタグに複数のデータを持たせるために、html5からのdata-*を利用していた部分に対して$childObject->getAttribute("data-*")で取得してPHP側で利用できるのは、非常に大きかったです。

これを通常の正規化で取得するとなると、ネストしていた場合や、同じ行に入っている子要素について一つずつタグを書いていくことになるので恩恵の大きさを感じます。