>--> テンプレート | クリボウの Blogger Tips

クリボウの Blogger Tips

Google Blogger の使い方、カスタマイズ方法、各種ツールなど、
Blogger 関連の役立つ情報を紹介しています。

Home > テンプレート

テンプレート

Blogger テンプレートでラムダ式が使用可能に


新しいテンプレート表現「ラムダ式」

昨年(2015年)5・6 月に、Blogger テンプレートに新しい表現方法が相次いで登場したのを覚えているでしょうか。

Blogger テンプレート上で扱える構文が増えて、随分柔軟になった印象を受けたものですが、今回、さらにラムダ式が使えるようになりました。次のリンクが Blogger 公式のアナウンスです。

「ラムダ式とはなんぞや?」という人は、このサイトの説明がわかりやすいかと。

// 匿名メソッド
Calculate(1, 2, delegate(int x, int y) { return x + y; }); // 出力:3

// ラムダ式
Calculate(1, 2, (x, y) => x + y); // 出力:3

無名関数の定義と呼び出しが簡単に記述できる式というと…伝わるでしょうか。Blogger テンプレート上に記述する実際の例として挙げられているのが次のコードです。

<b:if cond='data:post.labels any (l => l.name == "Flower")'>
  <img src=’/img/flower.jpg’ />
<b:if/>

その投稿に「Flower」ラベルがついていれば、花の画像を表示するというコードです。これまで b:loop タグを使わないと書けなかったものが、確かに随分簡単になっていますね。


Blogger で使えるラムダ式の仕様

Blogger で実際に使えるラムダ式ってどんなもの?と思って調べてみると、ヘルプフォーラムで解説を発見。

例えば

data:posts count (p => p.numComments > 0)

というコードは、少なくとも 1 コメントついている投稿の数を示すためのもの。

細かく見ていくと、赤字部分は対象となるデータ(アイテムセット:今回は投稿情報)を、青字部分は行う処理の種類(ラムダオペレータ:今回はその数)を、緑部分は実際のチェック内容(ラムダエクスプレッション:今回はコメントの数 0 より多いかどうか)を指定しています。

ラムダエクスプレッションは、さらに => 前後で分けられて、左辺に変数名(今回は data:posts セット内の各アイテム postp と名付けている)を、右辺にその変数を使った表現を記述することになっています。

うーん、使い慣れると便利なのかもしれませんが、使い方をマスターするのになかなか時間がかかりそうですね。ちなみに、ラムダオペレータに使えるキーワードは次の通り。

any ... ラムダエクスプレッションを満たすアイテムがセット内に 1 つでもあれば true を返す。
all ... セット内のアイテムすべてがラムダエクスプレッションを満たせば true を返す。
none ... ラムダエクスプレッションを満たすアイテムがセット内に 1 つもなければ true を返す。
count ... セット内でラムダエクスプレッションを満たすアイテムの個数を返す。
filter ... セット内でラムダエクスプレッションを満たすアイテムだけを集めたセットを返す。
map ... ラムダエクスプレッションで記述された結果を集めたセットを返す。
first ... セット内でラムダエクスプレッションを満たす最初のアイテムを返す。

filter や map が自在に使えるようになれば、Blogger テンプレートでもかなり複雑な指示が出せそうですね。われこそは!と思う人は、ぜひチャレンジしてみてください。

Blogger テンプレートにさらに新しいウィジェットタグが登場


前回、Blogger テンプレートのウィジェットタグに新しい表現方法が登場 という記事を書きましたが、すぐにまた新しいウィジェットタグが追加されています。

何が追加されたかというと、以下のとおりです。

  • b:elseif
  • b:switch
  • b:eval
  • b:with
早速、順に見ていきます。


elseif

これまで、条件分岐では b:if (条件に合う場合)と b:else (合わない場合)というのがあったんですが、条件に合わない場合に別の条件を追加する b:elseif が新しく登場しています。下に掲載したのは、ページの種類によって表示する内容を切り替えるコード例です。

<b:if cond='data:blog.pageType == "static_page"'>
  静的ページに表示する内容
<b:elseif cond='data:blog.pageType == "item"'>
  個別投稿ページに表示する内容
<b:else/>
  それ以外のページに表示する内容
</b:if>


switch

複数の条件分岐で参照するデータが同じ場合、b:switch というタグを使うこともできます。b:switch に参照するデータ名を、b:case に等しいかチェックする値を入れます。すると、該当した b:case の後に記述した内容が表示されます。b:default の後に記述した内容は、b:case で等しい物がなかった場合に表示されます。上のコードと同じ内容を b:switch で書き直したのが、下の例です。他のプログラム言語の switch でよく見られる break は要りません。「トップページの場合は」、「アーカイブページの場合は」などと、条件をどんどん付けくわえたい場合に便利です。

<b:switch var='data:blog.pageType'>
<b:case value="static_page" />
  静的ページに表示する内容
<b:case value="item" />
  個別投稿ページに表示する内容
<b:default />
  それ以外のページに表示する内容
</b:switch>


eval

b:eval は、文字列を式として実行するための文です。ちょっとした計算や文字列の連結をして、内容を表示するのに適しています。

例 1: 画像などに適用するスタイルシートに、画像の縦横の比率そのままで拡大・縮小させた値を記述する例です。

min-height: <b:eval expr="data:newWidth * data:height / data:width" />px;
(「新しい幅 × 高さ ÷ 幅」を計算して、「新しい高さ」を表示。)

たとえば元の幅 width が 200 で、高さ height が 150、新しい幅 newWidth が 400 の場合には、(400 * 150 / 200) ということで、実際に以下の内容を表示します。

min-height: 300px;


例 2: 配列構造になったデータを直接表示する例。

<b:eval expr="data:post.labels[0].url" />
(投稿の一つ目のラベルのラベルページの URL を表示。)

データを直接記述する <data:post.labels[0].url/> という書き方でもいいんじゃないかと試してみたんですが、これだとテンプレートを保存することができませんでした。従来、配列のような構造になっているデータについては b:loop を使わないといけなかったのが、b:eval でも直接記述できるようになったということのようです。


例 3: 三項演算子の結果を書き出す例。三項演算子は、前回追加された表現でしたね。

<b:eval expr='data:post.allowComments ? "Comment" : "Comments Disabled" />
(投稿にコメント可能な場合「Comment」と表示、不可の場合は「Comments Disabled」と表示。)


with

b:with を使うと、計算式の値などを一時的に格納する変数を作ることができます。

<b:with var='myComputedValue' value='50 + 40' >
  <data:myComputedValue/>px;
</b:with>
(「50 + 40」の計算結果を「myComputedValue」に格納。その後、「px;」を付加して書き出し。)

変数を書き出すのは、<data:myComputedValue/><b:eval expr='data:myComputedValue' /> のどちらを使ってもOKです。属性値としてなら expr:width='data:myComputedValue' のように使います。なお、b:with で囲んだエリア内でしか変数は使えないので、注意が必要です。


あとがき

今回のテンプレートタグの仕様変更で、実際には内容を書き出さずに、変数を指定したり、計算をしたりできるようになりました。Blogger テンプレートでできることが、格段に広がった印象です。新しいテンプレートタグを駆使して、自分だけのテンプレートづくりに挑戦してみるのもいいかもしれません。テンプレートタグのこういう組み合わせで、こんなことができるよというアイデアがもしあれば、教えてくださいね。


関連: 参考:

Blogger テンプレートのウィジェットタグに新しい表現方法が登場



Blogger のテンプレートには、ウィジェットタグという、一定の条件ごとに出力する HTML コードを変化させるための特別なタグが存在します。今回、このウィジェットタグに新しい表現方法が加わったと、Blogger Buzz が伝えています。

これまで、ウィジェットタグの中では

  • + で値を連結したり
  • - で値を差し引いたり
  • ==!= で値が等しいか等しくないかをチェックしたり
  • <><=>= で値を比較したり
といったことができたんですが、今回それらに加えて、次のような演算子や表現が使えるようになりました。


NOT 演算子

!not を使って、「何かが true(真)ではないとき」という条件を表現する。

<b:if cond='!data:post.allowComments'>...
(コメントが可能でなければ…)

これまでは、<b:else/> を使って表現していたヤツですね。


三項演算子

  • ?: を使った三項演算子。? の前の条件が true(真)の場合は : の前のもの、false(偽)の場合は : の後ろのものを表示します。

    <a expr:class='data:post.allowComments ? "comments" : "no-comments"' ...
    (コメント可能な場合、a 要素の class 属性に comments を指定し、不可能な場合は no-comments を指定する。)

    これまた、<b:if cond='...'><b:else/> を組み合わせて、表現していたものです。


    メンバシップ演算子

    これは、ある値が集合の要素の 1 つであるかどうかをチェックするためのもの。incontains とが使えます。

    <b:if cond='data:blog.pageType in {"index", "archive"}'>...
    (ページタイプがトップページかアーカイブページのときに…)

    <b:if cond='{"item", "static_page"} contains data:blog.pageType'>
    (ページタイプが個別ページか静的ページのときに…)

    incontains で、チェック対象の値と集合(もしくは配列)の記述順が逆になるので要注意。とはいえ、複数の <b:if cond='...'> を併記する必要がないのは、便利です。


    AND 演算子

    and&& を使って、複数の条件をともに満たす場合について、記述可能に。

    <b:if cond='data:blog.pageType == "index" and data:post.allowComments'>...
    (ページタイプがトップページで、かつコメント可能なとき…)

    以前は、<b:if cond='...'> をネスト(入れ子に)して実現していたもの。


    OR 演算子

    or|| を使って、複数の条件のうち、1 つでも満たす場合について、記述可能に。

    <b:if cond='data:blog.pageType == "index" or data:post.allowComments'>...
    (ページタイプがトップページか、またはコメント可能なとき…)

    incontains と同様、これからは <b:if cond='...'> を何回も書かなくて済みます。


    括弧

    ( ) を使って、演算の順序を指定する。

    <div expr:style='"max-width: " + (data:width + 10) + "px;"'>...
    (div 要素 style 属性の最大幅に、現在の横幅プラス 10 ピクセルした値を指定する。)


    これらの新しい演算子や表現を使うと、これまで Blogger テンプレートで条件分岐を記述していた、煩雑な作業が随分と楽になりそうですね。本格的に Blogger テンプレートをいじってみたい!という人は、ぜひ参考にしてください。


    参考:

  • Blogger ブログに従来のコメント欄と Google+ のコメント欄の両方を表示する方法

    Comments (cc) THOR

    2013 年 4 月に、Blogger ブログに、通常のコメント欄と入れ替える形で Google+ のコメント欄が設置できるようになりました(参考)。複数のブログについたコメントや他人のブログにつけたコメントが Google+ で一元的に閲覧できるので非常に便利なんですが、その一方で通常のコメント欄と比べ不便なところもいくつか指摘されています。

    • Google+ ユーザーしかコメントできない。
      通常のコメント欄なら Google ユーザー、OpenID ユーザーに加え、「匿名」も選べます。
    • 公開範囲が分かりにくい。
      Google+ のサークルが適用されるため、誰にどのコメントが見えているのか把握しにくいかと。
    • ブログのドメインを変えられない。
      Google+ 上でのコメントは、リンクの URL で Blogger ブログと関連付けられているため、ドメインを変更してしまうと、ブログから以前のコメントが見れなくなってしまいます。
    • 記事ごとのコメント表示・非表示、新規受け付けの可否設定ができない。
      Blogger の投稿エディタのオプション指定が効きません。
    • コメントの「オーナー承認後公開」ができない。
      ブログにコメントがつくというより、Google+ での言及をブログに表示できる、というのが本質なので、しょうがないといえばしょうがないんですが。
    • ブログについたコメント一覧が確認できない。
      通常のコメントだと、ダッシュボードやコメントフィードで確認できますね。
    参考:
    ということで、従来のコメント欄も Google+ のコメント欄も両方ブログに載せてしまおうと思ったわけです。参考にしたのはこちらのブログ。

    導入してみた様子が、次の画像です。



    導入方法

    1.Blogger の管理画面「Google+」から「このブログで Google+ のコメントを使う」のチェックを外します。元々 Blogger ブログを Google+ プロフィールと関連付けていない人は、そのままで。

    2.Blogger 管理画面「テンプレート > HTML の編集」から

    <div id='backlinks-container'>
      <div expr:id='data:widget.instanceId + &quot;_backlinks-container&quot;'>
        <b:if cond='data:post.showBacklinks'>
        <b:include data='post' name='backlinks'/>
        </b:if>
      </div>
    </div>

    というコードを見つけます。「Ctrl + f」キーからエディタの検索機能を使うと便利です。

    3.2のコードのすぐ後に

    <div id='g-comments-container'>
      <h4 id='g-comments-label'>Comments on Google+:</h4>
      <div class='g-comments' data-first_party_property='BLOGGER' data-view_type='FILTERED_POSTMOD' data-width='600' expr:data-href='data:blog.canonicalUrl'/>
    </div>

    というコードを挿入して「テンプレートを保存」ボタンを押します。赤字部分は Google+ コメント欄の最大幅です。通常のコメント欄の幅に合わせて調整するのがいいと思います。

    青字の部分は、Google+ コメント欄の上部に表示されるメッセージで、自由に書き換えることができます。閲覧者がどちらにコメントすればいいのか迷わないように、何か説明を書いてもいいかもしれませんね。

    なお、<div id='backlinks-container'> は 2 箇所あるので、両方のコードの後に同じコードを貼り付けてください。


    ということで、「Google+ のコメント欄を置きたいけど、前についたコメントも表示しときたいんだよな…」という人も、「Blogger アカウントと Google+ アカウントをまだ関連付けていないんだけど…」という人も、ぜひお試しください。


    ちなみに

    テンプレートによっては、Blogger のコメント欄が 425px 幅で固定になっているものがあります。これは、Blogger 公式の外部 CSS ファイルで指定されているもので、Blogger 管理画面「テンプレート > HTML の編集」から、テンプレートの CSS 部分

    /* Comments
    ----------------------------------------------- */

    のすぐ後にでも、

    .comment-form{max-width:600px;}

    と挿入することで、テキストエリアの幅の上書きが可能です。Google+ のコメント欄と幅を合わせたいというときに思い出してください。

    Google AdSense の非同期広告コードを Blogger ブログに貼り付けるときに注意すること

    Google AdSense の非同期広告コード

    Google AdSense の広告コードで、「非同期」タイプを選ぶことができるようになりました。

    Google AdSense の非同期広告コード(ベータ版)


    これまでの「同期」タイプと比べて、ページの読み込み時間が改善されるということです。

    非同期広告コードとは、完全非同期バージョンの AdSense 用広告コードのことで、ウェブページの読み込み時間を改善し、サイトを訪れたユーザーの利便性を高めます。非同期コードには、ウェブページの他の部分の読み込みを妨げないというメリットがあるため、広告の読み込みに問題があるページでも、コンテンツの読み込みは問題なくできるようになります。モバイル ユーザーの場合は特に、ウェブページの読み込み時間の短縮を実感できるでしょう。

    これまでは AdSense 広告が読み込まれるまで残りのページ要素が表示されなかったんですが、このコードを使うと AdSense 広告が読み込まれようと読み込まれまいと、ページの残りをどんどん表示していくことができるというわけです。

    このコードの取得は、AdSense サイト から「広告の設定」タブを押し、各広告の「コードを取得」リンクをクリック、「コードタイプ」のプルダウンから「非同期」を選ぶだけ。表示される「広告コード」をコピーして好きな場所に貼り付ければ、非同期バージョンの広告を簡単に設置することができます。


    Blogger テンプレートに貼り付ける場合の注意点

    この非同期広告コード、Blogger の投稿本文や HTML/JavaScritp ガジェットに貼り付ける分には問題がないんですが、テンプレートに直接貼り付ける場合には注意が必要です。実際に AdSense の非同期コードを Blogger のテンプレートに貼り付けると、このような警告が出ました。

    XML の解析中にエラーが発生しました。行 ***、列 ***: Attribute name "async" associated with an element type "script" must be followed by the '=' charactor.

    script 要素の async 属性に = がついてないよ」という内容です。新しいコードが Blogger のテンプレートエディタの XHTML 構文解析に引っかかっているんですが、これは asyncasync='async' とすることで回避することができます。

    このことを知らせてくれたのが鷹野 凌さん。いつもありがとうございます!


    AdSense も Blogger も同じ Google なんだから、もうちょっと融通をきかせてくれてもよさそうなものですが…。ともかく、テンプレートに貼り付けている AdSense コードを非同期に書き換えたい!という時には、ご注意ください。

    Blogger で使えるレスポンシブデザインテンプレート 25 選

    Posted at: 2013-06-02 Label: 24

    今やブログは PC だけでなく、スマートフォンやタブレットでも見られるようになってきています。そこで、最近広がってきたのが「レスポンシブ Web デザイン」と呼ばれる、あらゆるデバイスに対応させるウェブデザインの手法です。ウィンドウの幅が狭まったときに、自動的にサイドバーが省略されたり、画像が縮小されたりするアレですね。

    Blogger ブログ用にもいろいろなところでレスポンシブデザインのテンプレートが公開されているので、今回まとめてみることにしました。

    「デモ」ボタンでテンプレートが適用されたブログを閲覧できるので、ウィンドウ幅を変更したり、別の端末で開いてみたりして、どんな表示になるのか実際に確認してみるといいと思います。

    なお、ご自身のブログへのテンプレートの適用は自己責任で。必ずテンプレートのバックアップを取ってから変更するようにしてください。


    参考:



    Adsosive


    水滴のような形のサムネイルが特徴的なテンプレート。

    デモ  ダウンロード


    Align


    サイドバーが最初に 3 つ。投稿以外にたくさん情報を載せたい人向け。

    デモ  ダウンロード


    Aware


    一番上の画像は、横にスライドしていくサムネイル。2 段目からが投稿。

    デモ  ダウンロード


    Bresponsive


    最初の段はスライド。2 段目からラベルや投稿。

    デモ  ダウンロード


    Chronicl


    ブログタイトルと投稿の間に、ラベルやページへのリンクが配置できる。

    デモ  ダウンロード


    CopyBlogger v2


    幅が狭まると、サイドバーが投稿の後に回ったり画像が縮小されたり。

    デモ  ダウンロード


    DarkRed


    狭めていくとかなり柔軟に変形する。ソーシャルボタンは最後まで残る。

    デモ  ダウンロード


    Elite Minima


    4 段階に変形。ピンク基調でかわいらしい。

    デモ  ダウンロード


    Exelencia


    ウィンドウ幅が変わるとゆっくり配置換え。サムネイルホバーで画像拡大も。

    デモ  ダウンロード


    ExtraNews


    最初にランダムな投稿サムネイルがタイルのように表示される。

    デモ  ダウンロード


    Helicon


    やわらかい色調のテンプレート。幅によっては画像のアスペクト比が無視されるので注意。

    デモ  ダウンロード


    Incipient


    白基調のシンプルなテンプレート。写真のない投稿が多くてもよさそう。

    デモ  ダウンロード


    JPSTATION


    投稿は基本的に抜粋。投稿の配置を訪問者が選べるボタンあり。

    デモ  ダウンロード


    Labnol


    Twitter 的に短い投稿を載せるのがよさそう。

    デモ  ダウンロード


    Main Photo


    その名の通り、写真メインのブログでどうぞ。

    デモ  ダウンロード


    Max Mag


    最上部にあらかじめ広告エリアが用意されているのがいいかも。

    デモ  ダウンロード


    Minimum Theme


    最初にソーシャルボタンがドドーンとあるのが特徴。

    デモ  ダウンロード


    Pinfinity


    ウィンドウ幅に合わせて、写真がモザイク状に流れ込んでくるタイプ。

    デモ  ダウンロード


    Portfolio


    昔の Flickr 風。PC で幅を変えても変化しないが、端末ごとに内容はちゃんと変わる。

    デモ  ダウンロード


    RBSimple


    幅に合わせて表示される広告が変わる。

    デモ  ダウンロード


    Responsival


    シンプルなレスポンシブテンプレート。テキストベースのブログによいかと。

    デモ  ダウンロード


    Responsive


    最初に巨大なスライドショー。

    デモ  ダウンロード


    Sensational


    左側、ラベルの掲示がいい感じ。

    デモ  ダウンロード


    TheStyle


    サムネイルへのマウスホバーで、ハイライト+ちょっとだけ伸びる。

    デモ  ダウンロード


    Top Blogging Ideas


    狭めると左サイドバーがなくなるタイプ。画像は縮まないので、小さ目が吉。

    デモ  ダウンロード



    …ということで、25 個一気に紹介しましたが、気になるテンプレートはあったでしょうか。これを機会に、Blogger テンプレートも衣替えしてみるといいかもしれませんね。

    © 2005-2014 Kuribo. Powered by Blogger.