質問箱/4528

カテゴリ
サマリ<li>内にあるテーブルのclassを変更したい
バージョン1.4.7
投稿者鳩サブレ?
状態完了
投稿日2009-11-21 (土) 00:33:52

質問

  • <li>内にテーブルを設置した場合、テーブルのclassを自動でstyle_tableからstyle_table2などに変更する事はできないでしょうか?
    通常のテーブルと違って設置すると変な位置になってしまい、marginなどを使ってどうしても自分で指定したいです。
  • 質問箱/3510の方法を使おうと思ったのですが、他に入っている改造の所為か、元の記述などが変化していて、差分を適用してもエラーが出て効果がありませんでした。

回答

  • 差し支えなければ、lib/convert_html.php にどんな改造をしているのか、おしえてもらえませんか?変に競合すると、よくないので。(質問箱/4243 みたいな改造なら、<table> そのものをいじってないので、おそらく大丈夫だと思いますが) -- 2009-11-21 (土) 01:52:31
    • デフォルト状態での簡易テストしかしていないので、もし自力でトラブル対応できるのなら、自動変更はこんなんでどうでしょう?(自信がなければ、手を出さずに上の質問に答えた方がいいですよ)
      lib/convert_html.php (r1.18 デフォルトの時の目安は650行目あたり)
       			$string .= $this->wrap($part_string, $part);
       		}
      -		$string = $this->wrap($string, 'table', ' class="style_table" cellspacing="1" border="0"');
      +		$class_name = is_a($this->parent, 'ListElement') ? 'style_table2' : 'style_table';
      +		$string = $this->wrap($string, 'table', ' class="' . $class_name . '" cellspacing="1" border="0"');
       
       		return $this->wrap($string, 'div', ' class="ie5"');
       	}
       }
      ただ、コレだと同じくListElement クラスを使っている、'dl', 'dt' の組み合わせ*1 にも適用されてしまいますが。 -- 2009-11-21 (土) 02:22:00
  • 改造は質問箱/4243もしていました。
    差分を見る限り、修正部分がこの辺りとかぶっている部分があったのでこれが原因ではないかとも思ったのですが、自分ではちょっとわかりませんでした。 -- 鳩サブレ? 2009-11-21 (土) 05:05:57
  • 自動変更の方はこれで問題無く動作してくれました。
    現状でみる限りトラブルも特に心配なさそうです。dt、dl要素などの件もまったく問題無いです。
    この仕様でずっと悩んでいましたので・・・本当にありがとうございます。
    • この件では当然完了としておきましたが、まったく同様の変更をpre要素にも適用する事は可能でしょうか?
      <li>内などのpreの場合にだけclassを挿入できるというものです。
      サマリの内容とは離れてしまいましたが、もしよろしければお返事をお願い致します。 -- 鳩サブレ? 2009-11-21 (土) 05:05:57
  • Pre クラスのtoString 関数で同じような事をすれば、できますよ。
    lib/convert_html.php (r1.18 デフォルトの時の目安は745行目あたり)
     	}
     
     	function toString()
     	{
    -		return $this->wrap(join("\n", $this->elements), 'pre');
    +		if (is_a($this->parent, 'ListElement')){
    +			return $this->wrap(join("\n", $this->elements), 'pre', ' class="style_pre"');
    +		} else {
    +			return $this->wrap(join("\n", $this->elements), 'pre');
    +		}
     	}
     }
     
     // Block plugin: #something (started with '#')
    PukiWiki 書式からHTML へ変換する時に、どのような上下関係*2 になるのかがわかっていれば、分岐条件を調整することで他にも応用できるとは思います。(親の親の・・・、という事をしたい場合は、1番上を突き抜けないようにチェックする必要がありますが) -- 2009-11-21 (土) 06:11:06
  • この通りでズバリできました、何から何まで助かります。
    elseがそれ以外という意味なのはわかるのですが、分岐させる記述(今回はListElement)などがどこから調べれて発見するのかサッパリでした。
    skinの表示の分岐ぐらいなら多少わかるのですが、内部的なのはどうも複雑で答えにたどりつけることがなかったです。
    質問の内容と違う答えまでいただき、以後の指南までしてもらって感謝感謝です。
    これからは自分でも努力して解決できるよう頑張ってみたいと思います、色々とありがとうございました。 -- 鳩サブレ? 2009-11-21 (土) 19:25:42


*1 整形ルールで、定義リストと書かれているやつです
*2 Body クラスが1番上の親になるのは、PHP に慣れていればすぐにわかるとして、その後の入れ子関係が・・・。整形ルールの各ブロック要素の説明にある、「他のブロック要素の子要素になることができます(できません)」や「他のブロック要素を子要素にすることはできます(できません)」という文章が、理解の助けになるかもしれません。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-21 (土) 19:25:42
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.256 sec.

OSDN