10月28日追記
Gatsbyブログについて、初noteを書きました。
【完全版】爆速GatsbyでWordPressちっくなブログを作る全手順
こんにちは、筋肉めがねです。
開設して5ヶ月経ったこのブログですが、少しずつ読者の方が増えてきております。そこで、読者の方がブログ内の必要な情報へアクセスしやすいように、サイドバーへ検索ボックスをつけました。ツールは、Googleのカスタム検索を使用しています。
検索ボックスを実装するにあたり、以下の記事がとても参考になりました。本当に感謝です。
Gatsby.jsにGoogleカスタム検索エンジンを設置する方法
また、タイトルの通り、この記事は「【連載】Gatsbyブログのデザインをワードプレスちっくにする手順」の、その7です。
これまでの記事はこちらです。
【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その1)記事のテンプレートを作り込む。
【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その2)「この記事書いた人」っていうComponent作成とサイドバーの一部をスマホで非表示、そして背景色を変更しました。
【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その3)ヘッダーとフッターを追加しました。
【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その4)twitterシェアボタンとtwitter cardを導入しました。
【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その5)Gatsbyブログにページネーションを実装しました。
【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その6)Gatsbyブログの好きな位置に目次をつける方法。
こちらが目次です。
先ずは、以下のリンクからカスタム検索ボックスを作成します。
必要事項を入力し、「作成」ボタンを押せば、カスタム検索エンジンが作成されます。
カスタム検索エンジンを作成したら、Google AdSenseと紐付けましょう。
上の画像にて、「コントロールパネル」ボタンを押して、「広告」タブをクリックします。
「検索エンジンの収益化」をオンにすれば、同じgoogle accountで既に作成しているAdSenseのidと自動で関連付けされます。
続いて、検索ボックスのデザインを変更します。「レイアウト」と「テーマ」を変更すれば、それで十分です。
設定が終わったら、「保存してコードを取得」ボタンを押しましょう。
コードが表示されたら、cx=
以下のコードをコピーしておきましょう。
これで、カスタム検索ボックスの設定は完了です。
先ずはSearch componentを作成します。
import React from "react"
const Search = () => {
const cx = 'xxxxx:xxxxx'; //数字の羅列:アルファベットの羅列
let gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
let s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
return (
<div>
<div className="gcse-search"></div>
</div>
)
}
export default Search
cxには、先ほど取得したコードを貼り付けます。
続いて、src直下にhookフォルダを作り、以下を記述します。
フックとは何ぞや、という事ですが、こちらの記事にとても分かりやすく書かれております。
import React, { useState, useEffect } from 'react'
function ClientOnly({ children, ...delegated }) {
const [hasMounted, setHasMounted] = useState(false);
useEffect(() => {
setHasMounted(true);
}, []);
if (!hasMounted) {
return null;
}
return (
<div {...delegated}>
{children}
</div>
);
}
export default ClientOnly
最後に、Sidebar componentに検索ボックスを実装します。
class Sidebar extends React.Component {
render() {
const { location } = this.props
const {
author,
subtitle,
copyright,
menu,
} = this.props.data.site.siteMetadata
const isHomePage = get(location, 'pathname', '/') === '/'
...
return (
<div className="sidebar">
<div className="sidebar__inner">
<div className="sidebar__author">{authorBlock}</div>
<div>
<Menu data={menu} />
{/* following is google search box */}
<ClientOnly>
<Search />
</ClientOnly>
<Links data={author} />
<Adsense />
</div>
</div>
...
<Search />
を<ClientOnly>
で囲みます。
これで、検索ボックスがサイドバーに表示されました。
これで、サイト内の気になる情報へサクッとアクセスできます。