トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/95

ページの作成や編集にはユーザ登録が必要です。

ページの土台をTemplate化する。

  • 投稿者: ななしさん2改め、イタリアーナ
  • カテゴリ: 本体
  • 優先度: 低
  • 状態: リリース済
  • 日時: 2003年07月08日 21時35分13秒

 内容

どこに書き込めばよいのか迷ったのですが、プラグインではないし、雑談に上げるには添付ファイルが大きすぎる気がするので、流れ流れてこちらにたどり着きました。板?違い申し訳ありません。

wiki3_4_2dev2をベースに、ページの土台をテンプレート化するパッチを書いてみました。書式はHTML::Templateに専用ページ読み込み命令を加えた形になっています。

読み込み命令の書式: <!--FSWIKI_INCLUDE PAGE="ページ名"-->

余り詳しくは無いので穴だらけだとは思いますが、一応以下の点に対応できるようにしているつもりです。

  • 携帯電話からのアクセス。
  • 管理者以外により作られる部分をescape。(ページタイトル等)
  • 存在しないページの読み込み。

利点

  • レイアウトの自由度があがる。
  • HTMLヘッダをユーザが変更しやすくなる。

欠点

  • tDiaryのテーマとの互換性がなくなる可能性がある。
  • 複数ページを読ませる場合の負荷。
  • ある程度の知識がないと変更は難しいかもしれない。

こういった方向性での拡張は開発方針からは外れますでしょうか?

 コメント

  • あ、ソースの中とここでハンドルが違いますが気にせずに、気にせずに……・。うぁ、やっちゃったー。 - イタリアーナ (2003年07月08日 21時43分00秒)
  • 方向性としてはいいんじゃないでしょうか。携帯とかはIFで分けるよりも別テンプレートにして振り分けたほうがよいかもしれませんね。 - たけぞう (2003年07月09日 14時10分54秒)
  • 振り分けテンプレート版を作ってみました。 - イタリアーナ (2003年07月10日 12時29分36秒)

修正点は以下3点です。

  • wiki3_4_2dev3ベースにした。
  • テンプレートをパソコン用と携帯用で振り分けるようにしました。
  • テンプレートをテンプレートテーマとして、アドミン管理メニュー>環境設定で選べるようにしました。

手を加えたのは以下3ファイルです。

  • wiki.cgi
  • lib/Wiki.pm
  • plugin/admin/AdminConfigHandler.pm

導入手順

パッチwiki3_4_2dev3.patch.zip(436)を当てていただいて、$(data_dir)/config/config.datに以下の一行を追加。

site_tmpl_theme=default

site.zip(442)のsiteフォルダを$(data_dir)/tmplにコピーして、以下のようなフォルダ構成になるようにします。

$(data_dir)/tmpl/site/default/default.tmpl

これで上手く動いてくれると思います。

テーマのサンプルとして、table3col(画面を3分割にする) を入れておきました。宜しければお試しください。

…と、こんな感じでいかがでしょうか?

  • 申し訳ありません。admin_config.tmpl(459) も変更しておりました。これを$(data_dir)/tmplに放り込んでくださいませ。関連ファイルは以上3つ(wiki3_4_2dev3.patch.zip(436) site.zip(442) admin_config.tmpl(459))になります。 - イタリアーナ (2003年07月11日 00時58分42秒)
  • ありがとうございます。テンプレート化することでデザインの大幅な変更も容易になりますね。 - たけぞう (2003年07月11日 09時21分48秒)
  • ちょっと忙しくて作業が滞っているのですが、取り込む方向で考えています。 - たけぞう (2003年07月16日 21時00分17秒)
  • ありがとうございます。楽しみにしております。 - イタリアーナ (2003年07月17日 01時17分30秒)
  • 1つ問題があるのですが、現在Menuやヘッダ、フッタというページが存在しない場合、div自体を出力しないような作りになっているのですが、このパッチだと「ページが存在しない」というメッセージが表示されてしまいますよね。かといって全てのページ名をパラメータとしてテンプレートに渡すわけにもいかないし・・・。 - たけぞう (2003年07月18日 12時26分19秒)
  • ちょっと考えてみました。 - イタリアーナ (2003年07月18日 23時17分04秒)

1. Menu、Header、Footerが存在するかどうかのフラグを渡すようにして、HTML::Template 側で処理させる。また、インクルードにエラーメッセージ出力抑制フラグをつける。オン/オフはフラグがついているかどうかで判断。

<!--TMPL_IF NAME="USE_SIDEMENU"-->     // これも追加したほうが何かとよいかも。
<!--TMPL_IF NAME="EXIST_MENU"-->
<!--TMPL_IF NAME="EXIST_HEADER"-->
<!--TMPL_IF NAME="EXIST_FOOTER"-->
<!--FSWIKI_INCLUDE PAGE="ページ名"-->          // 抑止なし
<!--FSWIKI_INCLUDE PAGE="ページ名" IGNORE-->   // 抑止あり

2. インクルードをさらに拡張して、タグ、クラス名の指定が出来るようにするのも良いかもしれません。(タグをDiv固定にして、クラス名のみの指定でもよいかも。)

命令

<!--FSWIKI_INCLUDE PAGE="ページ名" TAG="div" CLASS="main" IGNORE-->

出力

<div class="main>ページの内容</div>

3. 更に、これも追加すると…。

<!--FSWIKI_IF EXIST_PAGE="ページ名"-->
<!--FSWIKI_ELSE-->
<!--/FSWIKI_IF-->

表現力は上がりますが実装が大変になります(^^;

  • 2だとMenuが存在しないときはメインコンテンツ部分をdiv.mainで囲まないというような制御ができないですよね(今はそうなってます)。インクルードするページがMenuやHeaderなど限定されるのであれば1でもいいと思うのですが、テンプレートする意義を考えるとできれば3が実現できるといいと思います。ちょっとHTML::Templateの中を見て考えてみます。 - たけぞう (2003年07月19日 20時50分20秒)
  • 3.4.2dev7で取り込みました。 - たけぞう (2003年07月21日 15時14分22秒)
  • 3.4.2dev7頂戴いたしました。今テンプレートをこねくり回しております。楽しい! それにしても、こんなシンプルな方法で実装出来るとは…。 - イタリアーナ (2003年07月21日 22時47分03秒)
  • 3.4.2でリリースしました。 - たけぞう (2003年07月26日 22時31分02秒)
お名前: コメント:
admin_config.tmpl site.zip wiki3_4_2dev2.patch.zip wiki3_4_2dev3.patch.zip

最終更新時間:2003年08月10日 09時43分25秒