質問箱/4540

カテゴリ
サマリ表組みの文字をtopにする
バージョン1.4.7
投稿者yataro?
状態完了
投稿日2009-12-22 (火) 20:31:22

質問

表(テーブル)の中の文字を上に持っていく方法はありますでしょうか? 現時点では改行を使って上に持っていくしかないので、どうにかできるとうれしいのですが。

文字列1
文字列2
文字列3
文字列4
文字列1

となってしまうので、右側の表の文字を上にしたいのです。

回答

  • 質問箱/3343 -- 2009-12-23 (水) 03:29:24
  • wiki 全体で固定するなら、CSS を設定すればできます。表やセルごとに変えたい場合は、改造しないとできません。
    lib/convert_html.php 1.18基準で
    • 485行目あたり
       	var $rowspan = 1;
       	var $style; // is array('width'=>, 'align'=>...);
      +	var $valign = '';
       
       	function TableCell($text, $is_template = FALSE)
       	{
    • 490行目あたり
       		$this->style = $matches = array();
       
      -		while (preg_match('/^(?:(LEFT|CENTER|RIGHT)|(BG)?COLOR\(([#\w]+)\)|SIZE\((\d+)\)):(.*)$/',
      +		while (preg_match('/^(?:(LEFT|CENTER|RIGHT)|(BG)?COLOR\(([#\w]+)\)|SIZE\((\d+)\)|(TOP|MIDDLE|BOTTOM)):(.*)$/',
       		    $text, $matches)) {
       			if ($matches[1]) {
       				$this->style['align'] = 'text-align:' . strtolower($matches[1]) . ';';
      -				$text = $matches[5];
      +				$text = $matches[6];
       			} else if ($matches[3]) {
       				$name = $matches[2] ? 'background-color' : 'color';
       				$this->style[$name] = $name . ':' . htmlspecialchars($matches[3]) . ';';
      -  				$text = $matches[5];
      +				$text = $matches[6];
       			} else if ($matches[4]) {
       				$this->style['size'] = 'font-size:' . htmlspecialchars($matches[4]) . 'px;';
      -  				$text = $matches[5];
      +				$text = $matches[6];
      +			} else if ($matches[5]) {
      +				$this->valign = strtolower($matches[5]);
      +				$text = $matches[6];
       			}
       		}
       		if ($is_template && is_numeric($text))
       			$this->style['width'] = 'width:' . $text . 'px;';
    • 545行目あたり
       		if ($this->colspan > 1) {
       			$param .= ' colspan="' . $this->colspan . '"';
       			unset($this->style['width']);
       		}
      +		if ($this->valign != '') {
      +			$param .= ' valign="' . $this->valign . '"';
      +		}
       		if (! empty($this->style))
       			$param .= ' style="' . join(' ', $this->style) . '"';
    と改造すれば、TOP:, MIDDLE:, BOTTOM: のルールを追加できるはず。 -- 2009-12-23 (水) 03:58:41
  • wiki全体ではなく、上記改造の通りで指定したいと思っていました。早速やってみたのですが画面がエラーの真っ白になってうまくいきませんでした。
    質問箱/4243の改造をしているのですが、それが原因なのでしょうか? -- yataro? 2009-12-24 (木) 01:06:30
  • ぱっと見では、それだけだと干渉しないハズなので、追記位置がずれてパースエラー(構文エラー)になってるだけだとは思うんですが・・・。Q. 設置後にアクセスすると画面が真っ白になって、エラーメッセージが何も表示されない を参考に、エラーを確認してみては?(ただ、PHP 5 ならdev:BugTrack2/146 のエラーとかまで、表面化するかもしれませんが) -- 2009-12-24 (木) 02:31:10
  • ログににとって試したところ、この行でエラーがでていました。
    if (isset($this->valign != '') {
    一応何度も見直したのですが、追記位置は大丈夫でした。
    他に何かと干渉しているののもしれませんが、このエラーで何か分かることはありますでしょうか? -- yataro? 2009-12-25 (金) 06:15:03
  • すみません、おもいっきりゴミがついてます。上のは直しましたが
    if ($this->valign != '') {
    が正しいです。(isset() を開きかけて閉じてないし、おかしな事になってる・・・)
    差分を作り直した時に、混じったようです。手元では直してるのにコッチに反映させ忘れたまま、という状態に気がついていなかった・・・ -- 2009-12-25 (金) 11:05:09
  • おお、ありがとうございます。文字が上にくるようになりました。
    この機能はデフォルトであると思っていたのですが、質問してよかったです。また1つwikiの編集が便利になりました。
    間違いの修正なども本当にありがとうございました。 -- yataro? 2009-12-26 (土) 04:18:42
  • CSS ファイルの設定を上書きできるstyle 属性版を。
    lib/convert_html.php 1.18 のデフォルト基準で490行目あたり
     		$this->style = $matches = array();
     
    -		while (preg_match('/^(?:(LEFT|CENTER|RIGHT)|(BG)?COLOR\(([#\w]+)\)|SIZE\((\d+)\)):(.*)$/',
    +		while (preg_match('/^(?:(LEFT|CENTER|RIGHT)|(BG)?COLOR\(([#\w]+)\)|SIZE\((\d+)\)|(TOP|MIDDLE|BOTTOM)):(.*)$/',
     		    $text, $matches)) {
     			if ($matches[1]) {
     				$this->style['align'] = 'text-align:' . strtolower($matches[1]) . ';';
    -				$text = $matches[5];
    +				$text = $matches[6];
     			} else if ($matches[3]) {
     				$name = $matches[2] ? 'background-color' : 'color';
     				$this->style[$name] = $name . ':' . htmlspecialchars($matches[3]) . ';';
    -  				$text = $matches[5];
    +				$text = $matches[6];
     			} else if ($matches[4]) {
     				$this->style['size'] = 'font-size:' . htmlspecialchars($matches[4]) . 'px;';
    -  				$text = $matches[5];
    +				$text = $matches[6];
    +			} else if ($matches[5]) {
    +				$this->style['valign'] = 'vertical-align:' . strtolower($matches[5]) . ';';
    +				$text = $matches[6];
     			}
     		}
     		if ($is_template && is_numeric($text))
     			$this->style['width'] = 'width:' . $text . 'px;';
    vertical-align をミスタイプしたからテストで失敗していた、という事にやっと気がついたので、一応あげておきます。(本当は、これをあげるつもりだった) -- 2010-01-12 (火) 07:18:37

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-12 (火) 07:18:37
Site admin: PukiWiki Development Team

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

OSDN