- 追加された行はこの色です。
- 削除された行はこの色です。
**[[質問箱5/106]] [#h62ea71c]
#author("2018-03-11T21:48:54+09:00;2012-09-10T21:10:03+09:00","","")
**[[質問箱/5106]] [#h62ea71c]
|RIGHT:70|LEFT:410|c
|~カテゴリ|デザイン・CSS・スキン|
|~サマリ|差分表示のときだけ整形済みテキストを折り返し表示したい|
|~バージョン|1.4.7_notb_utf8|
|~投稿者|[[tfujii]]|
|~状態|質問|
|~状態|完了|
|~投稿日|&new{2012-09-09 (日) 15:09:50};|
***質問 [#gc446099]
:概要|~
またお世話になります。差分表示(?cmd=diff)のときだけ整形済みテキスト(pre)を折り返し表示したいです。~
~
:試行錯誤したこと|~
pukiwiki.skin.php で、~
skin/pukiwiki.skin.php で、~
<?php print($vars['cmd']); ?>
とやると、差分ページでは"diff"と返される事を知っていたので、イケる!と思って下記のようにしたのですができませんでした。。~
~
pukiwiki.css.php ※余計なものは省略しています~
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~
***回答 [#wd0e4683]
- pukiwiki.css.php はcssを出力するだけの独立したプログラムですのでpukiwiki本体の変数は参照できないです。 -- &new{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]] &new{2012-09-10 (月) 13:10:23};
- 解決済みみたいだけど、いちおう別回答も。plugin/diff.inc.phpが返す<pre>を<pre class="diff">に変えて(ソースを書き換えて)、cssにpre.diffを追加定義する~とか -- &new{2012-09-10 (月) 19:25:06};
- 別解答ありがとうございます。その方法でもできました。変数や条件分岐を増やさない点が良いですね。 -- [[tfujii]] &new{2012-09-10 (月) 20:25:51};
#comment
***まとめ [#p5c69d14]
下記の その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+ */
~(省略)~
}
のように変える。~