*アンカー名重複を防ぐためにも、見出しタイトル出力で自動的に固定したアンカー出力を

-ページ: BugTrack
-投稿者: [[reimy]]
-優先順位: 緊急
-状態: 提案
-カテゴリー: 本体新機能
-投稿日: 2003-04-24 (木) 01:03:44
-バージョン: 

**メッセージ
[[BugTrack/285]]関連。

*、**、***で自動的に固定的なアンカーを出力してほしい。

手動でアンカーを付けると、#calendar_viewなどで複数ページを一括表示した場合に、アンカー名が重複してしまうので、一意的な固定したアンカーを出力してほしい。一つ一つの記事で重複しないアンカー名を手作業で付けるのはあまりにも非効率で非現実的な作業になってしまう。手作業で付け始めて困難に直面してます。

その場合、*、**、***で指定したタイトル全体を<a>タイトル</a>で囲んでほしい。

&amp;aname(hoge);ではなく&amp;aname(hoge){hogehoge};形式でのアンカー名設定が普及しない内にやらないと厄介なことになる(処理によってはアンカーがネストしてしまうおそれがある)ので、''1.4リリースまでに…という意味''で、あえて「緊急」にしておきます。
----
-見出し全体を<a>~</a>で囲んでしまうと、見出しの中でWikiNameやBracketNameにリンクを張ることができなくなってしまいますが。 -- [[ぱんだ]] &new{2003-04-24 (木) 14:19:55};
--そうしないと第三者にアンカーの存在がわかりません。もしくはタイトルの末尾に<a style="font-size:10px;vertical-align:super">■</a>というようにでもしますか? -- [[reimy]] &new{2003-04-24 (木) 14:19:58};
-とりあえず第一案です。 -- [[ぱんだ]] &new{2003-04-24 (木) 14:19:55};
++ページの更新時に(now ?などの置換と同時期に)見出し行に固有IDを挿入
 file.php/make_str_rules()
  // 日付・時刻置換処理
  foreach ($arr as $str)
  {
    if ($str != '' and $str{0} != ' ' and $str{0} != "\t")
    {
      foreach ($str_rules as $rule => $replace)
      {
        $str = preg_replace("/$rule/",$replace,$str);
      }
    }
 +  // 見出しに固有IDを付与する
 +  if (preg_match('/^(\*{1,3}(.(?!\[#[A-Za-z][\w-]+\]))+)$/',$str,$matches))
 +  {
 +    $anchor = md5(uniqid($matches[2],1));
 +    $str = rtrim($matches[1])." [#A$anchor]\n";
 +  }
    $retvars[] = $str;
  }
---md5()の出力をそのまま使っているので、妙に長い(32+1桁)です。
---未来永劫絶対にユニークである、とは断言できないですが、たぶん大丈夫でしょう。
---アンカーにしたい文字列を手動で[ #hogehoge]書いておくことも可能です。その場合、自動挿入はされません。
++コンバート時置換ルールに、上記IDをアンカーに置換するルールを追加
 default.ini.php,i_mode.ini.php,jphone.ini.phpなど
  '#related' => '<del>#related</del>',
 +'\[#([A-Za-z][\w-]+)\]' => '<a class="anchor" id="$1" href="#$1" title="$1">&dagger;</a>',
---ユーザ定義ルールなので、ページのどこに書いてあっても置換の対象になります。
++おまけ CSS .anchorを定義
 default.ja.css,default.en.css
 +.anchor
 +{
 +  font-size:xx-small;
 +  vertical-align:super;
 +}
-これだと#contentsや#ls2の出力にも &dagger; が出力されてしまいますねぇ…。ちとまずい。 -- [[reimy]] &new{2003-04-24 (木) 15:20:47};
-それとアンカーにhrefで設定する飛び先は単純に#hogehogeではなく、[[セキュリティホールmemo:http://www.st.ryukoku.ac.jp/~kjm/security/memo/]]のアンカーのように、includeしているページについては''includeされたページのURl''を付加してほしい。calendar2やcalendar_viewなどでincludeしている場合、日が変わるとそのページに存在しないアンカーとなってしまうので。 -- [[reimy]] &new{2003-04-24 (木) 16:01:01};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新の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.109 sec.

OSDN