**[[質問箱4/580]] [#gb56bd75] #author("2018-03-11T21:00:33+09:00;2010-05-26T23:59:54+09:00","","") **[[質問箱/4580]] [#gb56bd75] |RIGHT:70|LEFT:410|c |~カテゴリ|| |~サマリ|テーブルの種類を増やしたい| |~バージョン|1.4.7| |~投稿者|[[gnil]]| |~状態|完了| |~投稿日|&new{2010-05-25 (火) 01:16:04};| ***質問 [#se0d9262] 自分で作成した表のスタイルを複数使い分けたいです。~ [[質問箱4/243]]の方法を試しましたが<table>のclass指定ができないので他の方法はありませんでしょうか? [[質問箱/4243]]の方法を試しましたが<table>のclass指定ができないので他の方法はありませんでしょうか? ***回答 [#g71570cf] - table のclass を個別に指定可能にする改造なら、[[質問箱3/510]] はどうでしょうか?今はteanan さんのサイトにアクセスできないみたいですが、質問者が確認のためにパッチ適用後のソースを載せているので、参考にはなるかと思います。 -- &new{2010-05-25 (火) 18:29:24}; - [[質問箱3/510]]は試したのですがtableだけでth,tdが指定出来なかったのです・・・&br;table,th,tdを指定したいのですが[[質問箱3/510]]と[[質問箱4/243]]は一緒に使えなさそうです。 -- [[gnil]] &new{2010-05-25 (火) 21:17:46}; - table のclass を個別に指定可能にする改造なら、[[質問箱/3510]] はどうでしょうか?今はteanan さんのサイトにアクセスできないみたいですが、質問者が確認のためにパッチ適用後のソースを載せているので、参考にはなるかと思います。 -- &new{2010-05-25 (火) 18:29:24}; - [[質問箱/3510]]は試したのですがtableだけでth,tdが指定出来なかったのです・・・&br;table,th,tdを指定したいのですが[[質問箱/3510]]と[[質問箱/4243]]は一緒に使えなさそうです。 -- [[gnil]] &new{2010-05-25 (火) 21:17:46}; - 別個に作成された改造なので変数名が被っているなどの問題がありますが、それらを解決すれば同時に使うことも(見落としがなければ)可能だと思うのですが・・・&br;ところで、質問箱4/243は前半と後半のどちらの改造を使おうとしていますか?「一緒に使えなさそう」とおっしゃっているので、変数名や if (! preg_match('/^\|(.+)\|([hHfFcC]?)$/', $text, $out)) { の部分が被っている後半の改造だと予想して、回答していますが。 -- &new{2010-05-25 (火) 21:46:53}; - 前半のものは何故か上手く変更されないので後半にある改造方法を使用しようとしていました。&br;ただこちらの方法で自動設定(通常の記述)にするとclassがtd1とtd2の交互に変更してしまい&br;tdの1と2のpaddingが違うため見難くなります。&br;[[質問箱4/243]]の635行目あたりにあるswitch ($flag)を一部消してどうにかしましたが&br;合っているのかどうか分からないので現在は使用していません。&br; - 前半のものは何故か上手く変更されないので後半にある改造方法を使用しようとしていました。&br;ただこちらの方法で自動設定(通常の記述)にするとclassがtd1とtd2の交互に変更してしまい&br;tdの1と2のpaddingが違うため見難くなります。&br;[[質問箱/4243]]の635行目あたりにあるswitch ($flag)を一部消してどうにかしましたが&br;合っているのかどうか分からないので現在は使用していません。&br; if (! preg_match('/^\|(.+)\|([hHfFcC]?)$/', $text, $out)) { の部分は if (! preg_match('/^\|(.+)\|([hHfFcCsS]?)([12]?)$/', $text, $out)) { 見たいに変えればいいのですかね?&br;詳しくないので分かりませんがとりあえず二つとも差分を当ててみます・・・ -- [[gnil]] &new{2010-05-25 (火) 23:45:02}; - やはり上手く行かないのでどなたか助言や良い方法がありましたら教えてください。 -- [[gnil]] &new{2010-05-26 (水) 01:15:22}; - paddingが違うのは[[CSS]]の設定の問題では? -- &new{2010-05-26 (水) 20:33:30}; - paddingが違うのは意図的にやってるので知ってます、&br;[[質問箱4/243]]は自動設定もしくは通常記述で書いてしまうとstyle_td1とstyle_td2が交互にループしてしまうのですが&br;「switch ($flag){」の部分を変更することで交互にループしないように出来ましたが指定できるものはtdとthだけです。&br;今回はtdやtableのclassを指定して使い分けたいので、CSSの設定は正常です。 -- [[gnil]] &new{2010-05-26 (水) 21:07:39}; - paddingが違うのは意図的にやってるので知ってます、&br;[[質問箱/4243]]は自動設定もしくは通常記述で書いてしまうとstyle_td1とstyle_td2が交互にループしてしまうのですが&br;「switch ($flag){」の部分を変更することで交互にループしないように出来ましたが指定できるものはtdとthだけです。&br;今回はtdやtableのclassを指定して使い分けたいので、CSSの設定は正常です。 -- [[gnil]] &new{2010-05-26 (水) 21:07:39}; - 質問箱3/510と質問箱4/243の差分を適当にマージしてみました。 -- lib/convert_html.php (行数は、r1.18 の時の目安) ---115行目あたり // '|'-separated table function & Factory_Table(& $root, $text) { - if (! preg_match('/^\|(.+)\|([hHfFcC]?)$/', $text, $out)) { + if (! preg_match('/^\|(.+)\|([hHfFcCsS]?)([12]?)$/', $text, $out)) { return Factory_Inline($text); } else { return new Table($out); } } --- 535行目あたり - function toString() + function toString($flag = '') { if ($this->rowspan == 0 || $this->colspan == 0) return ''; - $param = ' class="style_' . $this->tag . '"'; + $param = ' class="style_' . $this->tag . $flag . '"'; if ($this->rowspan > 1) $param .= ' rowspan="' . $this->rowspan . '"'; if ($this->colspan > 1) { --- 560行目あたり class Table extends Element { var $type; var $types; var $col; // number of column + var $style_table; + var $style_cell; function Table($out) { parent::Element(); $cells = explode('|', $out[1]); $this->col = count($cells); $this->type = strtolower($out[2]); $this->types = array($this->type); + $this->style_cell = array($out[3]); $is_template = ($this->type == 'c'); $row = array(); - foreach ($cells as $cell) - $row[] = & new TableCell($cell, $is_template); + $this->style_table = 'style_table'; + if($this->type == 's') { + $this->style_table = trim(array_shift($cells)); + for ($ncol = 0; $ncol < $this->col; $ncol++) + $row[] = & new TableCell('', $is_template); + } else { + foreach ($cells as $cell) + $row[] = & new TableCell($cell, $is_template); + } $this->elements[] = $row; --- 585行目あたり function & insert(& $obj) { $this->elements[] = $obj->elements[0]; $this->types[] = $obj->type; + $this->style_cell[] = $obj->style_cell[0]; return $this; } --- 610行目あたり // Set colspan and style $stylerow = NULL; + $stylecss = ''; foreach (array_keys($this->elements) as $nrow) { $row = & $this->elements[$nrow]; - if ($this->types[$nrow] == 'c') + if ($this->types[$nrow] == 'c') { $stylerow = & $row; + $stylecss = & $this->style_cell[$nrow]; + } else if ($stylecss != '' && $this->style_cell[$nrow] == '') { + $this->style_cell[$nrow] = $stylecss; + } $colspan = 1; foreach (array_keys($row) as $ncol) { if ($row[$ncol]->colspan == 0) { --- 635行目あたり // toString $string = ''; foreach ($parts as $type => $part) { +// $flag = 0; $part_string = ''; foreach (array_keys($this->elements) as $nrow) { if ($this->types[$nrow] != $type) continue; + +// switch ($flag) +// { +// case 1: +// ++$flag; +// break; +// +// default: +// $flag = 1; +// } + if ($this->style_cell[$nrow] == '') { +// $tmp = $flag; + $tmp = '1'; + } else { + $tmp = $this->style_cell[$nrow]; + } $row = & $this->elements[$nrow]; $row_string = ''; foreach (array_keys($row) as $ncol) - $row_string .= $row[$ncol]->toString(); + $row_string .= $row[$ncol]->toString($tmp); $part_string .= $this->wrap($row_string, 'tr'); } $string .= $this->wrap($part_string, $part); } - $string = $this->wrap($string, 'table', ' class="style_table" cellspacing="1" border="0"'); + $string = $this->wrap($string, 'table', ' class="' . + htmlspecialchars($this->style_table) . '" cellspacing="1" border="0"'); return $this->wrap($string, 'div', ' class="ie5"'); } - 見落としなどがあるかもしれませんが・・・。ちなみに、コメントにした部分はtdやthのclassを自動で可変にする機能の部分全部ですが、パフォーマンスを気にしないのであればこの部分をコメントにする(消す)方法ではなく、switch構文のdefaultで$flag = 1にする部分だけ残して他の分岐(case 1:しかここではないですが)を消すでも構わないです。 -- &new{2010-05-26 (水) 22:18:43}; - 質問箱4/243の前半部分は自動指定''のみ''の改造なので、個別指定をしたいという今回の要望の場合には役立たずですね。(「上手く変更されない」のではなく、手動設定が実装されていない) -- &new{2010-05-26 (水) 22:22:28}; - 「各セルに個別のスタイルを指定したい」みたいな質問が、過去にあったような気がする。(質問箱4/243のような行指定ではなかったハズ。詳しくは思い出せないけど) -- &new{2010-05-26 (水) 22:27:47}; - 出来ました。本当にありがとうございます!&br;説明不足ですがセルを個別に指定する必要はないのでこの方法で大丈夫です。&br;このまま使ってみて問題が有りましたらまたお世話になるかもしれませんが、&br;その時はよろしくお願いします。 -- [[gnil]] &new{2010-05-26 (水) 23:59:27}; #comment