**[[質問箱5/106]] [#h62ea71c]
|RIGHT:70|LEFT:410|c
|~カテゴリ|デザイン・CSS・スキン|
|~サマリ|差分表示のときだけ整形済みテキストを折り返し表示したい|
|~バージョン|1.4.7_notb_utf8|
|~投稿者|[[tfujii]]|
|~状態|完了|
|~投稿日|&new{2012-09-09 (日) 15:09:50};|
***質問 [#gc446099]
:概要|~
またお世話になります。差分表示(?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~


***回答 [#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+ */
 ~(省略)~
 }
のように変える。~


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.044 sec.

OSDN