IT the Best

はてなブログのカスタマイズ情報を中心に、WEBデザインからJavaScriptまでWEB系の開発情報を発信します。便利ツールや暇つぶしのゲームなど開発物も公開します。

【はてなブログカスタマイズ】2ステップでホーム画面にシェアボタン(あとで読む系)を表示させる - スマホからでも簡単カスタマイズ

Photo by Ben White on Unsplash

Photo by Ben White on Unsplash


今回のはてなブログカスタマイズは、ホーム画面の記事一覧にシェアボタン(後で読む系)を搭載するカスタマイズです。

 

 

ホーム画面にシェアボタンを表示させる

 

当カスタマイズで表示させるシェアボタンは、はてなブックマークPocketです。これらのボタンはシェア機能に加え後で読むための機能としても活用されています。多くのサイトでは記事ページにだけシェアボタンが設置されていますが、これらの後で読む系のボタンは記事一覧にも設置することで、利便性の向上、アクセスアップにつながると思われます。

※記事一覧を表示させる要素によっては表示されない可能性があります。

 

完成イメージ

f:id:Surprisedblog:20191001153301p:plain

 

ステップ1:jQueryを設置する

※既にjQueryを設定済みの方は不要

 

はてなブログダッシュボードから設定 > 詳細設定 > 検索エンジン最適化 > headに要素を追加のテキストエリアにこちらのコードを追加します。

 

 

f:id:Surprisedblog:20191001160112p:plain

 

資料

jQueryの設定方法 - jQueryを使用するまでの手順 |【jQuery】 - IT the Best

 

 

ステップ2:ホーム画面の記事一覧にボタンを追加する

f:id:Surprisedblog:20191002075022p:plain

ホーム画面、/archiveの記事一覧に適用されます。

デザイン スパナアイコン フッタ にこちらのコードを記入します。

公式ドキュメント

 

f:id:Surprisedblog:20191002020344p:plain

 

 スマホの場合(ブラウザ)

PC版表示にすることでカスタマイズができます。

  1. ページ下部のPC版をタップします。

    f:id:Surprisedblog:20191001164911p:plain

  2. デザイン  スパナアイコン  フッタにコードを記入します。
    PC版表示にしてからの作業は同じです。

 

 

他のシェアボタンも表示させる

Facebook

1.シェアボタン

f:id:Surprisedblog:20191002074203p:plain

 

2.いいねボタン

f:id:Surprisedblog:20191002074309p:plain

公式ドキュメント

 

Twitter

f:id:Surprisedblog:20191002074101p:plain

公式ドキュメント

Guides — Twitter Developers

 

tumblr

公式ボタンがうまく動作しなかったため自作したデザインのボタンになります。

f:id:Surprisedblog:20191002074015p:plain

公式ドキュメント

  1. Buttons | Tumblr
  2. 共有ボタンドキュメンテーション | Tumblr

 

LINE

LINEで送るボタンのデザインも自作のものになります。

f:id:Surprisedblog:20191002073433p:plain

公式ドキュメント

LINE Social Plugins

 

 

レイアウトを変える 

Scriptコードのaタグの属性を変更することで、各SNSが公式で提供しているレイアウトに変更することができます。

 

 

Facebookシェアボタンのレイアウトを「box_count」から「button_count」に、サイズを「small」から「large」に変更する。

f:id:Surprisedblog:20191002074203p:plainf:id:Surprisedblog:20191002085457p:plain

title box_count CSS button_count
 
<script>
    $(".archive-entries section").each(function(i,e){
        var share_url = encodeURIComponent($(e).find(".entry-title-link").attr("href"));
        var share_title = encodeURIComponent($(e).find(".entry-title-link").text());
        // facebook sharebutton
        var div=$(document.createElement("div")).addClass("fb-share-button").attr({
          "data-href":decodeURIComponent(share_url),
          "data-layout":"box_count","data-size":"small"
        });
        var a=$(document.createElement("a")).attr({
          "href":"https://www.facebook.com/sharer/sharer.php?u="+share_url+"&src=sdkpreparse",
          "class":"fb-xfbml-parse-ignore","target":"_blank"
        }).html("シェア");
        div.append(a);
        $(e).append(div);
    })
    // facebook sharebutton
    if($("#fb-root").length<1){
        $("body").append($(document.createElement("script")).attr("async","").attr("defer","").attr("crossorigin","anonymous")
        .attr("src","https://connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v4.0"));
    }
</script>
 
<script>
    $(".archive-entries section").each(function(i,e){
        var share_url = encodeURIComponent($(e).find(".entry-title-link").attr("href"));
        var share_title = encodeURIComponent($(e).find(".entry-title-link").text());
        // facebook sharebutton
        var div=$(document.createElement("div")).addClass("fb-share-button").attr({
          "data-href":decodeURIComponent(share_url),
          "data-layout":"button_count","data-size":"large"
        });
        var a=$(document.createElement("a")).attr({
          "href":"https://www.facebook.com/sharer/sharer.php?u="+share_url+"&src=sdkpreparse",
          "class":"fb-xfbml-parse-ignore","target":"_blank"
        }).html("シェア");
        div.append(a);
        $(e).append(div);
    })
    // facebook sharebutton
    if($("#fb-root").length<1){
        $("body").append($(document.createElement("script")).attr("async","").attr("defer","").attr("crossorigin","anonymous")
        .attr("src","https://connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v4.0"));
    }
</script>

 

 

【簡単】カテゴリーとパンくずリストを階層化表示にする -SEOに効果あり- | はてなブログ

f:id:Surprisedblog:20190619185106j:plain

投稿日:2019/06/20

新しく、カテゴリー・パンくずリストを階層化表示にする機能を作成しました。こちらの方が扱いやすく、不具合が起こる可能性も低いと思われます。

www.it-the-best.com

ほとんどの機能変更はありませんが、パンくずリストの区切り文字や階層化させるカテゴリーリストの選択など新たに独自カスタマイズができるようになりました。すべてのコードを見直し約5千行省略したためほんの少しですが軽くなりました。
しかし、大きな変更点として新しいScriptコード(ファイル)では、最初に表示されているカテゴリーをパンくずリストに表示するようにしました。
また、新しく投稿した記事の方がスマホからのカスタマイズも容易です。

 

 

 

※更新情報

・2019/07/02

・2019/07/06

・2019/09/23

パンくずリストとは

パンくずリストの階層化表示は、ページがそのサイトのどこにあるのかを示し、記事のカテゴリーを詳しく表示することができます。そのため、SEOの効果的な対策として取り入れられています。

 

Google検索の検索結果では、パンくずリストからコンテンツの階層化表示が行われます。これによって、ページがサイト階層内のどこに位置するのかを示すことができ、SEO対策となります。

f:id:Surprisedblog:20190614020806p:plain

 

また、サイト運営者側も記事の管理が簡単になるので便利です。

 

現在のはてなブログのパンくずリスト

現在、はてなブログではカテゴリーの階層化ができません。WordPressなどではもちろんできるために、この辺りはなかなか痛い部分でもあります。

 

階層化ができないために、パンくずリストはトップと、記事のカテゴリーの2階層までとなってしまいます。

f:id:Surprisedblog:20190618221526p:plain

 

 

そこで、カテゴリーを階層化するための機能を開発しました。

今回開発した機能では、階層化カテゴリーの表示(カテゴリー一覧など)、パンくずリストの階層化を実現することができます。

f:id:Surprisedblog:20190618224001p:plainf:id:Surprisedblog:20190618223140p:plainf:id:Surprisedblog:20190618223702p:plain

※Google検索結果のパンくずリスト
階層化されたパンくずリストは、ページが表示されてから動的にページ内に作成しています。そのため、Googleの検索結果のパンくずリストには表示されません。なので、ブログ記事編集時にプレビューから、パンくずリストの要素下に生成したスクリプトデータを記事に埋め込んで、Google検索結果に作成されたパンくずリストが表示されるようにしています。

f:id:Surprisedblog:20190619085329p:plain
Googleの構造化データテストツールというものを使うと、Webページのパンくずリスト情報などを確認することができます。今回開発した機能は動的にパンくずリストを生成するため、このツールを使ったURLテストでは、パンくずリストは取得できません。

しかし、このツールを使ったURLテストで、パンくずリストを取得できないWebページでも、Googleの検索結果に階層化されたパンくずリストが表示されているものもあります。今のところ、今回開発した機能では確認できないので、直接記事内にスクリプトデータを埋め込む方法で表示をさせています。

はてなブログで階層化表示をする

はてなブログでのパンくずリストを含むカテゴリーを階層化表示させるための処理を、JavaScriptとCSSで可能にしました。

 

 

ファイルの準備

 ※注意:導入する場合

環境によっては、当記事で説明した通りの処理がされずに、ページの一部が正しく表示されなくなるなどの不具合が生じる可能性があります。ファイルの追加、公開コードの使用は、自己責任で行ってください。

 headタグ内に追加
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.it-the-best.com/css/category/1.0/category.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.it-the-best.com/css/category/1.1/category.min.css">
 フッタに追加
<script src="https://cdn.it-the-best.com/js/category/2.2/category.min.js"></script>
<script src="https://cdn.it-the-best.com/js/category/2.3/category.min.js"></script>
<script src="https://cdn.it-the-best.com/js/category/2.4/category.min.js"></script>

<script src="https://cdn.it-the-best.com/js/category/2.5/category.min.js"></script>
<script src="https://cdn.it-the-best.com/js/category/2.6/category.min.js"></script>
※更新情報 
2019/07/02
・バージョン2.4を公開
・変更点:カテゴリータグの非表示の処理方法を変更。
「"」または、「'」で囲まれていて、「-」を二つ以上含む独立カテゴリーが、階層カテゴリーと判断してしまう不具合に対応。
カテゴリー例)"-category-category"

2019/07/06
・バージョン2.5を公開
・変更点:リスト(LI)に設定するクラス名を変更
カテゴリー名に空白(スペース)が含まれると、クラス名に設定するときにエラーになることへの対応。クラス名をエンコード(変換)してから設定する仕様に変更。

2019/09/23
・バージョン2.6,1.1(CSS)を公開
・変更点:
CSS(1.1)-ホバー時の処理を変更。
JS(2.6)-Microsoft Edgeに対応。

 

階層カテゴリー を作る

階層化カテゴリーにするためには、記事編集時のカテゴリーに特殊な書き方をする必要があります。

 

親カテゴリーと、親となるカテゴリーにハイフンを続けて子カテゴリーを、階層ごとに書く。(半角ハイフンで親子関係を表現する)。

例)「映画」,「洋画」,「ヒューマンドラマ」,「レナードの朝」,「おすすめ映画」,「ロバートデニーロ」のカテゴリーを、次のように階層化カテゴリーにしたい場合。

・映画>洋画>ヒューマンドラマ>レナードの朝
・映画>おすすめ映画>レナードの朝
・ロバートデニーロ>レナードの朝

「映画」、「映画-洋画」、「映画-洋画-ヒューマンドラマ」、「映画-洋画-ヒューマンドラマ-レナードの朝」、
「映画-おすすめ映画」、「映画-おすすめ映画-レナードの朝」、
「ロバートデニーロ」「ロバートデニーロ-レナードの朝」
 

 

 

当記事のカテゴリー

f:id:Surprisedblog:20191005150708p:plain 

 

以上が、階層化カテゴリーの表示に必要な作業です。

 

こちらは、今回開発した機能の説明をしている記事です。

www.it-the-best.com

 

【はてなブログカスタマイズ】長くなったカテゴリーモジュールを開閉(折りたたみ)可能にする【CSS+JavaScript】

 

概要

前回、CSSだけではてなブログのカテゴリーモジュールに開閉機能を付けるカスタマイズ記事を投稿しました。

【CSS】のみで長くなったカテゴリーモジュールを開閉可能にする【はてなブログカスタマイズ】 - IT the Best

 

今回の記事もカテゴリーモジュールに開閉機能を付けるカスタマイズになりますが、今回はCSSだけでなくCSS+JavaScriptによるカスタマイズになります。

前回のCSSによる開閉機能は、CSSのマウスホバーをイベントとしていたためPC向けの機能としてカスタマイズをしました。今回は、クリック(タッチデバイスの場合タップ)をイベントに動作させるためスマホ(タッチデバイス)にも同様な動作が処理されるものになります。

 

前置き

  • カスタマイズにはjQueryを使用しています。

    jQueryの設定方法 - jQueryを使用するまでの手順 |【jQuery】 - IT the Best

  • はてなカテゴリーモジュールのHTMLコード(おそらくはてなブログ全体で同一)

    <div class="hatena-module hatena-module-category">
        <div class="hatena-module-title">
            カテゴリー
        </div>
        <div class="hatena-module-body">
            <ul class="hatena-urllist">
            </ul>
        </div>
    </div>

 

 

ステップ1

カテゴリーリンクのリストを非表示にする。(初期表示として非表示にする場合)

.hatena-module.hatena-module-category .hatena-module-body{
    display: none;
}

 

ステップ2

カテゴリーモジュールのタイトルクリックでボディ(カテゴリーリンクリスト)を表示させる。(開閉機能)

<script>
    $(".hatena-module.hatena-module-category .hatena-module-title").on("click",function(event){
        var body=$(".hatena-module.hatena-module-category .hatena-module-body")
        $(body).slideToggle()
})
</script>

 

ここまでで開閉機能自体は完成です。ここからは、プラスαの機能で使い勝手を良くするカスタマイズです。

 

ステップ3

マウスカーソルをポインターにする。

.hatena-module.hatena-module-category .hatena-module-title{
    cursor: pointer;
}

 

ステップ4

トグルアイコン(開閉アイコン)を追加する。

.hatena-module.hatena-module-category .hatena-module-title::before{
    content: "";
    cursor: pointer;
    float: right;
    margin-top: 3px;
    color: gray;
    opacity: .3;
    width: 10px;
    height: 10px;
    border-left: solid 3px currentColor;
    border-bottom: solid 3px currentColor;
    position: relative;
    transition: all .3s;
    -webkit-transition: all .3s;
    right: 5px;
    top: 11px;
    -webkit-transform: rotate(135deg);
    transform: rotate(135deg);
}
.hatena-module.hatena-module-category .hatena-module-title.closed-body::before{
    top: 5px;
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
}

<script>
    $(".hatena-module.hatena-module-category .hatena-module-title").addClass("closed-body"); // bodyが非表示の場合
</script>

 

ステップ5

トグルアイコンの切り替え(追加/削除)

<script>
    $(".hatena-module.hatena-module-category .hatena-module-title").toggleClass("closed-body"); // クラスの追加または削除
</script>

 

 

コード

ステップ1から5をまとめた全体のコード

<style>
.hatena-module.hatena-module-category .hatena-module-body {
display: none;
}
.hatena-module.hatena-module-category .hatena-module-title{
cursor: pointer;
}
.hatena-module.hatena-module-category .hatena-module-title::before{
content: "";
cursor: pointer;
float: right;
margin-top: 3px;
color: gray;
opacity: .3;
width: 10px;
height: 10px;
border-left: solid 3px currentColor;
border-bottom: solid 3px currentColor;
position: relative;
transition: all .3s;
-webkit-transition: all .3s;
right: 5px;
top: 11px;
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
}
.hatena-module.hatena-module-category .hatena-module-title.closed-body::before{
top: 5px;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
</style>
<script>
$(".hatena-module.hatena-module-category .hatena-module-title").addClass("closed-body"); // bodyが非表示の場合
$(".hatena-module.hatena-module-category .hatena-module-title").on("click", function (event) {
var body = $(".hatena-module.hatena-module-category>.hatena-module-body");
$(body).slideToggle();
$(".hatena-module.hatena-module-category .hatena-module-title").toggleClass("closed-body"); // クラスの追加または削除
});
</script>

 

 

おすすめのはてなブログカスタマイズ情報

 

【CSS】のみで長くなったカテゴリーモジュールを開閉可能にする【はてなブログカスタマイズ】

 

概要

はてなブログを長いことやっていると、記事も多くなりカテゴリーの種類も多くなると思います。

そんななかサイドバーにはてなモジュールのカテゴリーを設定していると、ズラーっとしたに長いカテゴリーリンクのリストができてしまうと思います。

f:id:Surprisedblog:20190917201116p:plain

 

そこで今回の記事は、そんな長くなったカテゴリーリンクのリストにCSSだけで開閉機能を付けて、コンパクトにするはてなブログのカスタマイズになります。

f:id:Surprisedblog:20190917201806p:plain

 

 

 

CSSだけで開閉機能を実現するには、マウスオーバー(マウスホバー)時に表示/非表示を切り替えて開閉させる方法をとります。

しかし、スマートフォンなどタッチデバイスでのマウスオーバーはタップしたときに動作します。ですが意図しない動作になりがちなため、今回はPC向けの開閉機能のカスタマイズをしたいと思います。

 

PCかSP(スマートフォン)はブラウザの表示サイズで判断します。

image by https://codezine.jp/article/detail/10928

image by https://codezine.jp/article/detail/10928

上の画像資料を参考に960px以上をPCとしてCSSを設定します。

@media (min-width: 960px){}

 

 

初期表示としてカテゴリーリンクのリストを非表示にします。

.hatena-module-category .hatena-module-body{
    display: none;
}


次に、カテゴリーモジュール自体をマウスオーバーしたときに、先ほど非表示にしたリストを表示するスタイルを設定します。

.hatena-module-category:hover .hatena-module-body{
    display: block;
}

 

これだけで表示/非表示の切り替えができます。

 

 

開閉機能をわかりやすくするための矢印の記号もCSSだけで設定できます。

.hatena-module-category::before{
    content: "";
    float: right;
    margin-top: 3px;
    color: gray;
    opacity: .3;
    width: 10px;
    height: 10px;
    border-left: solid 3px currentColor;
    border-bottom: solid 3px currentColor;
    position: relative;
    top: 5px;
    right: 5px;
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
    transition: all .3s;
    -webkit-transition: all .3s;
}
.hatena-module-category:hover::before{
    top: 11px;
    -webkit-transform: rotate(135deg);
    transform: rotate(135deg);
}

 

 

 

コード

ブラウザサイズ画面に応じた開閉機能から、矢印アイコンまでのCSSのコードはコチラになります。

@media (min-width: 960px){
.hatena-module-category .hatena-module-body{
display: none;
}
.hatena-module-category:hover .hatena-module-body{
display: block;
}
.hatena-module-category::before{
content: "";
float: right;
margin-top: 3px;
color: gray;
opacity: .3;
width: 10px;
height: 10px;
border-left: solid 3px currentColor;
border-bottom: solid 3px currentColor;
position: relative;
top: 5px;
right: 5px;
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
transition: all .3s;
-webkit-transition: all .3s;
}
.hatena-module-category:hover::before{
top: 11px;
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
} }

 

 

おすすめのはてなブログカスタマイズ情報

 

 

【読者になるボタン】をCSSだけで「立体感」のある押しボタンにカスタマイズする | はてなブログカスタマイズ

 

 

読者になるボタン

カスタマイズ不可能な読者になるボタン

はてなブログの 設定詳細 にある「読者になるボタン」はiframe要素なのでカスタマイズができません。

 

f:id:Surprisedblog:20190821180054p:plain
f:id:Surprisedblog:20190821180414p:plain

ページ下部

<iframe src="https://blog.hatena.ne.jp/Surprisedblog/it-the-best.hatenablog.jp/subscribe/iframe" allowtransparency="true" frameborder="0" scrolling="no" width="150" height="28"></iframe>

HTML要素

 

カスタマイズ可能な読者になるボタン

なので当サイトでは、サイドバーにある「プロフィールモジュール」「読者になるボタン」を使ってカスタマイズをしました。

サイドバーに表示される「読者になるボタン」はiframe要素でないためスタイルのカスタマイズができます。

f:id:Surprisedblog:20190821182606p:plain
<div class="hatena-follow-button-box btn-subscribe js-hatena-follow-button-box">
<a href="#" class="hatena-follow-button js-hatena-follow-button unsubscribing">
<span class="subscribing">
<span class="foreground">読者です</span>
<span class="background">読者をやめる</span>
</span>
<span class="unsubscribing" data-track-name="profile-widget-subscribe-button" data-track-once="">
<span class="foreground">読者になる</span>
<span class="background">読者になる</span>
</span>
</a>
<div class="subscription-count-box js-subscription-count-box" style="display: block;">
<i></i>
<u></u>
<span class="subscription-count js-subscription-count">9</span>
</div>
</div>

「プロフィールモジュール」内の「読者になるボタン」のHTML要素

 

 

カスタマイズ可能な読者になるボタンのコピー

現在、「読者になるボタン」は記事下に表示しています。サイドバーに表示された「読者になるボタン」付きの「プロフィールモジュール」から、「読者になるボタン」のHTML要素をコピーして記事下に張り付けて表示しています。

「HTML要素コード」のコピーは、ブラウザの開発者ツールを使って取得します。

誰でも簡単にブログカスタマイズが「楽になる方法 」| 開発ツール - IT the Best

 

「読者になるボタン」だけ表示している「プロフィールモジュール」の場合、HTMLコードはこのようになっていると思います。

<div class="hatena-module hatena-module-profile">
<div class="hatena-module-title">
プロフィール
</div>
<div class="hatena-module-body">
<div class="hatena-follow-button-box btn-subscribe js-hatena-follow-button-box">
<a href="#" class="hatena-follow-button js-hatena-follow-button unsubscribing">
<span class="subscribing">
<span class="foreground">読者です</span>
<span class="background">読者をやめる</span>
</span>
<span class="unsubscribing" data-track-name="profile-widget-subscribe-button" data-track-once="">
<span class="foreground">読者になる</span>
<span class="background">読者になる</span>
</span>
</a>
<div class="subscription-count-box js-subscription-count-box" style="display: block;">
<i></i>
<u></u>
<span class="subscription-count js-subscription-count">9</span>
</div>
</div>
</div>
</div>

 

コピーの仕方(GoolgeChromeブラウザの場合) 

 

 

カスタマイズ可能な読者になるボタンの実装

上記のコードには「読者になるボタン」を実装するのに不必要なコードがあるので必要に応じて消します。

コピーしたコードをメモ帳などに張り付けて以下の部分を消します。

  • 1行目の「hatena-module-profile」 クラス
  • 2行目から4行目のコード
<div class="hatena-module hatena-module-profile">
<div class="hatena-module-title">
プロフィール
</div>
・・・
</div>

 

読者数は、ページが表示されるときにその時の読者数が表示されるので、20行目の読者数の数字(9)はあってもなくても大丈夫です。

 

修正したコードを表示したいHTML記述欄に張り付ければ「読者になるボタン」の実装ができます。

 

 

読者になるボタンのカスタマイズ

このボタンには下記のスタイルが適用されています。

.hatena-module{
    padding-left: 0px;
}
.hatena-module .hatena-follow-button.js-hatena-follow-button.unsubscribing{
    background-color: unset;
    border-radius: 2em;
    box-shadow: 1px 3px 0px 1px #948383;
    font-size: 120%;
}
.hatena-module .hatena-follow-button.js-hatena-follow-button.unsubscribing:hover{
    box-shadow: 0 0 0px 0 #000;
    margin: 3px 0px 0 1px;
}
.hatena-module .hatena-follow-button.js-hatena-follow-button.subscribing{
    border-radius: 2em;
    box-shadow: 1px 3px 0px 1px #948383;
    font-size: 120%;
}
.hatena-module .hatena-follow-button.js-hatena-follow-button.subscribing:hover{
    box-shadow: 0 0 0px 0 #000;
    margin: 3px 0px 0 1px;
    width: 105px;
}

14行目から23行目は、読者登録後のボタンのクラスに対するスタイルになります。

 

同カテゴリーが記事下の関連記事に表示されない時の対処法 - 【はてなブログ】| 【カスタマイズ】

f:id:Surprisedblog:20190705024136j:plain

unsplash-logo William Iven

 

 

関連記事を記事下に表示する設定にしているのに、関連する記事が表示されないので、はてなモジュールから関連記事を表示するようにカスタマイズしました。

 

 

問題と対処法

 

私としては、記事と同じカテゴリーが表示されてほしいのですが、全く予想だにしていない記事が関連記事として表示されてしまいます。

 

そこで、サイドバーに設定することができる関連記事を、記事下に移動させることで対処しました。

 

 

記事下の関連記事の仕様

はてなブログによるとこのような仕様になっています。

 

http://staff.hatenablog.com/entry/2017/06/13/164000から引用

はてなブログでは、記事ページ(個別記事のパーマネントリンク表示)の本文下(ソーシャルパーツを表示していればその下)に、関連記事を表示するようにしました。そのブログに投稿された記事から、表示中の内容に関連するとみられるものを最大5件まで、一覧形式で表示します。

 

 

サイドバーの関連記事モジュールの仕様

サイドバーの関連記事モジュールの表示方法は、このようになっています。

 

f:id:Surprisedblog:20190704190351p:plain

 

 

関連記事モジュールは、同じカテゴリーを関連記事として表示してくれます。

 

このモジュールを記事下に移動させて、記事下の関連記事として同じカテゴリーの記事を表示させることができます。

 

 

カスタマイズ

サイドバーに関連記事モジュールを追加する

 

デザイン設定のカスタマイズから、モジュール追加で関連記事を追加します。

f:id:Surprisedblog:20190704210725p:plain

 

 

関連記事モジュール以降にJavaScriptを埋め込む

 

関連記事モジュールより後に、JavaScriptコードを記入します。

 

サンプルコード

※サンプルコードは、説明通りの動作を保証できるものではありません。

 

jquery使用

<script>
//サイドバーの関連記事モジュール var $r_entries = $("#box2 .hatena-module-related-entries") //一番下の関連記事 var r_entries = $r_entries[$r_entries.length - 1] //記事下 var customized_footer = $("article footer .customized-footer") if (customized_footer.length>0) {//記事下に配置できる場所がある //記事下の一番上に移動 customized_footer.prepend(r_entries) }else{ //コメントの上に表示 $("article footer .comment-box").before(r_entries) }
</script>

 

素のJavaScript

<script>
try {
    //サイドバー
    var box2 = document.getElementById("box2")
    //サイドバーの関連記事モジュール
    var domr_entries = box2.getElementsByClassName("hatena-module-related-entries")
    //一番下の関連記事
    var r_entries = domr_entries[domr_entries.length - 1]
    //記事下
    var article_footer = document.getElementsByTagName("article")[0].getElementsByTagName("footer")[0]
    var customized_footer = article_footer.getElementsByClassName("customized-footer")[0]
    try {
        //記事下の一番上に移動
        customized_footer.insertBefore(r_entries, customized_footer.firstChild)   
    } catch (error) {//エラーの場合 
        //コメントの上に表示
        var footer_comment=article_footer.getElementsByClassName("comment-box")[0]
        footer_comment.parentNode.insertBefore(r_entries,footer_comment); 
    }
} catch (error) {}
</script>

 

 

表示するデータの変更

 

要素(はてなモジュール)を移動しているだけなので、デザイン設定から今まで通りの変更ができます。

 

 

【はてなブログ】カテゴリー別記事一覧のサイトマップページを作る |【カスタマイズ】

f:id:Surprisedblog:20190619185106j:plain

 

www.it-the-best.com

 

 

当処理の改良版を以下の記事で作成しました。

www.it-the-best.com

 

 

カテゴリー別の記事一覧ページを固定ページで作りました。

html,css,javascriptそしてphpを利用して表示させています。

※固定ページは、はてなブログPROのみ作成できます。

 

※訂正:2019/11/01

Ajax通信による記事情報の取得はJavaScriptから上手くできないと思っていましたが、"POST"ではなく"GET"であれば通信することができました。
当記事ではPHP経由で通信を行う処理を記述していますが、その必要はなくJavaScriptから直接記事の情報を取得することが可能です。

 

 

カテゴリーを取得 

var category_list = []
var category = $(".hatena-module-category .hatena-module-body>ul>li")
category.each(function (i, e) {
    if (e.style.display != "none") {
        /*カテゴリーの記事数を消す*/
        var c_name = $(e).find(">a").text()
        c_name = c_name.replace(/[\s]/g, "")
        c_name = c_name.replace(/(\(.*\)$)/, "")
        /*カテゴリーの記事数を消す*/
        category_list.push(c_name)
    }
})

※階層カテゴリーの場合は、最上位カテゴリーのみを取得しています

 

カテゴリー別に記事を取得

for (var i of category_list) {
    var url = phpapi + "https://www.it-the-best.com/archive/category/" + i
var url = location.origin+"/archive/category/" + i $.ajax({ type: 'POST',
type: 'GET', url: url, dataType: "html", }).always((data) => { var data_element = $($.parseHTML(data));//parse var main = data_element.find("#main-inner") $("#main-inner")[0].append(main[0]) }); }

 ajaxを使用して、カテゴリーの記事一覧ページ(/archive/category/...)から記事の一覧を取得します。

 

 

※JavaScriptから直接取得しようとするとうまくいかないので、PHP経由で一覧の取得をしています。変数phpapiにはそのphpファイルが置いてあるURLが入ります。

<?php 
    $entry_url = $_GET["entry_url"] ;
    $page = @file_get_contents($entry_url);

    echo ($page);
?>

変数entry_urlは、取得したいカテゴリー別ページのURLが入ります。

 

 

 

取得したページをそのまま表示させて、前述のJavaScriptのajaxで記事を取得しています。

 

 

表示

はてなモジュールのカテゴリー一覧からカテゴリーを取得しているため、ページ読み込み後に処理を行っています。

$(function () {
var category_list = []
var category = $(".hatena-module-category .hatena-module-body>ul>li")
category.each(function (i, e) {
    if (e.style.display != "none") {
        /*カテゴリーの記事数を消す*/
        var c_name = $(e).find(">a").text()
        c_name = c_name.replace(/[\s]/g, "")
        c_name = c_name.replace(/(\(.*\)$)/, "")
        /*カテゴリーの記事数を消す*/
        category_list.push(c_name)
    }
})

for (var i of category_list) {
    var url = phpapi + "https://www.it-the-best.com/archive/category/" + i
var url = location.origin+"/archive/category/" + i $.ajax({ type: 'POST',
type: 'GET', url: url, dataType: "html", }).always((data) => { var data_element = $($.parseHTML(data));//parse var main = data_element.find("#main-inner") $("#main-inner")[0].append(main[0]) }); } })

固定ページにこのようなスクリプトを埋め込んで表示させています。

 

 

 

 //作成したカテゴリー別記事一覧ページ

www.it-the-best.com

 

 

記事を取得するためのアクセス(jsのajax通信)は、制約によってはじかれる可能性があるので、今回のはてなブログカスタマイズはすべての環境でできるものではありません。