「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
Data APIでテンプレートタグの値を使うプラグイン(その3・JavaScriptでの利用)
Data APIにはJavaScriptのライブラリがあり、Webページから比較的簡単にData APIにアクセスすることができます。
テンプレートタグの値を使うプラグインを使う場合も、JavaScriptでアクセスすることができます。
その方法を解説します。
1.パラメータに「rebuildTemplateName: テンプレート名」を付加
JavaScriptでData APIにアクセスする場合、個々のエンドポイントに対応するメソッドで、パラメータを表すオブジェクトを渡すことができます。
そのオブジェクトに、「rebuildTemplateName」のプロパティを作り、それでテンプレート名を指定するようにします。
例えば、listEntriesメソッドで、記事を取得するとします。
この場合、以下のようなコードを書くことで、得た個々の記事に対して「DataAPI Entry」というテンプレートを再構築し、その結果も合わせて得ることができます。
api = new MT.DataAPI({
baseUrl: 'http://your-host/path-to-mt/mt-data-api.cgi',
clientId: 'example',
});
var params = {
rebuildTemplateName: 'DataAPI Entry'
};
api.listEntries(siteId, params, function(response) {
if (response.error) {
エラー時の処理
}
読み込んだ記事に関する処理
});
2.結果を扱う
再構築で得られた値は、個々の記事等のオブジェクトの「rebuildResult」というプロパティに保存されます。
このプロパティの配下に、テンプレート側で指定した変数名と同じプロパティが作られます。
例えば、昨日の記事のように、前後の記事のアドレスを、previous_link/next_linkという変数に代入したとします。
この場合、個々の記事のオブジェクトに以下のようなプロパティが作られ、そこから前後の記事のアドレスを得ることができます。
| プロパティ | 値 |
|---|---|
| rebuildResult.previous_link | 前の記事のアドレス |
| rebuildResult.next_link | 次の記事のアドレス |
3.事例
上で示したように、listEntriesメソッドで記事を得る際に、前後の記事のアドレスも合わせて得たとします。
この場合、記事一覧をul/li要素のリストで出力し、かつ個々の記事の前後のアドレスも出力するには、以下のようなJavaScriptのコードを実行します。
api = new MT.DataAPI({
baseUrl: 'http://your-host/path-to-mt/mt-data-api.cgi',
clientId: 'example',
});
var params = {
rebuildTemplateName: 'DataAPI Entry'
};
api.listEntries(siteId, params, function(response) {
if (response.error) {
alert('エラー');
}
var entries = response.items;
var html = '<ul>';
for (var i = 0, j = entries.length; i < j; i++) {
var entry = entries[i];
var rebuildResult = entry.rebuildResult;
html += '<li>' + entry.title;
if (rebuildResult.previous_link ||
rebuildResult.next_link) {
html += '<ul>';
if (rebuildResult.previous_link) {
html += '<li><a href="' + rebuildResult.previous_link + '">前の記事</a></li>';
}
if (rebuildResult.next_link) {
html += '<li><a href="' + rebuildResult.next_link + '">次の記事</a></li>';
}
html += '</ul>';
}
}
html += '</ul>';
jQuery('#entries').html(html);
});
