• 追加された行はこの色です。
  • 削除された行はこの色です。
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つのページ。

**ページとは [#aea8d8cd]
RIGHT:[[:t/自動生成ページ]] [[:t/テンプレート]] [[:t/属性]]

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

*思い付き [#o96998b0]

**ページの内容はコードと見なせる [#xae85282]
ページ内容をコードと見なすと…

-ページの内容は基本的に全てコメント
-ただし、#(機能の接頭辞)で始まる行はコード
-コードの出力はコメント
コードとして再処理することは無い。
他のコードの引数(データ)になることはある。
-コードの出力はコードと置き換わる。
**ファイルと類似 [#s9dbd154]
Wikiのページにはファイルと同様にアクセス許可リスト、日付、読み専用などの属性、パスなどがある。


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

フローとストックのフロー側。

**Wiki構築をページで [#g3e22770]
Wiki構築をページで。
APIでページ内の表をレコード単位で読み出しするようなことができれば実現しやすい。

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

**%%アクセス権は引き継がれる%% [#cfbd8cd4]
%%自動生成ページは元のページ(入力されたページ)すべてのアクセス権を引き継ぐ。アクセス権の合成ルールが必要。%%

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

→[[:ToDo/自動生成ページに何か入力するか]]

**Wikiは1ページが1つの板 [#g198eae4]
-この範囲で検索
-書き込み
-削除

…などを。

※利用者登録も?WikiFarmとは違う?

→[[:ToDo/ブログや掲示板として利用できるか]]

**HTML許可ページ [#ac7869e0]
ブログパーツなど、サイトに貢献する人だけが作れるページ。
HTMLタグなどが閲覧ページまでエスケープされずに残る。

作った後は(ページの機能を利用して)他のページに埋め込んだりできる。言い換えればホワイトリスト。

**ヘッダーの使い道 [#s9cf9fc3]
ページ内容以外から呼ばれた機能のディスプレイとして使用。
形式いくつか用意。上部にテキスト表示するバナー、下部に表示するバルーン、右上にアイコンや通知バッジ出すなど。コードで指定。そのためフレームワーク側にライブラリとして用意を。
組み込み済みの基本的な記法を使えるように。

ヘッダー。つまり通常のページを埋め込みリンクで埋め込むだけ。

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

…などをAPI経由で追加。

*実装 [#t1357f32]

**canonical [#y61ffcd2]
[[正規化 - ウェブマスター ツール ヘルプ>http://support.google.com/webmasters/bin/answer.py?hl=ja&answer=139066&topic=2371375&ctx=topic]]

link rel="canonical" にするページは
-同じページの編集ビュー・履歴ビューなど
ページ名(外部名)が同じページはすべてデフォルトビュー(閲覧ビュー)をおすすめ。
-データフォーマットの違い
HTML/プレーンテキスト/印刷用など
デフォルトのデータ形式(HTML)に。

スタイル・体裁のほうのフォーマットなどは対象外。
読む側設定のスタイルは無視できないのでおすすめ条件にしない。
体裁の方もそのまま。

これはGoogleに見せるためのメタデータ。
**セクションと比べると… [#c9fee6e2]
ページはセクションの集約。
Wikitextを持たない。代わりに(Wikitextを持った)セクションを持つ。

作り方はページ作成フォームとか、DanglingLinkとかから。

リンク先になれる。URIを持つ。

下位展開のルールによって一度に展開される埋め込みの深度に制限がかかる。

**構成 [#cdc266b6]
#ref(ページ/layout.png,310x310)
ページヘッダー、内容、ページフッターは連結して1つのページとして閲覧時展開。

ページヘッダーにページ見出し(ページ名とEditボタン)やタグリンク一覧(そのページ名を表すメタシンボル付き)を置く。

**全ページ見出しから始める [#q76e9492]
閲覧時、ページ名を見出しと同様に表示。
見出しになったページ名にもEditボタンを付ける。

ページ内容の有効な一行目がページ名。なのでページ名を見出しにすればいい。
記法/タイトル記法もあるけど、これは後に続く要素にタイトルを付けるものなのでページタイトルには向かない。でも最初の記法/タイトルをタイトルにしてもいいかも?

**new機能を標準に [#b38375a2]
ページ名の隣(一覧や検索結果や自動リンク)には[[機能/New!]]が付く。
実装するならオプション。サイト設定でon/off。

RIGHT:[[:t/機能]] [[:t/設定]]

**添付ファイルもページ [#hf16f53a]
→[[機能/ファイルアップロード]]
**存在しないページは無い [#pc2d3b3b]
存在しないページ=内容が空で存在するページ。
ページ管理クラス(ページとファイルを結び付けるクラス)以外では(UIからも含めて)そうなっているように。つまりこれを実現するのはページ管理クラス(PageFactory)


**本文のレンダリングは最後 [#ua1b6934]
描画順序は内容が変わりにくい順で、上から。ヘッダー、サイドバー、フッター、本文。
これは重複描画の判定を考えて。
1つの画面に重複部分があるとき、ヘッダーなどを優先、重複判定は本文側でする。

二重展開を防ぐようにした場合、先にヘッダーなどを展開しないとヘッダー編集時のプレビューができなくなるから。

**ページを更新できるのは自身だけ [#e17f3c5c]
編集など、ページの属性を変更する操作は自身が全て行なう。
(自身とはインスタンス)

他から変更したいときは、指示を対象ページにキューイング。
そのページは最新状態をリクエストされるまでに自身を変更すればいい。
キュー出し/入れはフレームワーク/WikiEngineで。それを呼び出すのはページクラス。ページだけのものではないので。

ページの参照は自由にできていい。普通にロックを掛けて読むだけ。

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

最新版が必要なときはそのページを呼び出して、最新版になってもらう。
これはページの特殊な参照方法。
衝突したか知らせるために、編集後のレスポンスには最新版が必要。それまでに更新しなければならない。

RIGHT:[[:t/遅延処理]]

**Webページのテンプレートは特定のページに書く [#e7516dbe]
システムが用意するページ(Webページ)は:config/Page/Editのような特定のページで定義。
WikiTextの編集方法でページデザインやヘッダーの機能を変更。

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

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

RIGHT:[[:t/構築]] [[:t/設定]]

**%%リストとハッシュ%% [#z69970b0]
エントリー、見解はハッシュ構造。順序なし。キー指定で参照。
版はリスト構造。末尾が最新版。

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

機能からはこのオブジェクト構成を参照できるように。
WebページのDOM風アクセスと同様に。

**1つのページ内部名にインスタンスは1つ [#ocee16cb]
Flyweight。内部名がID。ページ名は同じものが複数あっていいが内部名は重複なし。

**アクセスログはページの属性 [#i50a7b52]
アクセスログもページ化する。
機能から扱えるように。
RIGHT:[[:t/フレームワーク]] [[:t/属性]]

アクセスログから逆リンクを表示すればその場しのぎの低負荷のBackLinkになる。

**ページは機能のDB [#d6676d32]
機能が生成するデータはPageElementを通じてページに記録。見ることは出来るので、読みやすいデータ書式がいい。
機能が独自にデータ保存するよりも使いやすくなければ無意味。
例えばテーブル(表)にレコード形式のデータ、定義リスト(DD)にキー・バリュー形式のデータ、のように。

機能の設定もページ。
これは利用者が書いて機能が読む。

**資料 [#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/?]]

:属性|
WikiTextのリスト。下位ページが継承する。(1項目ごとに)。ページ/裏と違い、利用者が書いてシステムが読むもの。

:内容|
WikiText1つ。継承されない。

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

APIや機能呼び出しからは区別なし。指定すると呼び出しが煩雑になるので。
継承処理後の属性と内容を1つにしたものが参照可能になる。
属性部分を何かで括ったりもしない。



**他オブジェクトとの関わり合い [#wf50993c]
ページ…Elementのコンテナー。ページがページを含むことはできない。
ページ同士に関連は無し。リンクオブジェクトでつながりが分かるだけ。
Element…ページの要素。ページはElementに含まない。深い構造にしないため。

ページ/セクション(実装がページと類似)はセクション同士でネスト可能。


*コード [#b9332bbb]

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