Cookbook (ja)

koseki edited this page Sep 13, 2010 · 39 revisions

テンプレート

HTMLをそのまま書きたい。

HTMLにフィルタだけを適用したい場合、何もしないテンプレートを使うことができます。

<%= body %>

smcファイルは以下のように書けます。上のテンプレートが free.rhtml というファイルだった場合です。

template: free
--- |
<html>
<head><title>サンプル</title></head>
<body>
<p>何もしないテンプレートで出力するサンプルです。</p>
</body>
</html>

フィルタが必要ない場合は、smcファイルではなくHTMLファイルをそのまま足します。全てのHTMLファイルをsmcで出力する必要はありません。

Textileで書きたい。

RedClothが必要です。gemでインストールします。

$ sudo gem install RedCloth

プロジェクトにヘルパとテンプレートを追加します。

$ cd /path/to/your/project
$ smc import redcloth

あとはtextileテンプレートを指定して、smcファイルを作成するだけです。

template: textile
--- |
h1. This is textile sample.

h2. sample

* abc
* def
* ghi

Markdownで書きたい。

BlueClothが必要です。gemでインストールします。

$ sudo gem install bluecloth

プロジェクトにヘルパとテンプレートを追加します。

$ cd /path/to/your/project
$ smc import bluecloth

あとはmarkdownテンプレートを指定して、smcファイルを作成するだけです。

template: markdown
--- |
This is markdown sample
===================

sample
------

* abc
* def
* ghi

ERBで書きたい。

/_smc/helpers/base_helper.rb_erb メソッドがあるかどうか確認してください。なければ以下を追加します。

    # Evaluate ERB source.
    def _erb(source)
      @renderer.render_string(source, @obj)
    end

以下のようなテンプレート(/_smc/templates/erb.rhtml)を足すと body にERBが使えるようになります。

<%= header %>
<%= _erb body %>
<%= footer %>

smcファイル。

template: erb
--- |
<%= Time.now.to_s %>

メニューの現在位置を光らせたい。

いくつも方法があります。以下のサンプルはダウンロードしてsmc updateできます。

複数のsmcファイルを読んで、1つのファイルを生成したい。

テンプレート内で以下のような処理を実行します。

  • base_helper.rbの_globでsmcファイルのパスを収集し、ループ
  • _loadでsmcファイルをロード
  • _withで現在のオブジェクトを切り替える

(書きかけ)

URIテンプレート

CSVからページを生成したい。

RSSからページを生成したい。

GoogleDocsのスプレッドシートからページを生成したい。

gdataが必要です。gemでインストールします。

$ sudo gem install gdata 

プロジェクトにRakefileが追加されていない場合は追加します。

$ smc import rake

gdataを追加します。

$ smc import gdata

以下のrakeタスクが使えるようになります。

$ rake -f _smc/Rakefile -T
rake gdata:env     # Show Google Data API configuration.
rake gdata:export  # Export Google Spreadsheets as CSV.
rake gdata:list    # List all Google Spreadsheets.
rake gdata:login   # Login Google Data API.

gdata:env タスクで全てがOKになるまで設定します。

$ rake -f _smc/Rakefile gdata:env
ERROR: Configuration file not found: /path/to/document/root/_dir.smc

Configulation sample (add these lines to _dir.smc):
----------------------------------------------------------------
gdata_auth: default
gdata_files: 
- key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  file: _smc/data/sample1.csv
- key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  file: _smc/data/sample2.csv
----------------------------------------------------------------
You can get document keys using 'gdata:list' task.

ドキュメントルートに _dir.smc ファイルを追加し、上の設定を _dir.smc に書き込みます。

gdata_auth は認証を識別する名前です。プロジェクトによって、使うアカウントを切り替えたい場合に設定してください。Googleのアカウントを1つだけ使う場合は default のままでOKです。

gdata_files で、どのスプレッドシートをどのファイルに保存するかを指定します。ひとまずこのままで大丈夫です。 _dir.smc を編集してもう一度 gdata:env タスクを実行すると以下の表示になります。

$ rake -f _smc/Rakefile gdata:env
OK: Configuration file exists: /path/to/document/root/_dir.smc
OK: Auth name(gdata_auth): default
OK: Configuration value exists: gdata_files
- title: ""
  key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  file: _smc/data/sample1.csv
- title: ""
  key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  file: _smc/data/sample2.csv
ERROR: auth file doesn't exist. execute gdata:login task.: /home/yourname/.smallcage/gdata_auth_default.yml

~/.smallcage/gdata_auth_(gdata_authの値).yml に、認証用のトークンが保存されます。ERRORになっているのは未ログインのためです。ログインします。

$ rake -f _smc/Rakefile gdata:login
Email: yourname@gmail.com
Password: ********
OK: Login token saved: /home/yourname/.smallcage/gdata_auth_default.yml

これで gdata:env が全てOKになります。 gdata:list タスクでスプレッドシートの一覧を得ます。

$ rake -f _smc/Rakefile gdata:list
- title: "ドキュメントのタイトル"
  key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  file: _smc/data/sample.csv

- title: "ドキュメントのタイトル"
  key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  file: _smc/data/sample.csv
:

取得したいドキュメントを選んで、 _dir.smcgdata_files にコピーします。 file で保存したいCSVファイルのパスを指定します。CSVファイルの親ディレクトリが無いときは作成しておきます。

$ mkdir _smc/data
gdata:env で設定に問題がないことを確認して、
$ rake -f _smc/Rakefile gdata:export

でCSVファイルが保存されます。

_dir.smc

パンくずリストを表示したい。

フィルタ

キャッシュ回避のため、ファイル名にバージョン番号を付けたい (長いExpiresヘッダを利用したい)。

Cache Control (ja) を参照してください。

UTF-8以外の文字コードで出力したい。

出力する全てのファイルでUTF-8以外のエンコーディングを使いたい場合、フィルタを設定します。

smc import nkf
  • /_smc/filters/filters.yml
  • /_smc/filters/nkf_filter.rb

が追加されます。 filters.ymlcharset の指定を追加すると、出力ファイルの文字コードが変換されるようになります。

after_rendering_filters:
  - name: nkf_filter
    charset: Shift_JIS

で、Shift JISで出力されます。charsetには@EUC-JP@、@ISO-2022-JP@、@Shift_JIS@が指定できます。

一部の出力だけ文字コードを変えたい。

一部のファイルのエンコーディングを変えたい場合、例えば携帯用のHTML出力だけをShift_JISで出力したい場合は、

smc import nkf

nkf_helper.rb を追加し、

<%- set_charset do -%>
  <%= header %>
  <%= body %>
  <%= footer %>
<%- end -%>

のようにエンコーディングを変えたいテンプレート内で、 set_charset ブロックで全体を囲んでください。どのエンコーディングを使うかは、 _dir.smc や 各smcファイルで、

charset: Shift_JIS

のように指定できます。 _dir.smc に指定すると、そのディレクトリ以下のsmcファイル(の set_charset ブロック内)が全て変換されます。

HTMLのmeta要素は以下のように書けます。

<meta http-equiv="Content-Type" content="text/html; charset=<%= charset %>">

リンクを相対パスに変換したい。

smc import relpath

で relpath_filter.rb が追加されます。

="/ の並びを、ファイルのドキュメントルートからの深さに応じて、相対パス ="../../../../ に置換します。

構成・設計

Rakefileを_smcディレクトリ以外の場所に置きたい。

smc import rake

/_smc/Rakefile が追加されます。Rakefileを移動したい場合は、冒頭にある

Dir.chdir(File.dirname(__FILE__) + "/..")

という行の /.. をドキュメントルートを指すように修正してください。たとえば Rakefile と同じ階層の htdocs ディレクトリをドキュメントルートにしたい場合は、

Dir.chdir(File.dirname(__FILE__) + "/htdocs")

と書きます。ドキュメントルートには _smc ディレクトリが必要なので、この場合は ./htdocs/_smc ディレクトリが存在しなければなりません。

携帯版のツリーを追加したい。

多国語出力をしたい。

その他

RSS/Atom を出力したい。

JSONを生成したい。

SQLを生成したい。

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.