#contentsをプルダウンメニューで表示させる

バージョン全部
投稿者まん?
状態完了
投稿日2008-11-19 (水) 10:20:16

メッセージ

意図としては、#contentは大変便利に使っていますが、表示量が膨大となり、それすらも視覚的にうっとうしくなってしまいました。 なのでプルダウンメニュー表示・選択からリンクできれば、スマートになるなかと思いました。

コメント

  • 非常にやっつけな改造でよければ、lib/convert_html.php内class Bodyのreplace_contentsを以下のようにすれば実現できます -- 山羊s1-20? 2008-12-07 (日) 00:12:16
   function replace_contents($arr)
   {
       $contents = $this->contents->toString();
       $contents_pulldown  = '<div class="contents">' . "\n" .
               '<a id="contents_' . $this->id . '"></a>' . "\n" .
               '<select onChange="location.href=\'#\'+this.options[this.selectedIndex].value">' . "\n";
       $level = 0;
       foreach(explode("\n", $contents) as $line)
       {
           if (preg_match('/^<ul/', $line))
           {
               $level++;
               $line = substr($line ,65);//<ul class="list...margin-left:16px"><li>
           }
           else $line = substr($line, 4);//<li>
           if (preg_match("/^<a href=\"#(.+)\"> (.+) <\/a>/", $line, $match))
               $contents_pulldown  .= '<option value="' . $match[1] .
                                   '">'.str_repeat('-', $level-1) .
                                   $match[2]."</option>\n";
           $level -= preg_match("/<\/ul>/", $line);
       }
       $contents_pulldown  .= '</select>' . "\n" . '</div>' . "\n";
       return $contents_pulldown;
   }
  • ありがとうございました。かなり便利になりました。個人的な感想では、プルダウンメニューの階層記号は、'-' 1つよりも '--' と2つ入れた方が見やすくなりました。 -- まん? 2008-12-18 (木) 09:59:07
  • それはよかったです。便利かなと思って取り組んでみたのですが、コンテナを作る際に表示部分も書き出してしまっているので、きれいにやるには何箇所も変える必要があり、このように「一旦生成されたHTMLテキストを読み込んで処理する」という形をとりました。そもそものプログラムにおいて、コンテナと表示部分が別になっていれば他の方法での拡張も可能だと思うのですが、何か理由があるのでしょうか? -- 山羊? 2008-12-18 (木) 14:32:35
  • 大変おもしろいプラグインだと思います。使わせていただきました。ありがとうございました。 -- kazu? 2009-11-03 (火) 15:36:57
  • 一応、ほかのやり方も。
    class Contents_UList extends Inline
    {
    	function Contents_UList($text, $level, $id)
    	{
    		// Reformatting $text
    		make_heading($text);
    
    		// A line started with "\n" means "preformatted" ... X(
    		$text = "\n" . '<option value="' . $id . '">' .
    			str_repeat('-', $level) . ' ' . trim($text) . '</option>';
    		return parent::Inline($text);
    	}
    
    	function toString()
    	{
    		return $this->wrap("\n" . join("\n", $this->elements) . "\n", 'select',
    			' onChange="location.href=\'#\'+this.options[this.selectedIndex].value"');
    	}
    }
    これを、lib/convert_html.php 内に元からあるclass Contents_UList と差し替える。これも、やっつけな改造な気がしますが・・・ -- 2010-03-09 (火) 16:19:08

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-10-08 (金) 09:57:33
Site admin: PukiWiki Development Team

PukiWiki 1.5.1+ © 2001-2016 PukiWiki Development Team. Powered by PHP 5.6.30-0+deb8u1. HTML convert time: 0.232 sec.

SourceForge.jp