質問箱/5106

カテゴリデザイン・CSS・スキン
サマリ差分表示のときだけ整形済みテキストを折り返し表示したい
バージョン1.4.7_notb_utf8
投稿者tfujii?
状態完了
投稿日2012-09-09 (日) 15:09:50

質問

概要

またお世話になります。差分表示(?cmd=diff)のときだけ整形済みテキスト(pre)を折り返し表示したいです。

試行錯誤したこと

skin/pukiwiki.skin.php で、
<?php print($vars['cmd']); ?>
とやると、差分ページでは"diff"と返される事を知っていたので、イケる!と思って下記のようにしたのですができませんでした。。

skin/pukiwiki.css.php ※余計なものは省略しています
pre {
<?php if ($vars['cmd'] == 'diff') { ?>
	white-space: -moz-pre-wrap; /* Mozilla */
	white-space: -pre-wrap;     /* Opera 4-6 */
	white-space: -o-pre-wrap;   /* Opera 7 */
	white-space: pre-wrap;      /* CSS3 */
	word-wrap: break-word;      /* IE 5.5+ */
<?php } else { ?>
	white-space:pre;
<?php } ?>
}

$vars が読み込まれていないのかと思い、
<?php global $vars; ?>
を記述に加えてみたのですがそれでもうまくいきませんでした。

なぜCSSでは$varsが使えないのでしょうか(そもそも$varsが何者かもよくわかっていないのですが・・^^;)

PKWK使用環境

Apache/2.2.22 (Win32) PHP/5.3.14

回答

  • pukiwiki.css.php はcssを出力するだけの独立したプログラムですのでpukiwiki本体の変数は参照できないです。 -- 2012-09-09 (日) 20:11:00
  • pukiwiki.skin.phpのほうからpukiwiki.css.phpに $vars['cmd']の値を渡してやる方法が考えられます。
  • pukiwiki.skin.phpのcss指定部分の変更例
    <link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>" charset="<?php echo $css_charset ?>" />
    の部分を
    <link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset.'&cmd='.$vars['cmd'] ?>" charset="<?php echo $css_charset ?>" />
    のように換える
  • 受け取ったpukiwiki.css.phpのほうで
    $cmd  = isset($_GET['cmd'])   ? $_GET['cmd']    : '';
    としてやれば、$cmdに本体の変数の値を取り入れることができるでしょう
  • ありがとうございます、できました^^。CSSで印刷時かどうかを区別するための $media という変数もpukiwiki.skin.phpの方から同じ要領で値が渡されていますね。とても参考になりました。感謝です。 -- tfujii? 2012-09-10 (月) 13:10:23
  • 解決済みみたいだけど、いちおう別回答も。plugin/diff.inc.phpが返す<pre>を<pre class="diff">に変えて(ソースを書き換えて)、cssにpre.diffを追加定義する~とか -- 2012-09-10 (月) 19:25:06
  • 別解答ありがとうございます。その方法でもできました。変数や条件分岐を増やさない点が良いですね。 -- tfujii? 2012-09-10 (月) 20:25:51

まとめ

下記の その1 または その2 を行えば、差分表示時に整形済みテキストを折り返し表示できます。複雑ではないかもしれませんが一応まとめておきました。

その1

skin/pukiwiki.skin.php の、
<link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>" charset="<?php echo $css_charset ?>" />

<link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset.'&cmd='.$vars['cmd'] ?>" charset="<?php echo $css_charset ?>" />
に置換。

skin/pukiwiki.css.php の、
$media   = isset($_GET['media'])   ? $_GET['media']    : '';
が書いてある辺りなどに、
$cmd  = isset($_GET['cmd'])   ? $_GET['cmd']    : '';
を追記しておき、
pre {
~(省略)~
}
の中にある、
	white-space:pre;
という行を
<?php if ($cmd == 'diff') { ?>
	white-space: -moz-pre-wrap; /* Mozilla */
	white-space: -pre-wrap;     /* Opera 4-6 */
	white-space: -o-pre-wrap;   /* Opera 7 */
	white-space: pre-wrap;      /* CSS3 */
	word-wrap: break-word;      /* IE 5.5+ */
<?php } else { ?>
	white-space:pre;
<?php } ?>
}
の10行に置換する。


その2

plugin/diff.inc.php 内にある、
<pre>

<pre class="diff">
にすべて置換する。

skin/pukiwiki.css.php の
pre {
~(省略)~
	white-space:pre;
~(省略)~
}
を複製し、
pre.diff {
~(省略)~
	white-space: -moz-pre-wrap; /* Mozilla */
	white-space: -pre-wrap;     /* Opera 4-6 */
	white-space: -o-pre-wrap;   /* Opera 7 */
	white-space: pre-wrap;      /* CSS3 */
	word-wrap: break-word;      /* IE 5.5+ */
~(省略)~
}
のように変える。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-09-10 (月) 21:10:03
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.197 sec.

OSDN