FlatPress.info

Information & blog

サイトマップのプラグインを利用する。

 Plugin を調べてみると DynamicSitemap というプラグインが見ります。ただし、直接のリンクは切れてますが間接的にはダウンロー情報があります。例えば、ここ(DynamicSiteMap)です。(本サイトにもコピー を取ってあります)

通常の手順でインストールしてアクティベイトして利用してみたところを下に示します。非常にシンプルにサイトコンテンツが一覧表示されます。

DynamicSitemap-plugin-sample1

インストールの状況

例によってインストールしたならば、アクティベートをしておきます。サイトマップの作成は、ブログ形式でも都合に合わせておけばよいでしょう。また、目的に合わせて複数のサイトマップを用意するのも便利かも知れません。

DynamicSitemap-plugin-enable

BBCode の書き方

以下の書式でサイトマップの表現を指定します。

  1. [dynamicsitemap include="カテゴリ名、カテゴリ名" exclude="カテゴリ名"]
  2. カテゴリ名は[カテゴリ]で作成した名前で include で指定します。fp-content/content/categories.txt に記憶されている内容です。
  3. カテゴリ名を複数利用する場合にはカンマで区切ります。include を省略するとすべてが対象とされます。
  4. 対象から外すカテゴリ名は exclude で指定します。
  5. 上記サンプルでは「ジャーナル」カテゴリが極めて大量なので、[dynamicsitemap exclude="ジャーナル"]という指定をしています。

 

動作の不具合について

PHPのバージョンによってはエラーが表示されると思います。http://www.xserver.ne.jp/での実験では、PHP5.1.6では問題ないですが、PHP5.3.5 に設定すると下記のようなエラーが表示されました。

Warning: Parameter 5 to plugin_dynamicsitemap_callback() expected to be a reference, value given in /home/azland/flatpress.at/public_html/C/fp-plugins/bbcode/inc/stringparser_bbcode.class.php on line 1919

これは、PHPのバージョンアップに従って、「関数への参照渡しができないようになった」ためのようです。興味のある方は、このあたり(PHP5.3から移行しないと起こるかもしれないトラブル)をご覧ください。また、フォーラムでも話題になってました。

php.ini の設定や .htaccess での設定でエラー表示をさせないことも可能と思ったのですが、エラーより致命的なようで警告ではなくてエラー処理として動作しません。なので、php.ini でエラー表示を停止していると BBCode のソースが表示されるのみとなりました。(下のプレビューを参照)

DynamicSitemap-plugin-erroff

対応手順

ソースコードをほんのチョコっと変えればよいようです。次に示すように"&$"から"&"を取り去るだけの修正を行います。この方法でよいかどうかの判断は、この記事を拠り所にしました。

あと,これは,こういったPHPの仕様は,それはそれでOK,という前提で,その上で,それを使う方の人に言いたい話.
オブジェクトを渡した場合,&をつけなくても参照渡しになるので,&にする必要がありません.もう過ぎ去った時代*3に縛られてオブジェクトを引数にとる関数に & つけるのやめてください.

fp-plugins/dynamicsitemap/plugin.dynamicsitemap.php

// flatpress.info
//function plugin_dynamicsitemap_callback($action, $attributes, $content, $params, &$node_object) {
function plugin_dynamicsitemap_callback($action, $attributes, $content, $params, $node_object) {
if ($action == 'validate') {
// not used for now
return true;
}
global $fpdb;
global $post;
$current_post = $post; 

参照渡しの引数を array に変換して中身を確かめてみると、$node_object は当該プログラムの中身をごっそり引き渡しているようです。

 

<何が引き渡されているか表示させてみた>

function plugin_dynamicsitemap_callback($action, $attributes, $content, $params, $node_object) {
if ($action == 'validate') {
// not used for now
return true;
}
echo func_num_args();
echo ":";
echo $action;
echo ":";
var_dump( $attributes );
echo ":";
echo $content;
echo ":";
var_dump( $params );
echo ":";
var_dump((array)$node_object);
echo ":"; 

 

 

<表示された内容>

5:output:array(0) { } ::array(1) { ["usecontent_param"]=> array(2) { [0]=> string(7) "include" [1]=> string(7) "exclude" } } :array(11) { ["_type"]=> int(32) ["_name"]=> string(14) "dynamicsitemap" ["_flags"]=> array(5) { ["closetag"]=> int(-1) ["opentag.before.newline"]=> int(2) ["opentag.after.newline"]=> int(2) ["closetag.before.newline"]=> int(2) ["closetag.after.newline"]=> int(2) } ["_attributes"]=> array(0) { } ["_hadCloseTag"]=> bool(false) ["_paragraphHandled"]=> bool(false) ["_id"]=> int(1) ["_parent"]=> object(StringParser_Node_Root)#13 (5) { ["_type"]=> int(1) ["_id"]=> int(0) ["_parent"]=> NULL ["_children"]=> array(2) { [0]=> &object(StringParser_BBCode_Node_Element)#15 (11) { ["_type"]=> int(32) ["_name"]=> string(14) "dynamicsitemap" ["_flags"]=> array(5) { ["closetag"]=> int(-1) ["opentag.before.newline"]=> int(2) ["opentag.after.newline"]=> int(2) ["closetag.before.newline"]=> int(2) ["closetag.after.newline"]=> int(2) } ["_attributes"]=> array(0) { } ["_hadCloseTag"]=> bool(false) ["_paragraphHandled"]=> bool(false) ["_id"]=> int(1) ["_parent"]=> *RECURSION* ["_children"]=> array(0) { } ["occurredAt"]=> int(0) ["_codeInfo"]=> array(8) { ["name"]=> string(14) "dynamicsitemap" ["callback_type"]=> string(23) "callback_replace_single" ["callback_func"]=> string(30) "plugin_dynamicsitemap_callback" ["callback_params"]=> array(1) { ["usecontent_param"]=> array(2) { [0]=> string(7) "include" [1]=> string(7) "exclude" } } ["content_type"]=> string(5) "block" ["allowed_within"]=> array(3) { [0]=> string(8) "listitem" [1]=> string(5) "block" [2]=> string(6) "inline" } ["not_allowed_within"]=> array(0) { } ["flags"]=> array(5) { ["closetag"]=> int(-1) ["opentag.before.newline"]=> int(2) ["opentag.after.newline"]=> int(2) ["closetag.before.newline"]=> int(2) ["closetag.after.newline"]=> int(2) } } } [1]=> object(StringParser_Node_Text)#16 (7) { ["_type"]=> int(2) ["_flags"]=> array(0) { } ["content"]=> string(5) " " ["_id"]=> int(2) ["_parent"]=> *RECURSION* ["_children"]=> array(0) { } ["occurredAt"]=> int(-1) } } ["occurredAt"]=> int(-1) } ["_children"]=> array(0) { } ["occurredAt"]=> int(0) ["_codeInfo"]=> array(8) { ["name"]=> string(14) "dynamicsitemap" ["callback_type"]=> string(23) "callback_replace_single" ["callback_func"]=> string(30) "plugin_dynamicsitemap_callback" ["callback_params"]=> array(1) { ["usecontent_param"]=> array(2) { [0]=> string(7) "include" [1]=> string(7) "exclude" } } ["content_type"]=> string(5) "block" ["allowed_within"]=> array(3) { [0]=> string(8) "listitem" [1]=> string(5) "block" [2]=> string(6) "inline" } ["not_allowed_within"]=> array(0) { } ["flags"]=> array(5) { ["closetag"]=> int(-1) ["opentag.before.newline"]=> int(2) ["opentag.after.newline"]=> int(2) ["closetag.before.newline"]=> int(2) ["closetag.after.newline"]=> int(2) } } } :

 

これらのことから、$node_object そのものを取り去ってパラメータを4っにしちゃう方法もありでしょうかね。

FlatPess 記事

Copyright c  flatpress.info 2015. All Rights Reserved.