を使用してジキルブログにコメントシステムを追加- 2/2
16512 ワード
この記事はどのように迅速かつ自由に構築し、自分自身をホストする方法を示すシリーズの一部ですJekyll ブログを書くGitHub Pages . このシリーズはまた、直接私たちのコードを使用してコメントシステムを追加するようなより高度なトピックをカバーしますStaticman とプライバシーを使用してまだ無料の分析を使用してUmami .
チュートリアルをいくつかの部分に分けました. Introduction Setting Up Create Content Customize Display
Commenting System Part 1 あなたがここにいる
Analytics 最後に、機能的なコメントシステムを追加しました.
しかし、まだコメントに対応できるようにすることから始めることができる多くの機能があります.
返信機能追加
メッセージへの返信を有効にするには、コメントが別のものへの返信であることを知る必要があります.
そうするために、我々は
許可するには、
それから、我々は我々のフィールドにこの分野を加える必要があります
このコメントを、対応する親IDでコメントを追加します.
それぞれのコメントについては、その回答も表示されます.これを行うには、再帰的に含める
これがその結果です.追加しました
それはスタートです、しかし、我々は間違いなくこれらのすべての応答ボックスを表示したくありません.返信ボタンを押すだけで表示されます.
HTMLとCSSのみを使用してこの機能を実装します.
まず、コメントの返信ボックスを更新しましょう.
各ラベルが表示されます
ここでは、それを動作させるためのCSSコードです.
メッセージのMarkdownエディタを使用する
まだ我々の新しい機能にすることができますいくつかの改善があります.
最初のは、簡単にMarkdownのコメントを編集して読者を許可するために、Markdownエディタを使用することです
そのためには、JavaScriptのマークダウンエディタを使用しますSimpleMDE . これは私たちのtextareaを対象として、それらを取り替えるでしょう、このライブラリが非常にエレガントな解決策である、そして、それは我々のユーザーのうちの1つがJavaScriptをブラウザの上で無効にしたならば、我々の解決がまだ働くということです.
まず、ライブラリとそのCSSへのリンクを
私もエディタのスタイルにいくつかの変更を追加しました.
リダイレクトのより良い管理
現在、私たちがコメントを送るとき、私たちは記事ページにリダイレクトされます.この動作はかなり混乱することがあります.通常、我々は我々のコメントが送られた通知を得ると思っています.さらに、我々のウェブサイトが我々が送ったコメントを表示するために再建される必要があるので、すべては何も起こらないように見えます!
この部分を改善しよう.
経験を改善するために、我々はすぐに読めるようになるコメントを表示する感謝のページに読者をリダイレクトします.
新しいページを作りましょう.
もちろん、私たちのコメントシステムを改善するためにまだ行うことができる多くがあります.しかし、それはすでに良いスタートです、そして、我々は完全にそれを我々自身で造ります!
この部分のコードを見つけることができますhere .
それは私たちのブログを設定開始以来、かなりの旅です!
最後の章では、どのように実装するかを見るfree privacy-friendly analytics .
チュートリアルをいくつかの部分に分けました.
Commenting System Part 1
しかし、まだコメントに対応できるようにすることから始めることができる多くの機能があります.
返信機能追加
メッセージへの返信を有効にするには、コメントが別のものへの返信であることを知る必要があります.
そうするために、我々は
parent_id
我々のメッセージのフィールド.許可するには、
allowedFields
プロパティstaticman.yml
ファイル.# staticman.yml
comments:
allowedFields: ["name", "message", "parent_id"]
...
我々はそれを追加しないrequiredFields
唯一の応答は、親メッセージがあります.それから、我々は我々のフィールドにこの分野を加える必要があります
comment-form.html
ファイル.<!-- _includes/comment-form.html -->
<form method="POST" action="{{ site.staticman_url }}" class="comment-form">
<!-- options inputs -->
...
<input
name="fields[parent_id]"
type="hidden"
value="{{ include.parent_id }}"
/>
<!-- user fields inputs -->
...
</form>
私たちはparent_id
フィールドに隠された入力フィールドのフィールドinclude
変数は、インクルードの入力を保持します.このコメントを、対応する親IDでコメントを追加します.
それぞれのコメントについては、その回答も表示されます.これを行うには、再帰的に含める
comment-list.html
とparent_id
入力として.<!-- _includes/comment-list.html -->
{% assign parent_id = include.parent_id | default: '' %}
{% assign comments = site.data.comments[page.slug] | where_exp: "item", "item.parent_id == parent_id" %}
{% assign sorted_comments = comments | sort: 'date' %}
{% for comment in sorted_comments %}
<div class="comment">
<h3>{{comment.name}}</h3>
<time
class="post-meta dt-published"
datetime="{{ page.date | date_to_xmlschema }}"
itemprop="datePublished"
>
{%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
{{ comment.date | date:"%H:%M - %b %-d, %Y, %Y" }}
</time>
<p>{{comment.message | strip_html | markdownify }}</p>
<div class="comment-reply">
<p>Reply to {{ comment.name }}:</p>
{% include comment-form.html parent_id=comment._id %}
{% include comment-list.html parent_id=comment._id %}
</div>
</div>
{% endfor %}
我々は今、各メッセージを返信する能力を持っており、その下にその回答を表示します.これがその結果です.追加しました
.comment-reply { padding: 15px; }
イン_sass/comments.scss
単純な入れ子効果を作成するにはそれはスタートです、しかし、我々は間違いなくこれらのすべての応答ボックスを表示したくありません.返信ボタンを押すだけで表示されます.
HTMLとCSSのみを使用してこの機能を実装します.
まず、コメントの返信ボックスを更新しましょう.
<!-- _includes/comment-list.html -->
...
<div class="comment-reply">
<input id="reply-{{ comment._id}}" type="checkbox" class="checkbox" />
<label class="open" for="reply-{{ comment._id }}">
Reply to {{ comment.name }}
</label>
<label class="close" for="reply-{{ comment._id }}">X</label>
{% include comment-form.html parent_id=comment._id %}
{% include comment-list.html parent_id=comment._id %}
</div>
...
応答ボックスの表示はチェックボックスによって保持されます.これは表示されませんが、代わりに2つのラベルをターゲットにします.reply to ...
返信ボックスを開くにはX
閉じる.各ラベルが表示されます
checked
チェックボックスのプロパティ.ここでは、それを動作させるためのCSSコードです.
// _sass/comments.scss
...
.comment-reply {
padding: 15px;
padding-top: 5px;
display: flex;
flex-direction: column;
.open {
font-style: italic;
}
.close {
display: none;
align-self: flex-end;
padding: 5px 10px;
border: 1px solid #ddd;
}
.open:hover,
.close:hover {
cursor: pointer;
}
.comment-form {
display: none;
}
.checkbox {
display: none;
&:checked ~ .open {
display: none;
}
&:checked ~ .close {
display: block;
}
&:checked ~ .comment-form {
display: flex;
}
}
}
我々は今、よりクリーンな返信機能を持っている!メッセージのMarkdownエディタを使用する
まだ我々の新しい機能にすることができますいくつかの改善があります.
最初のは、簡単にMarkdownのコメントを編集して読者を許可するために、Markdownエディタを使用することです
そのためには、JavaScriptのマークダウンエディタを使用しますSimpleMDE . これは私たちのtextareaを対象として、それらを取り替えるでしょう、このライブラリが非常にエレガントな解決策である、そして、それは我々のユーザーのうちの1つがJavaScriptをブラウザの上で無効にしたならば、我々の解決がまだ働くということです.
まず、ライブラリとそのCSSへのリンクを
head
ファイル.<!-- _includes/head.html -->
<head>
...
<!-- Simple Markdown Editor -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css"
/>
<script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
</head>
次に、コメントフォームHTMLを編集してSimpleMDE
インスタンスtextarea
.<!-- _includes/comment-form.html -->
<form method="POST" action="{{ site.staticman_url }}" class="comment-form">
...
<textarea
id="message-{{ include.parent_id }}"
class="comment-message"
name="fields[message]"
placeholder="Comment (markdown accepted)"
required
></textarea>
...
</form>
<script>
var simplemde = new SimpleMDE({
element: document.getElementById("message-{{ include.parent_id }}"),
forceSync: true,
spellChecker: false,
status: false,
placeholder: "Comment (markdown supported)",
});
</script>
また、私は親IDに基づいて、textareaにユニークなIDを加えました.私もエディタのスタイルにいくつかの変更を追加しました.
// _sass/comments.scss
...
.CodeMirror,
.editor-toolbar {
border-radius: 0;
}
.CodeMirror,
.CodeMirror-scroll {
min-height: 150px;
}
そしてここにいる!リダイレクトのより良い管理
現在、私たちがコメントを送るとき、私たちは記事ページにリダイレクトされます.この動作はかなり混乱することがあります.通常、我々は我々のコメントが送られた通知を得ると思っています.さらに、我々のウェブサイトが我々が送ったコメントを表示するために再建される必要があるので、すべては何も起こらないように見えます!
この部分を改善しよう.
経験を改善するために、我々はすぐに読めるようになるコメントを表示する感謝のページに読者をリダイレクトします.
新しいページを作りましょう.
comment-success.markdown
我々のルートディレクトリでは、それはほとんど同じですindex.markdown
.<!-- comment-success.markdown -->
---
layout: home
list_title: "Read Our Latest Posts"
title: ''
---
## Thank you!
Your comment was successfully sent!
It will appear on our website soon.
では、_includes/comment-form.html
.<!-- _includes/comment-form.html -->
<input
name="options[redirect]"
type="hidden"
value="{{ 'comment-success' | absolute_url }}"
>
そして、それ!もちろん、私たちのコメントシステムを改善するためにまだ行うことができる多くがあります.しかし、それはすでに良いスタートです、そして、我々は完全にそれを我々自身で造ります!
この部分のコードを見つけることができますhere .
それは私たちのブログを設定開始以来、かなりの旅です!
最後の章では、どのように実装するかを見るfree privacy-friendly analytics .
Reference
この問題について(を使用してジキルブログにコメントシステムを追加- 2/2), 我々は、より多くの情報をここで見つけました https://dev.to/simondosda/add-a-comment-system-to-a-jekyll-blog-using-staticman-2-2-l0hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol