<script>
タグを使って直接書く
サイドバーにランダム記事リストを作る
とかでもやってることですが、
source/_includes以下にあるHTMLファイルに
<script>
タグを使って直接書いてしまえば、
その中でLiquidの{{
~}}
を使って変数を展開してあげることで直接書けます。
JavaScriptのコードがいたるところに散らばってしまいますが、 取り敢えず一番簡単で確実な方法です。
config_tag
を使う
Octopressにはconfig_tag
というタグを使えるようにするプラグインが入っています。
これを使って適当な所に
{% config_tag url %}
みたいに書いておくと、
<div class='url' data-value='http://yoursite.com'></div>
こんな感じで展開されるので、 jQueryを使うならこれを
console.log($('.url').data('value'))
とでもすればhttp://yoursite.com
と値が取れます。
ここで使える変数は_config.ymlで指定するsite
に入っている変数です。
適当な値を使いたい場合は__config.ymlに設定を追加してから使えばOK。
また、クラス名が上のurl
みたいなものだと簡単すぎて
他と被る可能性がありますが、
そのような場合には
<div class='octopress-site-url' data-value='https://rcmdnk.com'></div>
みたいにしておくと
<div class='octopress-site-url' data-value='http://yoursite.com'></div>
みたいにクラス名を変更することも出来ます。
また、もしdiv
タグで都合が悪いなら
<p class='octopress-site-url' data-value='https://rcmdnk.com'></p>
のようにすると、div
の代わりに
<p class='octopress-site-url' data-value='http://yoursite.com'></p>
とp
タグを使うようになります。
jekyll-var-to-jsを使う
上のconfig_tag
だと、必要な変数を追加するために
source/_includesの中などに直接変更を加えていかないといけないので
結構面倒です。
そこで、_config.ymlの中の設定だけで必要な変数を設定できるようにする プラグインを作ってみました。
中にあるplugins/jekyll-var-to-js.rbというファイルを Octopressのpluginsディレクトリに入れます。
後は、source/_includes/head.htmlのhead
タグの先頭に
{% if page.jekyll_var %}{{page.jekyll_var}}{% endif %}
の一行を加えておきます。
後は_config.ymlの中の設定だけでOK。
Generatorプラグインなので、rake generate
すると、
最初にsite
及びpage
(post
)に関連する変数を
jekyll_var
というグローバル変数に入れるようなスクリプトを作って、
これをpage.jekyll_var
に保存します。
なのでこれを他のJavaScriptなどより先に上の様に展開してあげます。
1 2 3 4 5 6 7 8 9 |
|
追記: 2015/06/07
ちょっとFirefox以外で動かないバグがあったので関数の引数部分を
1 2 |
|
と変更。
追記ここまで
こんな感じのスクリプトが展開されます(実際には改行とか無しの状態)。
site
関連のものはjekeyll_var["site"]
へ、
page
関連のものはjekeyll_var["page"]
へ入れています。
補助関数として、
jekyll_var(arg)
を呼ぶと、まずsite
関連の物を探し、
無ければpage
の物を、両方共無ければnull
を返すものも用意しました。
もし、site
、page
両方にある値でpage
の方を優先したい場合には
jekyll_var(arg, "page");
の様に第二引数に"page"
を指定してください。
保存される値はもし_config.ymlで何も設定しなければ 全ての値が保存されます。
自分で決めたものだけ入れたい場合は
1 2 3 4 5 6 7 8 |
|
こんな感じでjaekyll_var
のinclude
またはexclude
を指定してください。
include
が指定されてる場合は指定されたものだけを探します。
exclude
が指定されてる場合には指定されたものは除かれます。
(上のは例なのでlang
を両方で指定して意味ないことしてますが、
普通はどちらかだけの指定で。)
これを使えば、
サイドバーにランダム記事リストを作る
でやったような物もsource/javascripts/の中に移せて、
JavaScriptをasyncで読み込むについて
でやったみたいに全部async
で読み込んでより速く出来るかも、といった所。