Statische Kommentare in Octopress
Geschrieben von Eric Scheibler am 06.01.2013
Hier möchte ich meine Lösung für statische Kommentare in Octopress beschreiben. Die Idee kommt von Matt Palmer. Ich habe seinen Ansatz genommen und ihn an meine Wünsche angepasst.
Download des Archives: static_comments.zip.
im Ordner source/_includes/custom/ befindet sich die Datei “comment_template.html”. Diese stellt ein einfaches HTML Formular zur Verfügung, in das der Kommentar eingegeben werden kann. Wenn schon Kommentare vorhanden sind, stellt es diese ferner in einer Liste dar.
Das Template muss in die bereits durch das Standardtheme existierende Datei “source/_layouts/post.html” integriert werden und zwar mit dieser Zeile (ohne die “"):
{% include custom/comment_template.html %}
Ich habe sie in Zeile 18 unterhalb der Page sharing Links eingefügt.
Wird nun ein Kommentar erstellt, so wird er von dem PHP Skript unter source/comment-sites/ verarbeitet und an die angegebene E-Mail Adresse geschickt. Das Shell Skript add_blog_comment.sh parst die angekommene E-Mail und erstellt den Kommentar als Textdatei im Ordner source/_comments:
#!/bin/bash
blog_dir="$HOME/Dokumente/octopress"
comments_dir="$blog_dir/source/_comments"
comment=""
copy="no"
if [ -z "$1" ]; then
tmp_file="/tmp/comment"
else
tmp_file="$1"
fi
if [ ! -d "$blog_dir" ]; then
echo "The blog directory does not exist"
exit 1
fi
if [ ! -d "$comments_dir" ]; then
echo "The comments directory does not exist"
exit 2
fi
if [ ! -f "$tmp_file" ]; then
echo "No temporary comment file to add"
exit 8
fi
# parse the temp comment file
no_comment="false"
while read line
do
if [[ $line == post_id* ]]; then
copy="yes"
title=$(echo "$line" | cut -d '/' -f6)
fi
if [[ $line == date:* && $copy == "yes" ]]; then
date=$(echo "$line" | cut -d ' ' -f2)
time=$(echo "$line" | cut -d ' ' -f3 | sed "s/:/-/g")
fi
if [[ $line == name:* && $copy == "yes" ]]; then
author=$(echo "$line" | cut -d ' ' -f2 | sed "s/'//g")
fi
if [[ $line == "comment: ''" && $copy == "yes" ]]; then
no_comment="true"
fi
if [[ $copy == "yes" ]]; then
if [ -z "$comment" ]; then
comment="$line"
else
comment="$comment\n$line"
fi
fi
done < "$tmp_file"
file_name=$(echo "$date $time $author" | sed "s/ /-/g")
if [[ "$title" == "" || "$author" == "" || "$date" == "" || "$time" == "" || "$no_comment" == "true" ]]; then
echo "Comment file is malformed"
exit 9
fi
# create comment file in the comments directory
if [ ! -d "$comments_dir/$title" ]; then
mkdir "$comments_dir/$title"
if [[ $? > 0 ]]; then
echo "Could not create the folder for the $title posting in the comments folder"
exit 3
fi
fi
if [ -f "$comments_dir/$title/$file_name" ]; then
echo "The comment already exists"
rm "$tmp_file"
exit 7
else
echo -e "$comment" > "$comments_dir/$title/$file_name"
rm "$tmp_file"
echo "Comment created successfully"
fi
# generate and deploy blog
cd "$blog_dir"
rake generate
chmod -R 755 "$blog_dir/public"
while :
do
echo "Deploy? (j/n) "
read answer
case $answer in
j*|J*|y*|Y*) break;;
n*|N*|q*|Q*) exit 0;;
*) continue;;
esac
done
rake deploy
exit 0
Für das abrufen der Mails nutze ich Mutt und dort habe ich als Pager Vim angegeben. Um nun einen Kommentar bewilligen zu Können, öffne ich die Mail im Vim und starte das Shell Skript. Dazu muss die folgende Zeile in die ~/.vimrc:
" call the add blog comment shell script
nmap <silent> <leader>abc :! /path/to/add_blog_comment %<cr>
Der Leader key ist standardmäßig “", ich habe ihn aber auf das Komma umdefiniert:
" change leader key to ,
let mapleader=","
Somit kann ich einen Kommentar mittels ,abc
bewilligen.