Lektorについてのお勉強、第3回。 今回はContentとmodelsについて公式サイトを読んだことをまとめていく。
すごいざっくりな説明かつ誤った理解とかもある思うので気づいたらご指摘いただけると嬉しいです。
Content
webサイトを作るのに必要なファイルはすべてこのcontent以下に置かれ、それらをModelsとかテンプレートに従ってレンダリング(Webページの生成)をする。心配しないで。むっちゃ簡単だよ。(It’s easier than it sounds.)
One Folder – One Page(1つのフォルダー = 1つのページ)
それぞれのページ(またはURL)はcontent/以下のフォルダーに対応する。階層構造にもできる。それぞれのフォルダには最低限1つのcontents.lrが必要。そのファイルの中にデータを書き込む。
ページ内の他のファイルは全部、ページの添付ファイルとみなされる。
例
content/ contents.lr portfolio/ contents.lr project-a/ contents.lr thumbnail.jpg project-b/ contents.lr thumbnail.jpg about/ contents.lr
One page – One URL
それぞれのcontents.lrファイルは1つのURL上の1つのページになる。そんでもって、content/prortfolio/project-a/contents.lrは/portfolio/project-a/ のようになる。
(index.htmlは省略可みたいな感じでそのディレクトリの中に1つしかファイルがないから書かなくていい。みたいな感じ?)
Page, Model and Template
それぞれのページはモデルとテンプレートに関連付けられている。それぞれのページはフィールドで定義するモデルをもっている必要がある。デフォルトのテンプレートはモデルめいと同じだけど、ページごとに上書きすることもできる。
どのモデルを選択する?かはcontent.lrの_modelキーまたは設定のcoventionで選択できる。Lektorはデフォルトのモデルを以下の順に選択する。(番号が小さいほうが優先)
- contents file に書いてあるモデル
- 親モデルで「子モデルに適応するテンプレート」って指定されたもの
- ページIDと同じ名前のモデルファイル
- pageという名前のモデル。
テンプレートは常にモデル名と同じで.htmlの拡張子。_templateの値をいじると上書きできる。
Contentのフォーマット(書式)
Contentファイルの書き方についての説明。Contentファイルはutf-8の文字コードで拡張子が.lr。マルチバイトにも対応してるよ。
フォーマットはむっちゃ簡単
_model: page --- title: The Page Title --- body: The page body goes here
(キー : フィールド)って意味
フィールドは”—“(3つの-)で区切られていて、 キー:値 の形式。値が複数行になる場合はキーの後に2行改行することをお勧めする。各フィールドはモデルが構成してる。(モデルで定義されたもの?)
一部のフィールドはただの文字、他にはMarkdownの記法に従ったものとかある。これらのフィールドはテンプレートで自動的にレンダリング(希望する形式に変換)されて利用できるようになる。
Tip
—を文字どして表示したいときは関係無い’-‘を入れる。’—-‘なら’—‘になる。’—–‘なら’—-‘みたいな。
‘_’で始まるキーのフィールドは、いわゆるシステムフィールドでLektorによって処理される。詳しくはシステムフィールド(公式サイト|英語)を参照。
Data Modelling(データのモデルについて)
何がLektorを強力(Powerful)にするか?それはデータをモデル化する能力で、データを最終的な出力をするために使う。(この辺の約がとても雑。とりあえず、Lektowはmodelをしっかり使うとむっちゃ強いよ。みたいな。)
この(modelの)使い方を習得すると後で簡単に綺麗なHTMLが生成できるようになるよ。
Models
モデルはページを作るための青写真(計画?設計図?想像図?構想?)です。どんなフィールドが存在して、それらに何が入るのかを定義する。モデルは models/ フォルダーの中において、文字コードはutf-8,拡張子はini。モデルは任意の名前にできるが、モデルが選択されてい無い場合はデフォルトのモデルが選択される。そうすると、ほとんどの場合でpage.iniになる。
以下に基本的なモデルを示す( models/page.ini )
[model] name = Page label = {{ this.title }} [fields.title] label = Title type = string size = large [fields.body] label = Body type = markdown
(これからちょいちょいUIって単語がでできますが、たぶん「画面上の表示に」みたいなニュアンスで取ればいいと思います。)
上記の場合は、IDとして model (ファイル名によって定義される)とnameに Page を持っていて、UIで使われる?(訳せない…)
このモデル(定義したもの)はUIで {{ this.title }} みたいにするとUIで表示される。この場合だとこのページのタイトルを表示。
ここには他に title と body のフィールドがある。titleはただの文字列でUIに大きく表示( size = large )される。bodyはレンダリング時にMarkdownとして解釈される。これはadmin画面でテキストエリア(編集画面)が提供される。
Fields
fieldsはモデルに表示されている順に順序付けられている。ほとんどのオプションが選択されているタイプ(titleとかbodyとか?)に固有(labelとかtypeがあるとか)だが、いくつかはすべてに共通してる。
([フィールド.タイプ]って意味?)
フィールドはデータに対しての振る舞いを定義するだけでなく、見え方とかを一般的に定義できる。(size=largeとかの話?)
すべてのタイプに共通するオプション
- labe: フィールドのラベル。大きめな文字でUIに表示される。
- description: もう少し説明を付加するための文字列。
- addon_label: 入力フィールドをレンダリングする際にすべての形式(の入力を)サポートする?
入力フィールドの右側にラベルちして表示される。例えば、フィールドの単位(ピクセル、パーセント等)の単位を明確にするためにしようする。 - width: adminの際の入力の幅を定義する。1/2とか1/4とか。
- size: normal,small,largeを定義でき、adminのUI状態に影響する。
- type: フィールドの型を定義。型によって入力のオプション利用可能範囲が広がる。
Model Options
モデルは自身をカスタマイズすることができ、以下のオプションがある。
- name: モデル自体の名前。通常モデルのIDであるファイル名の複数系の大文字の形。
- label: このモデルを使用しているページに利用されるべき使われるべきテンプレート式。
- hidden: モデルはboolean value(yes か no)でこの値はUIからhiddenにできるかどうかを示す。yesにした場合、新しいページはこのモデルを参照することができない。
これは暗黙の設定を用いる際にとても有用(よくわからない…) - inherits: 他のモデルからすべてのフィールドを継承したいときに使う。また、その際に他のモデル名を定義することができる。
これらに加えて、さらに動作をカスタマイズする設定がいくつか(もでるごとに)ある。
まとめ
う〜ん…英語難しい…。とりあえずここまで書いてきたことを自分はそれなりに理解できた気がするけど、このブログを読んだ人が果たして理解できるのか…?
正直、公式サイトの意訳は自己満足でやってます。
それでも、誰かの役に少しでも立てばいいなと思ってますw
Lektor 第1回目 : Lektorを使ってみる
Lektor 第2回目 : Lektorを使ってみた part2 (フォルダとかファイルとか)