• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(ページ,思い付き,実装,設計,コード,目次);

詳細な設計→Page

*目次 [#t94a8d59]
#contents
----
#lsx(new=true);

*関連 [#l71ba1cd]
#lsx(tag=ページ,new=true,except=^ページ(/.*)?$)

[[検索:ページ]]

*ページ周辺のタグ [#yc4ea82b]
#tag(0,ページ)

*ページとは [#qe624dec]
RIGHT:[[:t/ページ]] [[:t/フィルタリング]] [[:t/拡張]] [[:t/アクセス権]] [[:t/リダイレクト]]

→[[Page]]

ページは再帰構造のデータベース。''MVCのModelの中核。MVCのViewでもある。''
ページがMまたはVに属するのではなく、ページの中にMとVが存在する。
wikiは1つのページ。
*思い付き [#o96998b0]

-仕様が大きくなりそう
ページの仕様は分割する必要がありそう?

-Wikiのページにはファイルと同様にアクセス許可リスト、日付、読み専用などの属性、パスなどがある。

-章を1ページにすれば使い回しや情報集約のために分ける作業が減る。


** スレッドモード [#hef972b0]
コメント、トラックバック、Wikipediaでのノートのようなものは裏に隠す。(ページ/裏に限らず、普段見えないところ)
UIはWikipedia形式(タブ)でいい。
**Wiki構築をページで [#g3e22770]
Wiki構築をページで。
他のWikiEngineでのプラグイン。

RIGHT:[[:t/組み立て]]

-ページにはアクセス権、日付、読み専用属性、パスなどがある。
-章を1ページにすれば使い回しや情報集約のために分ける作業が減る。

APIでページ内の表をレコード単位で読み出しするようなことができれば実現しやすい。
**アクセス権は引き継がれる [#cfbd8cd4]
自動生成ページは元のページ(入力されたページ)すべてのアクセス権を引き継ぐ。
アクセス権の合成ルールが必要。

RIGHT:[[:t/アクセス権]]

%%自動生成ページの実装次第。他の要素には影響しない。%%
すべてのページで上位のアクセス権を引き継ぐようにすれば、アクセス制御が簡単。利用者を増やしても既存グループに追加、ページを増やしても既存ページの下位に追加すれば新しい設定は不要。
**%%Wikiは1ページが1つの板%% [#g198eae4]
-%%この範囲で検索%%
-%%書き込み%%
-%%削除%%
%%などを。%%

%%※利用者登録も?WikiFarmとは違う?%%
**HTML許可ページ [#ac7869e0]
ブログパーツなど、サイトに貢献する人だけが作れるページ。
HTMLタグなどが閲覧ページまで残る。

作った後は(ページの機能を利用して)他のページに埋め込んだりできる。

**ヘッダーの使い道 [#s9cf9fc3]

%%**自由欄%%
%%適宜、動的要素を表示する部分。ページの先頭に表示。WikiNotationで位置が指定されているときはそこ(だけ)に表示。RIGHT:[[:t/属性]]%%
→ヘッダー。つまり通常のページを埋め込みリンクで埋め込むだけ。
動的かどうかはプラグインによるのでここでは考慮しない。

内容は…
-(管理者からではなく)システムからのメッセージ
リンクやボタンなども含む。
-検索に適合した部分リスト
前後の数文字、数行を含めて表示。
ページ内リンクも生成して。ページ内にはアンカーを埋め込んで。

…などを章として追加。
*実装 [#t1357f32]

**ビュー [#k072c66e]
同じページの別の見え方。同じデータの見せ方。
要素の表現方法と取捨選択。
テンプレートになるページが違うだけ。にしたいがプラグイン個別に対応する必要あり。実装ではリクエストされた通りのビューが使えるならそれ、使えなければ汎用のビューを使用。
-閲覧
--画面用(デフォルト、要定義)
--スマートフォン画面用
--ケータイ画面用
--印刷用
--読み上げ用
--API用
データをそのまま。
-編集
**構成 [#cdc266b6]
#ref(ページ/layout.png,310x310)
ページヘッダー、内容、ページフッターは連結して1つのページとして閲覧時展開。

ページヘッダーにページ見出し(ページ名とEditボタン)やタグリンク一覧(そのページ名を表すメタシンボル付き)を置く。
**ページとは [#aea8d8cd]
RIGHT:[[:t/自動生成ページ]] [[:t/テンプレート]] [[:t/属性]]

ページは…
-データ保存場所
-保持しているデータや関連情報を提供する
-利用者から送られてきたクエリーのうち、自身に関する部分だけは解釈できる
→これはフレームワークに。他のクラスにおいても同じ。
-%%入れ子関係になっている場合、親になるページインスタンスから属性を受け継ぐ%%
→入れ子にはしない。埋め込みリンクで閲覧時にそう見えるようにするだけ。でも下位にあるページは属性を継承できる。

----

ページは…
-読まれる
-書かれる
-自動的に書かれる
-自動的に読まれる
ページに書かれた設定をプログラムが参照するとき。
-名前を持つ
-ID(内部名)を持つ

----

%%ページの構成…%%
-%%ページ%%
%%複数。順序あり。ランダムアクセスはしない。%%
-%%テキスト(WikiText)%%
%%複数。順序あり。ランダムアクセスはしない。%%
-%%HTMLテンプレート%%
%%ページの見た目。ビュー。スタイル。閲覧時のページ。1組で良い。が、複数も良い。複数ならテンプレートに適用順序を設けて順次使用することに。あまり意味はない。%%
**全ページ見出しから始める [#q76e9492]
閲覧時、ページ名を見出しと同様に表示。
見出しにはEditボタンを。

ページ内容の有効な一行目がページ名。なのでページ名を見出しにすればいい。
(一行目かTITLE:やNAME:で始まる行。複数あるなら全てを連結したもの)
**newプラグインを標準に [#b38375a2]
ページへのリンク(Wiki内リンク)には[[プラグイン/New!]]が付く。
実装するならオプション。サイト設定で。

RIGHT:[[:t/プラグイン]] [[:t/設定]]
**添付ファイルは1ページ扱い [#hf16f53a]
添付ファイル1つに1ページ生成。フォーマットの統一。
こうしたほうが扱いやすいし、ページの機能を添付ファイルでも利用できる。

埋め込みリンクを利用して添付ファイルに対応する''ページを他のページに埋め込み''。


RIGHT:[[:t/属性]]
**存在しないページは無い [#pc2d3b3b]
存在しないページ=内容が空で存在するページ。
ページ管理クラス(ページとファイルを結び付けるクラス)以外では(UIからも含めて)そうなっているように。
**ページの内容はコードと見なせる [#xae85282]
ページ内容をコードと見なすと…

-ページの内容は基本的に全てコメント
-ただし、#(プラグインの接頭辞)で始まる行はコード
-コードの出力はコメント
コードとして再処理することは無い。
他のコードの引数(データ)になることはある。
-コードの出力はコードと置き換わる。


**本文のレンダリングは最後 [#ua1b6934]
本文(ヘッダーなど以外の部分)の展開(レンダリング、HTML変換)は最後。
1つの画面に重複部分があるとき、ヘッダーなどを優先する。
二重展開を防ぐようにした場合、先にヘッダーなどを展開しないとヘッダー編集時のプレビューができなくなるから。
**ページを更新できるのは自身だけ [#e17f3c5c]
編集など、ページの属性を変更する操作は自身が全て行なう。
(自身とはインスタンス)

他から変更したいときは、指示を対象ページにキューイング。
そのページは最新状態をリクエストされるまでに自身を変更すればいい。

参照は自由にできていい。

編集は遅延処理。
ページに手を加えるにはページごとに{属性→値}という形式で指示をキューイング。
適当なときに処理。

最新版が必要なときはそのページを呼び出して、最新版になってもらう。

衝突したか知らせるために、編集後のレスポンスには最新版が必要。それまでに更新しなければならない。

RIGHT:[[:t/遅延処理]]
**Webページのテンプレートは特定のページに書く [#e7516dbe]
システムが用意するページ(Webページ)は:config/Page/Editのような特定のページで定義。

このページを書き換えて…
-ページの構造・内容(HTML)
-どんなときにどんなページを使うか
User-Agent別に定義して、フルブラウザ用とか、ケータイ用とか、スマートフォン用とか。
利用者の権限別とか。

条件、それに合ったときの戻り値は特定のページに。
条件に使えるデータ、戻り値の用途はシステムにコードで定義。(用意されている中から選択して設定で利用)

RIGHT:[[:t/構築]] [[:t/設定]]
**%%コンテンツとスタイルの分離%% [#jcbb0dd4]
%%「人気のページ」など、データを提供するページはコンテンツとスタイルを分ける。%%
%%スタイルは…%%
+%%スタイルシート%%
%%RIGHT:[[:t/スタイルシート]]%%
+%%フィルター%%
+%%テンプレート%%

%%…で。%%
%%フィルターとテンプレートは別のページに埋め込んだときに可能…になるはず。%%

→検索に含まれている。
**%%リストとハッシュ%% [#z69970b0]
%%リスト状に並んだページ…版。%%
%%ハッシュに格納…Wiki。%%

**ページ内容がオブジェクト構成を表す [#qdd0826b]
ページは独立したオブジェクト。
それを構成するElement系クラスを決めるのはページ内容。

プラグインからはこのオブジェクト構成を参照できるように。
WebページのDOMアクセスと同様に。
**1つのページ内部名にインスタンスは1つ [#ocee16cb]
Flyweight。内部名がID。ページ名は同じものが複数あっていい。
**アクセスログはページの属性 [#i50a7b52]
アクセスログもページ化する。
プラグインから扱えるように。
RIGHT:[[:t/フレームワーク]] [[:t/属性]]

アクセスログから逆リンクを表示すればその場しのぎの低負荷のBackLinkになる。
**ページはプラグインのDB [#d6676d32]
プラグインが生成するデータはページに記録。
プラグインが独自にデータ保存するよりも使いやすくなければ無意味。

**資料 [#sb6c1333]
ごく簡単なHTMLの説明 - The Web KANZAKI
[[http://www.kanzaki.com/docs/htminfo.html>http://www.kanzaki.com/docs/htminfo.html]]

閲覧時のページ→HTML変換の参考に。



**空のページ [#o6881ae4]
空でページ名だけのページは、閲覧時に編集画面。DanglingLinkのかわり。


*設計 [#v3386267]
**属性と内容 [#kcd08e8d]
ページ/属性と、ページ/内容。
「属性」という言葉が紛らわしい。[[:t/?]]

:属性|
テキストのリスト。下位ページが継承する。(1項目ごとに)

:内容|
テキスト1つ。継承されない。

どちらもWikiNotationあり。内容の方はそれに加えてプレーンテキストも。
属性の方にプレーンテキストを書いてもいいが特に意味がない。

APIやプラグイン呼び出しからは区別なし。指定すると呼び出しが煩雑になるので。
継承処理後の属性と内容を1つにしたものが参照可能になる。
属性部分を何かで括ったりもしない。
**他オブジェクトとの関わり合い [#wf50993c]
ページ…Elementのコンテナー。ページがページを含むことはできない。
ページ同士に関連は無し。リンクオブジェクトでつながりが分かるだけ。
Element…ページの要素。ページはElementに含まない。深い構造にしないため。

PageとNotationは、ContainerとElementの関係。
クラス名…Page、Notation。”Container”、”Element”という言葉は属性名やインターフェイス名で使用。

機能
-同型のオブジェクトとの類似度算出
コードで。Elementのクラス別。
-出力用(ページの一部になるもの)に変換
逆変換は不可能。
-生成
コンストラクター
*コード [#b9332bbb]

**Perl [#n3bc38ca]
[[code*:364]]