こんにちは、デザイナーのぺちこです。
本気でTumblrテーマを作りたい人のためのTumblrテーマカスタマイズ、Vol.3です!
少しあいだが空いてしまいましたが……。全3回連載なので、今回が最終回となります。
今回は「実践編」ということで、初回で触れたとおり、ディレクターのはるかさんをクライアントとしてテーマを作っていきたいと思います。
クライアントを設定したのは、「Tumblrのテーマサイト」を見ていただければわかるとおり、Tumblrをどうやって使っていくのかによって、必要な項目や見せ方というのが変わってくるからです。
「写真(画像)を大きく扱いたい」「背景画像を自分で設定したい」「ブログのように使いたい」「ポートフォリオサイトとして使いたい」などなど。
テーマオプションで「ポートフォリオタイプ」「ブログタイプ」などを選べるようにして「なんでもこい!」にすることも不可能ではないと思うのですが、「初めて本腰入れてテーマづくりします!」とか「自社(自身)でデザインして運用したい!」という、今回の想定からは外れてくるのでシンプルにいきたいと思います!
いざ! テーマを作っていきましょー!
▼目次
冒頭でお話したとおり、ここがまず大切ですね。
あれこれやりたい!という気持ちがあっても、Tumblrの機能として限界があるので、まずは「何をしたいのか」「何を使うのか」を明確にしていき、その上でできることできないことを整理していきましょう。
とりあえず、ヒアリングしてみました。(ヒアリングをまとめて飛ばす)
>投稿の数が一度でたくさん見えるやつ
Tumblrの設定上、一度に表示できるのは1~15件までなんですよね。
無限スクロールを入れましょうか。
次に、どこをテーマオプションにしてカスタマイズ可能にするのかというのをしっかり決めておかないといけません。場合によってはデザインに影響が出るかもしれません。構成考えるタイミングで、メモ程度でも良いので洗い出しておきましょう。
今回は以下のオプションを付けていこうと思います。
ひとまずこの程度決めておけばOKでしょう。
どの程度デザインを作るか、というのは個々人次第だとは思いますが、Tumblrに存在するページをおさらいしておきます。
デザイン自体は★マークのページさえ考えられていれば、あとはコーディング時の調整で大体なんとかなると思います。このあたりは普通にサイト制作する感じで、各々のやり方で進めてください。
今回はこんな感じのデザインで進めていこうと思います!
デザインをするときは、前回の記事でも紹介した投稿タイプを網羅するようにデザインをすると良いです。
個人的に使うだけのテーマであれば、使わない投稿タイプは無視しても問題ありませんが、公式テーマとして申請する場合には全投稿タイプに対応していなければなりません。
インデックスとパーマリンクページは、HTMLタグを完全に分けることも可能ですが、それだと組み込みに手間がかかってしまいます。
(自在なデザインをしたい場合は除きますが)なるべくタグ組みを変えずに作れるようなデザインにすると組み込み時に随分と楽になります。
Tumblrは、テーマ用の画像・CSS・JavaScriptであれば専用のページからアップロードすることが可能です。そのため、まずはローカルで完璧にコーディングをしておいて、組み込み時にはHTML以外はもう変更しないだろう、という状態にしておくのがベストです。
テーマオプションの値によって変化させるCSS・JSだけは、テーマHTMLにベタ書きをします。ローカルでコーディングしたあとにそれらを切り出しておくことをオススメします。
その他、コーディング時に気にしておくと良いことを以下にまとめます!
Tumblrの独自タグにはインデックスページかパーマリンクページかを判定するタグがあるので、classを振り分けるのはお安い御用。
コーディング時点でclass名を分けてスタイルを指定しておくのが懸命です。
HTML構造を揃えつつも、インデックスとパーマリンクページでは微妙にレイアウトが変わってくると思います。
今回のデザインで言えば、インデックスページでは複数投稿があるためfloatで並んでいますが、パーマリンクページでは投稿は1件のみのためfloatさせずにセンタリングをさせていますし、細かく言えばフォントサイズが違っていたり、marginが違っていたり……小さな違いがたくさんあります。
HTMLやbodyなどの大きな部分でclass分けをしておけば、スタイルの振り分けも楽ですね。各投稿タイプについても同じような理由で、共通のclass名+ユニークなclass名をつけておきます。
前回の記事で各投稿タイプ毎の独自タグを細かく紹介していますが、「Photoset」や「Video」「Audio」、「リアクション」などTumblr側で自動生成されるタグもいくつかあります。
ひとつひとつ紹介するのは大変なのと、テスト投稿してソースコードをコピー&ペーストしたほうがまず間違いないので割愛しますが、とにかく不安な場合はテスト投稿!です。
……と、文章で言われてもよく分からないので、具体例を以下に。
今回はbodyに対して「.index」「.permalink」をそれぞれ振りました。
また、カラムを1~3列で選べるようにしたいので、各投稿を包括するDIVに対して「.three_column」というclassを振りました。スタイルには「.one_column」「.two_column」もあわせて用意しています。
各投稿は、articleタグに対して共通で「.post」を振った上で、それぞれに「.text」「.photo」「.chat」などのユニークなclassを振っています。
各投稿部分について、なるべくHTML構造を揃えるように先述しましたが、具体的には以下のとおりです。
テキスト投稿タイプは「タイトル」と「テキスト(画像挿入可)」になっていますが、この「テキスト(画像挿入歌)」はほとんどの投稿タイプにも備わっている機能です。そのため、タイトルも含めて全体を「.article_body」で囲み、どの投稿タイプにもこのブロックを挿入することとします。
タグ一覧や日付、リブログやライクなどの機能も全ての投稿タイプに共通した要素なので、「.article_footer」としています。
これを踏まえて、画像投稿タイプの例を見てみます。
テキスト投稿タイプ同様、「.article_body」のエリアを設けた上で、別途「figure」というブロックを用意しています。この「figure」ブロックは画像投稿タイプのときにだけ表示させるように、後ほど組み込み時に調整をします。
他の投稿タイプについても同様に組んでいきます。
リンク投稿には「.link_block」と「.article_body」、動画投稿には「.video_block」と「.article_body」といった形で、共通で必要な要素とそうでない要素を分けておくと後が楽になります。
さて、ではここからは実際に組み込んだソースをお見せしながら組み込み実践編へとうつっていきます!
テーマ組み込に必須な作業とオプション的な作業があるので、オプション的な作業には [OP] を付けておきます! 不要な場合は適宜読み飛ばしてください。
デフォルトテンプレートのものをそのまま拝借しても良いですが、今回は少し手を加えているのでソースをお見せします。
<title>{Title}{block:PostSummary} - {PostSummary}{/block:PostSummary}{block:SearchPage} - {lang:SearchResultCount results for SearchQuery}{/block:SearchPage}{block:TagPage} - {lang:Posts tagged Tag}{/block:TagPage}{block:DayPage} - {Year}.{MonthNumberWithZero}.{DayOfMonthWithZero}{/block:DayPage}</title>
トップページ | ブログタイトル |
---|---|
パーマリンクページ | ブログタイトル – 記事本文の冒頭 |
検索結果ページ | ブログタイトル – ◯◯の検索結果:◯件 |
タグページ | ブログタイトル – 「◯◯」タグが付けられている投稿 |
日付ページ | ブログタイトル – 20XX.00.00 |
検索結果ページ、タグページについては、言語設定に合わせて表記の言語も変わります。
<meta name="description" content="{block:PostSummary}{PostSummary} - {/block:PostSummary}{MetaDescription}">
{PostSummary}はtitleの設定と同様、パーマリンクページにおいて記事本文の冒頭が入ります。インデックスページとパーマリンクページでdescriptionの内容を変えたい場合は上記のように記述すると良いです。
これは必要な方だけで良いと思いますが、facebookOGPは可能な限り適切に設定しておきたいですよね。
OGP画像以外の設定は以下のようにしました。
<meta property="og:type" content="{block:IndexPage}website{/block:IndexPage}{block:PermalinkPage}article{/block:PermalinkPage}"> <meta property="og:description" content="{block:PostSummary}{PostSummary} - {/block:PostSummary}{MetaDescription}"> <meta property="og:title" content="{Title}{block:PostSummary} - {PostSummary}{/block:PostSummary}{block:SearchPage} - {lang:SearchResultCount results for SearchQuery}{/block:SearchPage}{block:TagPage} - {lang:Posts tagged Tag}{/block:TagPage}{block:DayPage} - {Year}.{MonthNumberWithZero}.{DayOfMonthWithZero}{/block:DayPage}"> <meta property="og:url" content="{block:IndexPage}{BlogURL}{block:SearchPage}search/{SearchQuery}{/block:SearchPage}{block:TagPage}tagged/{Tag}{/block:TagPage}{block:DayPage}day/{Year}/{MonthNumberWithZero}/{DayOfMonthWithZero}/{/block:DayPage}{/block:IndexPage}{block:PermalinkPage}{Permalink}{/block:PermalinkPage}"> <meta property="og:site_name" content="{Title}">
og:type | インデックスページでは「website」、パーマリンクページでは「article」 |
---|---|
og:description | metaのdescriptionと同様 |
og:title | metaのtitleと同様 |
og:url | 各ページに最適化 |
og:site_name | ブログタイトル |
OGP画像はというと、次に説明する「テーマオプション」にも関わりますが、オプションで「Facebook Ogp Image」という項目を追加したうえで、以下のように設定をします。
{block:IndexPage} {block:FacebookOgpImage}<meta property="og:image" content="{image:Facebook Ogp Image}">{/block:FacebookOgpImage} {/block:IndexPage} {block:PermalinkPage} {block:Posts} {block:Photo}<meta property="og:image" content="{PhotoURL-HighRes}">{/block:Photo} {block:Panorama}<meta property="og:image" content="{PhotoURL-Panorama}">{/block:Panorama} {block:Photoset}{block:Photos}<meta property="og:image" content="{PhotoURL-HighRes}">{/block:Photos}{/block:Photoset} {/block:Posts} {block:FacebookOgpImage}<meta property="og:image" content="{image:Facebook Ogp Image}">{/block:FacebookOgpImage} {/block:PermalinkPage}
インデックスページではオプションでユーザーがアップロードした画像が設定されるようにしています。
パーマリンクページでは、「画像投稿」は画像のURLを持ってくることができるのでその画像URLを設定し、その他の投稿タイプに関してはインデックスページと同様にユーザーがアップロードした画像が設定されるようにしています。
Photoset投稿(画像投稿タイプで複数枚の画像を投稿した場合)では、画像の枚数分だけOGP画像として出力されるようになっていますが、Facebook Debuggerでは特にエラーにはならず、意図どおり数枚の中から選択できるようになっていました!
テーマオプションについては、第1回のときに詳しく説明をしているので、「なんだっけ?」と思った方は一度読み返していただければと思います。
事前準備の段階でオプション化する部分を決めておいたので、それを反映させていきます!
{block:Hidden} <!-- ブログプロフィール画像とは異なる、個人プロフィール画像を登録できる --> <meta name="image:Profile Photo" content=""> <!-- FacebookOGP画像を設定できる --> <meta name="image:Facebook Ogp Image" content=""> <!-- AppleTouchIconを設定できる --> <meta name="image:Apple Touch Icon" content=""> <!-- タイトルやリンクなどの色を変更できる --> <meta name="color:Header Text Color" content="#383838"> <meta name="color:Text Link Color" content="#383838"> <meta name="color:Text Link Background Color" content="#faf9cc"> <meta name="color:Accent Color" content="#9bb7c4"> <!-- 個人プロフィールの表示/非表示を選択できる --> <meta name="if:Show Profile Box" content="0"> <!-- 無限スクロール使用の有無を選択できる --> <meta name="if:Endless Scroll" content="1"> <!-- 欧文フォントを数種類から選ぶことができる --> <meta name="select:Alphabet Web Font" content="Ruluko" title="Ruluko"> <meta name="select:Alphabet Web Font" content="Andika" title="Andika"> <meta name="select:Alphabet Web Font" content="Cambay" title="Cambay"> <meta name="select:Alphabet Web Font" content="Kreon" title="Kreon"> <!-- ヘッダーのレイアウトパターンを用意する --> <meta name="select:Header Layout" content="left" title="Left Style"> <meta name="select:Header Layout" content="center" title="Center Style"> <!-- 最大カラム数を1~3で選択できる --> <meta name="select:Max Layout Column" content="three_column" title="Max 3 Columns"> <meta name="select:Max Layout Column" content="two_column" title="Max 2 Columns"> <meta name="select:Max Layout Column" content="one_column" title="Max 1 Column"> <!-- ブログ名とは異なる、個人名を登録できる --> <meta name="text:Profile Name" content=""> <!-- ブログ説明文とは異なる、個人紹介文を登録できる --> <meta name="text:Profile Description" content=""> <!-- GoogleAnalyticsのIDを登録できる --> <meta name="text:Google Analytics Id" content=""> {/block:Hidden}
これが実際に使用したテーマオプションです。HTMLに出力されないように {block:Hidden}~{/block:Hidden} で囲むことを忘れずに!
「AかBかCか」など複数の中から選んでほしいものは select 、値を各自で入力してほしいものは text 、画像を各自でアップロードしてほしいものは image 、といったように、用途に合わせてオプションを選んで記述していきましょう。
ちなみに、レイアウトパターンについては、コーディング時にclass名でレイアウトを振り分けていたので、「content=””」の中身はclass名になる文字列を入れ、「title=””」の部分には管理画面で見たときにわかりやすい項目名を入れます。
次に全体の設定と共通部分の組み込みを行っていきます。
今回のテーマはWebフォントを選べるようにしたかったので、header・footer以外に以下の設定を入れました。
<head> ... <link rel="stylesheet" href="http://fonts.googleapis.com/css?family={select:Alphabet Web Font}"> ... </head>
WebフォントはGoogleFontsを使用。
familyの値になるものを select の content=”” の値に設定しておけば、上記の記述で当該のWebフォントを引っ張ってきてくれます。
フォントして使用するにはCSSの方でも設定をしなければいけないので、次にテーマオプション用のCSS組み込みをご説明します。
例えばテーマオプションで色を変更できるようにしたり、画像を設定できるようにしたり、先述のようにフォントを変更できるようにしたりした場合など、CSSに影響がある場合が多くあります。
オプションの値は外部CSSには引き継ぐことができないので、ソースコード内にスタイルを記述する必要があります。以下は一例なので、参考にしてください。
<!-- Webフォントの設定 --> body, .searchbox input, .searchbox button { font-family: "{select:Alphabet Web Font}"; } <!-- ヘッダーのテキストカラー --> #header { color: {color:Header Text Color}; } <!-- リンクカラー --> #contents .post .parent a { color: {color:Accent Color}; } <!-- ユーザーカスタムCSS --> {customCSS}
スタイルの最下部には{customCSS}を入れておきます。ユーザーが独自のCSSを追加した場合にはここに出力されます。
つぎに、共通部分の組み込みとして、ヘッダーから見ていきましょう。
◯中央寄せレイアウト
◯左寄せレイアウト
#headerに振ってあるclass「.center」「.left」でレイアウトを変えているので、テーマオプションで用意した{select:Header Layout}の値が入るように記述します。
<header id="header" class="{block:ShowHeaderImage}bgimage {/block:ShowHeaderImage}{select:Header Layout}">
また、{block:ShowHeaderImage}を使用すると、外観オプションに「ヘッダー画像」をアップロードする項目と、ヘッダー画像を使用するかどうかのスイッチが自動で追加されます。
今回は背景画像も使用できるようにしたかったので、上記のように組み込みました。
<figure class="avator {AvatarShape}"><a href="/"><img src="{PortraitURL-128}" alt=""></a></figure>
{AvatarShape}を使用すると「square」か「circle」のいずれかが出力されるので、画像トリミングの形をCSSで調整することができます。必要であればどうぞ!
<ul> <!-- カスタムページを作成した場合に出力 --> {block:HasPages} {block:Pages}<li><a href="{URL}">{Label}<i class="icon_next"></i></a></li>{/block:Pages} {/block:HasPages} <!-- アーカイブページへのリンク --> <li><a href="/archive">{lang:Archive}</a></li> <!-- 質問受付をONにしている場合に出力 --> {block:AskEnabled}<li><a href="/ask">{AskLabel}</a></li>{/block:AskEnabled} <!-- ゲスト投稿をONにしている場合に出力 --> {block:SubmissionsEnabled}<li><a href="/submit">{SubmitLabel}</a></li>{/block:SubmissionsEnabled} </ul>
質問受付やゲスト投稿については、各TumblrユーザーがON/OFFを選択できる項目なので、必ず{block}タグで囲みます。
フッターはこんな感じで、検索ボックス・コピーライト表記・テーマへのリンク表記を配置しています。
<form action="/search" method="get"> <input type="text" name="q" value="{SearchQuery}" placeholder="{lang:Search}"> <button type="submit">Search</button> </form>
placeholderを {lang:Search} にしておけば、言語設定に応じてくれるので推奨します。
<small class="copyright">(c) {Title}</small>
ここでいうコピーライトとは、このテーマをインストールしたブログの投稿内容に対するコピーライト表記なので、ユーザーのブログ名が出力されるようにしておきます。
任意ですが、「私が作ったテーマです!」というのを表記したければ入れておくと良いでしょう。
更に、bodyにclass名を付与したり、レイアウトに関わる部分を設定していきます。
<body class="{block:IndexPage}index{/block:IndexPage}{block:PermalinkPage}permalink{/block:PermalinkPage}">
これでbodyにclass名が付与されました。
続いて、インデックスページではカラム数を1~3列で選べるようにするため、以下のように設定しました。
<div id="contents"{block:IndexPage} class="{select:Max Layout Column}"{/block:IndexPage}> <!-- ここに各投稿のHTMLを入れる --> </div>
コーディングの段階で用意してたclass名が付与されるように、テーマオプションで用意した「select:Max Layout Column」の値が出力されるように組み込んでいます。
共通部分が完了したら、中身にうつっていきます!
インデックスページの組み込み、と書いていますが、ほとんどがパーマリンクページへ引き継がれるタグになっているので、ここが山場です!
コーディングの章で、各投稿部分のHTML構造に軽く触れましたが、実際に組み込んでいきましょう。
{block:Posts} <article class="post {block:Text}text{/block:Text}{block:Photo}photo{/block:Photo}{block:Photoset}photoset{/block:Photoset}{block:Panorama}panorama{/block:Panorama}{block:Quote}quote{/block:Quote}{block:Link}link{/block:Link}{block:Chat}chat{/block:Chat}{block:Audio}audio{/block:Audio}{block:Video}video{/block:Video}{block:Answer}answer{/block:Answer}"> ... </article> {/block:Posts}
{block:Posts}で囲んだ領域が、投稿の数だけ繰り替えれるので、articleを囲むようにします。
また、上記のようにすると、共通の「.post」に加えて、投稿タイプにあわせて「.text」「.photo」「.link」などのclassが振られます。
テキスト投稿タイプをベースに一旦組み込みます。
各独自タグの詳しい説明は第2回で紹介していますので、分からない部分は確認しながら進んでください!
{block:Posts} <article class="post ...."> <!-- 内容 --> <div class="post_body"> {block:Title} <h1><a href="{Permalink}">{Title}</a></h1> {/block:Title} {block:Body}{Body}{/block:Body} </div> <!-- 共通フッター --> <footer class="post_footer"> <!-- 出典 --> <div class="source">{lang:Source} : <a href="{SourceURL}" target="_blank">{SourceURL}</a></div> <!-- タグ一覧 --> {block:HasTags} <ul class="tags"> {block:Tags} <li><a href="{TagURL}">#{Tag}</a></li> {/block:Tags} </ul> {/block:HasTags} <!-- リブログ/ライクボタン --> <ul class="btn"> <li class="reblog">{ReblogButton}</a></li> <li class="like"><span>{LikeButton}</span></li> </ul> <!-- 投稿日 --> <time datetime="{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero}">{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero} {ShortDayOfWeek}</time> <!-- リアクション件数 --> <div class="notes"><a href="{Permalink}">{NoteCountWithLabel}</a></div> </footer> </article> {/block:Posts}
さて、今組み込んだベース部分ですが、テキスト投稿タイプのHTML構造が「質問ページ」「ゲスト投稿ページ」「カスタムページ」において流用されるようになっています。
しかしながら、この3つのページには「投稿日時」という概念は存在せず、「投稿タグ」もありません。
そのため、「.post_footer」が出力される条件を追加します。
<!-- 投稿日時が存在する場合に出力 --> {block:Date} <footer class="post_footer"> ... </footer> {/block:Date}
投稿タイプ別の組み込みの前に、前項で作ったベースのうち、共通部分とそれ以外を分け、共通しない部分は一旦 {block:Text} で囲みます。
{block:Posts} <article class="post ...."> {block:Text} <!-- 内容 --> <div class="post_body"> {block:Title} <h1><a href="{Permalink}">{Title}</a></h1> {/block:Title} {block:Body}{Body}{/block:Body} </div> {/block:Text} {block:Date} <footer class="post_footer"> ... </footer> {/block:Date} </article> {/block:Posts}
内容にあたる「.post_body」を囲みました。
こうすることで親のarticleタグと共通フッターは投稿タイプに関わらず出力されるようになります。
もちろんこのままではテキスト投稿タイプ以外の投稿はフッターしか表示されないことになるので、各投稿タイプ別の組み込みを行っていきます。
各投稿タイプに関する記述は、{block:Text}~{/block:Text} の下にどんどん連ねて書いていきます。
独自タグは詳しい内容を第2回で紹介していますので、以下にはいくつかだけソースを紹介します。
{block:Posts} <article class="post ...."> {block:Text} ... {/block:Text} {block:Photo} <figure><img src="{PhotoURL-HighRes}" alt=""></figure> {block:Caption} <div class="post_body"> {Caption} </div> {/block:Caption} {/block:Photo} {block:Date} <footer class="post_footer"> ... </footer> {/block:Date} </article> {/block:Posts}
シンプルな形だとこうなります。
画像投稿タイプの場合は、本文は{Caption}になりますのでご注意を。また、キャプションを入れずに投稿することも数多くあるので、「.post_body」はキャプションがあるときだけ出力されるようにします。
リブログ投稿は、正確には「リブログされたテキスト投稿」「リブログされた画像投稿」といった形で、各投稿タイプの組み込みが完了していれば出力されます。
そのため、リブログ投稿の場合には、更に追加したい情報を組み込むイメージです。
<article class="post ..."> {block:RebloggedFrom} <!-- リブログ元を出力 --> <div class="parent"> Reblogged from: <a href="{ReblogParentURL}" target="_blank">{ReblogParentName}</a> </div> <!-- リブログの場合にはdivを追加 --> <div class="reblogged"> {/block:RebloggedFrom} {block:Text} ... {block:Text} .... {block:Date} <footer class="post_footer"> ... </footer> {/block:Date} {block:RebloggedFrom} <!-- 追加したdivのとじタグ --> </div> {/block:RebloggedFrom} </article>
今回は、見た目的にわかりやすくしたかったので、リブログのときは div.reblogged というブロックで囲むようにしてみました。
投稿部分の組み込みが完了したら次はページネーションです。
{block:Pagination}はインデックスページ用のページネーションで、トップページ・タグページ・検索結果ページで流用されます。ページネーション用のタグはこちらに細かく書いてあるのでサラッと。
[OP] 今回は、テーマで無限スクロールを使えるようにしたかったので、無限スクロールをONにしている場合にはページネーションを非表示にするように組み込んでみます。
<div class="pagination{block:IfEndlessScroll} hide{/block:IfEndlessScroll}"> {block:PreviousPage} <a href="{PreviousPage}">New</a> {/block:PreviousPage} <span>/</span> {block:NextPage} <a href="{NextPage}">Old</a> {/block:NextPage} </div>
div.paginarionに対して、IfEndlessScrollがONのみ「.hide」のclassを付与するように、テーマオプションのところで作っていた「if:Endless Scroll」を活用しています。CSS側で「.paginarion.hide」は display:none; となるように設定しておきます。
これと合わせて、無限スクロールに使用しているjavascriptも、{block:IfEndlessScroll}で囲んでおきましょう。
タグ・日付・検索ページについてはインデックスページに含まれるので、大きな調整は必要ありません。何のページなのかわかるように、タイトルを付けてあげましょう。
... <header>...</header> <div id="contents" ...> <!-- タグページ用 --> {block:TagPage} <h1>{lang:Posts tagged Tag}</h1> {/block:TagPage} <!-- 日付ページ用 --> {block:DayPage} <h1>{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero} {ShortDayOfWeek}</h1> {/block:DayPage} <!-- 検索ページ用 --> {block:SearchPage} <h1>{lang:SearchResultCount results for SearchQuery}</h1> <!-- 検索結果が0件だった場合に出力 --> {block:NoSearchResults} <div class="inner"> <p>{lang:Sorry no search results found}</p> </div> {/block:NoSearchResults} {/block:SearchPage} ... </div> <footer>...</footer> ...
また、日付ページだけはページネーションの種類が違うので、先ほど追加したページネーションの近くに、日付ページ専用のページネーションを用意しておきましょう。
<!-- 日付ページでのみ出力 --> {block:DayPage} {block:DayPagination} <div class="pagination"> {block:NextDayPage} <a href="{NextDayPage}">{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero} {ShortDayOfWeek}</a> {/block:NextDayPage} <span>/</span> {block:PreviousDayPage} <a href="{PreviousDayPage}">{Year}-{MonthNumberWithZero}-{DayOfMonthWithZero} {ShortDayOfWeek}</a> {/block:PreviousDayPage} </div> {/block:DayPagination} {/block:DayPage}
前後の日付の投稿があれば出力されます。投稿のなかった日付は飛ばされるようになっています。
インデックスページがひと通りできたらパーマリンクページはほとんどやることがありません。リブログ・ライクの詳細を出力してくれるタグを組み込みましょう。
{block:Posts} <article> <article class="post ...."> </article> <!-- パーマリンクページでのみ出力 --> {block:PermalinkPage} <!-- リアクションがあった場合に出力 --> {block:PostNotes} <div class="notes-block"> <div class="notes-title">{NoteCountWithLabel}</div> {PostNotes-64} </div> {/block:PostNotes} {/block:PermalinkPage} {/block:Posts}
インデックスページとパーマリンクページはページネーションが違うので組み込みます。場所はインデックスページ用のページネーション近辺で良いでしょう。
<!-- パーマリンクページでのみ出力 --> {block:PermalinkPage} {block:PermalinkPagination} <div class="pagination"> {block:NextPost} <a href="{NextPost}">New</a> {/block:NextPost} <span>/</span> {block:PreviousPost} <a href="{PreviousPost}">Old</a> {/block:PreviousPost} </div> {/block:PermalinkPagination} {/block:PermalinkPage}
さて、組み込みはこれでほぼ完了です!
今回は個人プロフィールボックスを用意したいなと思っていたので、その組み込みをおまけに。
<!-- プロフィールボックスの表示をONにしていた場合に出力 --> {block:IfShowProfileBox} <!-- インデックスページでのみ出力 --> {block:IndexPage} <!-- タグ・日付・検索ページでは出力したくないので .hide クラスで非表示に --> <div class="post profilebox{block:TagPage} hide{/block:TagPage}{block:SearchPage} hide{/block:SearchPage}{block:DayPage} hide{/block:DayPage}"> <div class="inner"> <figure> <img src="{image:Profile Photo}" alt=""> </figure> <div class="name">{text:Profile Name}</div> <div class="description">{text:Profile Description}</div> </div> </div> {/block:IndexPage} {/block:IfShowProfileBox}
以上で完成です!
◯オリジナルテーマ「Simplig-folio」
http://simpligfolio.tumblr.com/
この後、はるかさんからのご要望どおり、テーマ申請をすることになりました。もう私は力尽きたので、はるかさんにバトンタッチします。あとはヨロシク~!
いかがでしたか?
組み込みをしていて思いましたが、テーマづくりの肝は何よりも「静的コーディングの作業」だと学びました。いかにして無駄を省き、効率的なコードを書くか、それ次第だなと………。
これで完璧!という状態にして組み込みし始めても、結構ボロが出てきてしまいました。できればCSSやJSは自身のサーバーに仮置きしながら進めて、最後にTumblrにアップロードするのが良さそうです!
それではまた(^ω^)
【もっとTumblrを知りたい方はコチラ】
※ 多機能型SNS「Tumblr(タンブラー)」が人気の理由と特徴、簡単な使い方まとめ
※ Tumblrをカスタマイズしてブログをおしゃれなデザインにするおすすめ無料テーマまとめ
※ Tumblrでもここまでデザインできる!オリジナルカスタマイズの実例解説