#author("2018-03-09T00:50:30+09:00;2007-08-18T20:55:54+09:00","","")
**[[質問箱/286]] [#z47b1352]
|RIGHT:70|LEFT:410|c
|~カテゴリ||
|~サマリ|ページ名置換(&page;)が置換されない|
|~バージョン|1.4rc4|
|~投稿者|[[YMD]]|
|~状態|完了|
|~投稿日|&new{2003-10-16 (THU) 13:17:21};|
***質問 [#aa6c4845]
ページ名置換(&page;)や日時置換(&date;など)が行われず、そのまま&page;と
表示されてしまいます。置換を行うにはpukiwiki.ini.phpなどで設定変更が必要なのでしょうか?
非常に簡単なことかも知れませんが、よろしくお願いします。

使用状況は以下です。
-PukiWiki:1.4rc4
-OS:Windows 2000 Server
-WebServer:Apache1.3.28
-PHP:4.3.3

***回答 [#q47fbc9f]
-[[reimy]] &new{2003-10-16 (THU) 17:15:54};
~pukiwiki.ini.phpの中でユーザー定義を行なう必要があります。
 // ユーザ定義ルール(直接ソースを置換)
 $str_rules = array(
	'&now;' => format_date(UTIME),
	'&date;' => get_date($date_format),
	'&time;' => get_date($time_format),
	'now\?' => format_date(UTIME),
	'date\?' => get_date($date_format),
	'time\?' => get_date($time_format),
	'&page;' => substr($page,strrpos('/'.$page,'/')),
	'&fpage;' => $page,
 );
-[[YMD]] &new{2003-10-17 (FRI) 12:57:42};
~回答ありがとうございます。&date;は正常に表示されるようになりました。しかし、&page;は駄目です。&fpage;で何も表示されないので、$pageに値が入っていないようです。どこで$pageにページ名が代入されるのでしょうか。
--[[Ratbeta]] &new{2003-10-17 (FRI) 19:11:53};
~$pageを$_GET['page']にしたらどうでしょうか?
---[[YMD]] &new{2003-10-20 (MON) 16:44:29};
~Ratbetaさん、回答ありがとうございます。でも、$pageを$_GET['page']としてもうまくいきませんでした。
--[[Ratbeta]] &new{2003-10-20 (MON) 19:22:01};
~http://(pukiwikiへのパス)/index.php?cmd=read&page=(ページ名)の形式でアクセスするとどうでしょうか。http://(pukiwikiへのパス)/index.php?(ページ名)の形式では$pageに代入されていない可能性が有ります。
---[[Ratbeta]] &new{2003-10-20 (MON) 19:26:31};
~ぁ、$pageも$_GET['page']も試してくださいね。
--[[YMD]] &new{2003-10-21 (TUE) 10:20:08};
~ありがとうございます。試してみましたが、駄目のようです。
-[[reimy]] &new{2003-10-20 (MON) 20:56:39};
~PukiWiki 1.4rc3までは$pageが使用できましたが、1.4rc4では使用できなくなっているようです。
-[[merlin]] &new{2003-10-20 (MON) 22:54:42};
~$page だけを編集画面に書くのは使えなくなってますね。ユーザー定義の&page;  &fpage; ともに最新版とlinux apache 1.3 と PHP 4.3.2では動いています。Win2K+Apache+PHP4.3.3は環境構築中なんでまだうちでは未確認。
-[[sha]] &new{2003-10-21 (TUE) 01:29:49};
~ほんとだ。$pageが使えませんね。そこで、使えるようになるまでのつなぎという意味で、お手軽ご気楽プラグインを作ってみました。「&ref(fpage.inc.php.1);
」「&ref(page.inc.php.1);」
~pukiwiki.ini.phpの$str_rulesで設定するのと動作が微妙に違っているのに注意。$str_rulesが編集などをすると、&fpage;等が文字列に置き換わってしまうのに対し、プラグインの場合は表示だけページ名に置き換わって、実態は&fpage;等のままです。(もちろんこの動作は仕様どおりなのですが)
~ところで偶然気づいたのですが、このプラグインを設置して1度使用し、その後削除しておくと、いつのまにか$str_rulesの$pageが使用できるようになってるんですね。なぜ??
-[[YMD]] &new{2003-10-21 (TUE) 08:21:25};
~shaさんのプラグインで表示できるようになりました。Ratbetaさん、reimyさん、merlinさん、shaさん、ありがとうございました。
~ところで、私の所(Win2K+Apache+PHP4.3.3)では、page.inc.phpをインストール後に削除しても、$str_rulesは使用できないようです。元々私のやりたかったことには、以下でした。このときは、$str_rulesを使って実体も置き換わってくれた方が良さそうです。別のもっと良い方法があれば、教えてください。
--やりたかったこと:2種類のtemplateを用意して(例えば、報告、費用)、「複製」を使ってケースA用のページ(報告/A、費用/A)を作ります。このとき、報告書Aから費用Aに自動でリンクを張るためには、報告書templateに[[費用/&page;]]と書けば良いかと考えてました。
--このページ(1.4rc3)では、&page;は置き換わりますね。
-[[sha]] &new{2003-10-22 (WED) 00:45:17};
~$str_rulesの&fpage;などを有効にする方法を見つけました。
~init.php v1.62の134行目付近「外部からくる変数をサニタイズ」から、256行目付近「初期設定($WikiName,$BracketNameなど)」の手前までの範囲を、64行目付近「設定ファイル読み込み」の直前に移動させます。その変更を加えたもの→「&ref(init.php-1621);」
~これで外部変数を$str_rulesで参照できるようになりますので、例えば以下のように設定することでページが置き換えられます。ただし、これによって、他の場所で未定義変数の使用などの副作用が発生する可能性があります。でも、私がざっくり見たところ、それはなさそうな気がしましたけど。。。(確信なし)
 '&fpage;' => $vars['page'],
--[[sha]] &new{2003-10-22 (WED) 09:08:00};
~副作用あるようです。$defaultpageがうまくないようですね。うーむ。
-[[reimy]] &new{2003-10-22 (WED) 10:13:17};
~もともと$pageを$str_rulesで参照する方法は裏技ですので…(^^;;
-[[ぱんだ]] &new{2003-10-24 (FRI) 10:30:22};
~こんな手もあります。あんまり美しくないですが。
 diff -u -r1.62 init.php
 --- init.php	12 Sep 2003 00:36:24 -0000	1.62
 +++ init.php	24 Oct 2003 01:29:03 -0000
 @@ -291,4 +291,9 @@
  	'#related$'=>'<del>#related</del>',
  	'^#contents$'=>'<del>#contents</del>'
  ),$line_rules);
 +// str_rulesにページ参照を加える
 +$str_rules = array_merge(array(
 +	'&page;' => array_pop(explode('/',$vars['page'])),
 +	'&fpage;' => $vars['page']
 +),$str_rules);
  ?>
- [[Q&Aに移動>Q&A/プラグイン#r400ae1c]] -- [[zm]] &new{2007-08-18 (土) 20:57:31};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.064 sec.

OSDN