Welcome !! Now 2008.09.08 22:40 (JST)

Jot - 1.1.2

[ スニペット ]

Jotは、ユーザーからのフィードバックを受けるとことができるよう、コメント入力のためのフィールドを挿入します。また投稿されたコメントを一覧表示する機能もあります。

投稿は、WEBユーザに限ることも、ゲストユーザの投稿を受け付けることもでき、コメントの公開を保留する機能もあります。

細かな入力チェックやcaptchaによる入力チェックも可能です

参照ページ:jot wikijot

テスト環境

  • サーバ:さくらインターネット  
    • PHP 4.4.4
    • MYSQL 4.0.27
  • MODX:0.9.5
  • Jot - 1.1.2

このページの解説について

※wikiの内容を参考にして書いていますが、wikiの記述は、v1.0用のようです。パラメータなどが増えているかも知れません※

このページの更新履歴

基本的な書式

ページ分割する場合

ドキュメントのキャッシュを無効にするか以下の書式を利用する

[!Jot? &pagination=`5`!]

ページ分割しない場合

[[Jot]]

パラメータ

action

表示するブロックを指定する。デフォルト「入力フォーム&コメント一覧」。他に以下が指定可能

  • count-comments…コメント数
  • count-subscriptions…メール通知を受けている数?※Fatal errorが出て機能せず※
  • comments…コメント一覧
  • form…入力フォーム

docid

Jotでリンクさせたいドキュメントid。デフォルト「カレントドキュメント」。

スニペットコールサンプル:

[[Jot?]] ←docid「81」
[[Jot? docid=`81`]] ←docid「80」

docid「81」と「80」でJotの出力を共有できる

tagid

同じドキュメント内で二つ以上のJotを使うときに決めるユニークID。「A-Za-z0-9」が指定可能

同じIDはデータを共有する

subscribe

サプスクリプション機能を利用するか否か。デフォルト「しない(0)」

※サプスクリプション機能とは、コメントごとにエンドユーザに対し新規投稿があった場合に通知する機能です。エンドユーザが「購読する」「購読しない」を選択できます。

moderated

コメントの公開に管理者・モデレータの承認を必要とするか否か。デフォルト「しない(0)」。

notify

コメントがあった場合、「canmoderate」で指定したModeratorに通知するか否か。

  • 「0」…しない
  • 「1」…非公開コメントのみ通知(デフォルト)
  • 「2」…すべて通知

subjectSubscribe

サブスクリプション通知の件名をテキストで指定。

subjectModerate

モデレータへの通知の際の件名を指定。

captcha

CAPTCHAを利用した入力チェックをするか否か。

  • 「0」…利用しない(デフォルト)
  • 「1」…利用する
  • 「2」…利用する(ただしログインユーザは除く)

badwords

禁止語をコンマで区切って指定。理想的な指定の方法は、以下のようにチャンクを利用する

[[jot? &badwords=`{{MyBadwordsChunk}}`]]

「MyBadwordsChunk」に禁止語をコンマで区切って書く

また「bw」で禁止語を発見したときの動作を指定できる

※マネージャユーザでログイン中は、禁止語も投稿できる

bw

「badwords」で指定した禁止語を発見したときの動作を指定する。

「0」…なにもしない

「1」…受け付けるが公開しない

「2」…拒否する

customfields

フォームで使用したいフィールドネームをカンマで区切って指定します。デフォルト「name」「email」。これらは、_jot_fields に保存されます。

※title、content は、_jot_content に保存されます※

authorid

オーサidを指定します。いまいちよくわかりません。デフォルト「カレントドキュメントのオーサid」。

title

コメントのタイトルを指定。デフォルトは、フィールドの「subject」が空の場合は、ドキュメントの「longtitle」が利用される。「longtitle」も空の場合は、単に「Re:」と挿入される。

※&title=`タイトルを指定`しても「0」と表示されるだけで上手く機能せず※

css

jot で利用する CSS を<head>~</head>に挿入するかどうかを指定します。デフォルト「します(1)」。

cssFile

CSS ファイルのパスを MODx のルートからの相対パスで指定します。デフォルト「assets/snippets/jot/templates/jot.css」

スニペットコールサンプル
[!Jot? &cssFile=`assets/templates/common/jot.css`!]

sortby

コメント一覧の並べ替えの基準になるフィールドを指定します。デフォルト「作成日降順(createdon:d)」

書式
  • fieldname:a(昇順)
  • Fieldname:d(降順)

numdir

コメントの通し番号を最初のコメントから「1、2…」とするか、最後のコメントから「1、2…」とするかを指定します。デフォルト「最初のコメントから番号を振ります(1)」

validate

書式
フィールド名:エラーメッセージ(:validation)

入力チェックを行いたい、フィールド名(フォームで利用しているフィールド名)とチェックルールを指定します。フィールド名及び、チェックルールは、カンマで区切って複数指定可能です。デフォルトは、「content」が必須になっています。

入力チェックを行うフィールドはすべて必須項目となります。

以下の入力チェックルールーがあります。

  • number
  • email
  • 正規表現によるカスタムルール

書式サンプル

単に必須項目とする
  • フィールド名:エラーメッセージ
有効なメールアドレスかどうかをチェックする
メールフィールド名:エラーメッセージ:email
数字かどうかのチェックをする
番号フィールド名:エラーメッセージ:number
郵便番号の書式にかなっているかどうかをチェックする
郵便番号フィールド:エラーメッセージ:#^[2-9]\d{2}-\d{4}$#

guestname

名無しさんの表示の仕方を指定します。デフォルト「anonymous」

postdelay

同一ユーザからのポストの制限時間を秒で指定します。デフォルト「15秒」。「0」を指定すると同一ユーザからのポストはできなくなります。

pagination

ページ送りナビゲーションを挿入するかどうかを指定します。デフォルト「しない(0)」。1ページに何件コメントを表示するかを数字で指定します。「0」以外の値を指定すると、ナビゲーションが自動的に挿入されます。

placeholders

プレイスホルダを利用して、各フォームブロックを出力するかどうかを指定します。デフォルト「しない(0)」。

後述の「output=`0`」と組み合わせて、ブロックを個別に出力させたり、出力順序を変更したりもできます。

「placeholders=`1`」を指定したページ内に、以下のように記述します

書式

一般的
[+jot.html.form+]
tagid を持つ場合
[+jot.html.form.tagid+]

利用できるプレイスホルダ

  • [+jot.html.form+]…コメントフォームセクション
  • [+jot.html.subscribe+]…サブスクリブションセクション
  • [+jot.html.moderate+]…モデレーションセクション
  • [+jot.html.navigation+]…ページナビゲーションセクション
  • [+jot.html.comments+]…コメントリストセクション

output

スニペットによるコメントフォーム(その他)を出力するかどうかを指定します。デフォルト「する(1)」。

debug

jot の隠し変数の出力をするかどうかを指定します。デフォルト「しない(0)」。

trusted

信頼する Web ユーザグループをカンマで区切って指定します。「moderated=`1`」のとき、ここで指定したグループに所属するユーザによるコメントは、承認なしで公開されます。

また、このグループは禁止語も投稿できます。

canpost

ポストできる Web グループをカンマで区切って指定します(ポストできるユーザを限定します)。これを指定しなければ、誰でもポストできる状態です。ここで指定したグループ以外がページにアクセスしてもコメントフォームは表示されません(コメント一覧・ナビゲーションは表示されます)。

Web ユーザ、Web グループの作り方は「Web ユーザを作成する」を参照してください。

canview

コメント一覧を閲覧できる Web グループをカンマで区切って指定指定します。指定しない場合は、すべての人が閲覧できます。

※「canpost」で指定していても、「canview」で指定されていなければ、コメントフォームのみが表示され(ポストもできる)、コメント一覧は閲覧できない(つまり「canpost」は「canview」を兼ねるわけではない)。

canedit

自分でポストしたコメントを編集できる Web ユーザをカンマで区切って指定します。これを指定しない場合、どんな Web ユーザもコメントを編集することはできません。

canmoderate

すべてのコメントに対して管理権限を持つ Web ユーザをカンマで区切って指定します。マネージャユーザと同等の権限です。編集、公開・非公開、削除ができます(「canedit」を指定していなくても、これを指定すれば、編集できます)。

また、モデレーションブロックも表示されます。

テンプレート用パラメータ

メッセージなどを日本語にしたい場合も、テンプレートを変更します。デフォルトは「templates」以下にある、html ファイルです。jot の動作に必要なプレイスホルダが記述されていますので、これらを元にしてカスタマイズすると良いでしょう。

tplForm

コメントフォーム用のテンプレートをチャンク名で指定します。デフォルト「chunk.form.inc.html」。

tplComments

コメントリスト用のテンプレートをチャンク名で指定します。デフォルト「chunk.comment.inc.html」。

tplModerate

モデレーションセクション用のテンプレートをチャンク名で指定します。デフォルト「chunk.moderate.inc.html」。

tplNav

ナビゲーションセクション用のテンプレートをチャンク名で指定します。デフォルト「chunk.navigation.inc.html」。このセクションは、デフォルトでコメントリストの前と後に挿入されます。

tplSubscribe

サプスクリプションセクション用のテンプレートをチャンク名で指定します。デフォルト「chunk.subscribe.inc.html」。

tplNotify

サプスクリプション通知メールのテンプレートをチャンク名で指定します。デフォルト「chunk.notify.inc.txt」(これはユーザに送信されるメールです)。

tplNotifyModerator

モデレータへの通知メールのテンプレートをチャンク名で指定します。デフォルト「chunk.notify.moderator.inc.txt」。

Jot によるサンプル

注意点

ドキュメントでJotをコールしている場合、ドキュメントをを削除してもコメントはデータベースに残るので、phpMyAdmin などを使ってメンテナンスをする必要があるでしょう。jot のコンテンツは、「_jot_content」に保存されています。

wiki では、Jotコールは、チャンクに登録し、それをドキュメントではなく、テンプレートで呼び出すよう推奨しています。

また、jot の管理機能を使って、コメントを削除しても、カスタムフィールド(「_jot_fields」に保存されている)は、削除されないので、これも phpMyAdmin などでメンテナンスする必要があるでしょう。ていうか、これって問題なんじゃ…?

問題点

出力される tabindex の値が規定の範囲を超えている。

「jot.class.inc.php」で生成している乱数をタブインデックスに利用しているのが原因らしいので、以下のいずれかで、対処可能

  • $this->config["seed"] = rand();
    $this->config["seed"] = rand(1000,10000);
    
  • form 用のテンプレート中のtablindexを普通に書く。これの方が簡単のような。。でもなんで乱数でタブインデックスを書き出しているんだろう?

IE が編集画面からキャンセルでもどって来られない(JSの問題…?)

  1. コメントリストで「edit」をクリック
  2. ダイアログで「OK」
  3. 編集画面表示
  4. 「cancel」をクリック
  5. ページの有効切れ表示
  6. 「リロード」すると、元の画面に戻る

PHxプラグインを導入しているとドキュメントのキャッシュが「可」のとき、プレイスホルダによる出力ができない

関連トピ:PHxをインストールしている場合のJotの挙動について

テンプレートごとにPHxプラグインの有効/無効を切り替えることで対処可能。参照ページ:PHx 2.1.2 - ドキュメント(またテンプレート)ごとにPHxプラグインの有効/無効を切り替える

カスタマイズ

現行バージョン(1.1.2)の仕様では、サイト内のすべてのコメントをまとめて拾ってくることができません。そのため、「最近のコメントを5件表示する」などという利用方法ができません。このカスタマイズは、それを可能にします。

参照トピ:Displaying comments from several documents

jot.class.inc.php と jot.db.class.inc.php の修正

jot.class.inc.php
$this->config["docid"] = !is_null($this->Get("docid")) ? intval($this->Get("docid")):$modx->documentIdentifier;
if (!is_null($this->Get("docid")) && ($this->Get("docid") == '*'))
  $this->config["docid"] = '*';
else
  $this->config["docid"] = !is_null($this->Get("docid")) ? intval($this->Get("docid")):$modx->documentIdentifier;
jot.db.class.inc.php(2箇所)
  • $sql = 'SELECT count(id) FROM '.$this->tbl["content"].' WHERE uparent = '.$docid.' AND tagid = "' . $tagid .'"'.$where;
    if ($docid == '*')
      $sql = 'SELECT count(id) FROM '.$this->tbl["content"].' WHERE tagid = "' . $tagid .'"'.$where;
    else
      $sql = 'SELECT count(id) FROM '.$this->tbl["content"].' WHERE uparent = '.$docid.' AND tagid = "' . $tagid .'"'.$where;
  • $sql = "select a.* from " . $tbl . " as a " . $tblcustom . " where uparent = '" . $docid . "' and tagid = '" . $tagid ."' and mode = '0' " . $where . $orderby . $limit;
    if ($docid == '*')
      $sql = "select a.* from " . $tbl . " as a " . $tblcustom . " where tagid = '" . $tagid ."' and mode = '0' " . $where . $orderby . $limit;
    else
      $sql = "select a.* from " . $tbl . " as a " . $tblcustom . " where uparent = '$docid' and tagid = '" . $tagid ."' and mode = '0' " . $where . $orderby . $limit;

Jotコールとテンプレート

Jot コールサンプル(チャンクに書く)
[!Jot? &placeholders=`1` &output=`0` &tplComments=`recent_comment` &sortby=`createdon:d` &pagination=`0` &css=`0` &docid=`*`!]
<div class="sidebox kommentar">
<h3>コメント一覧</h3>
  <ul class="latest">
    [+jot.html.comments+]
  </ul>
</div>
tplComments = recent_comment サンプル
<li><a href="[~[+comment.uparent+]~]#jc[+comment.id+]"><strong>[+comment.title:limit:esc+]</strong>: [+comment.content:wordwrap:esc:nl2br:limit=`100`+] ...von <strong>[+comment.createdby:isnt=`0`:then=``+][+comment.createdby:userinfo=`username`:ifempty=`[+comment.custom.name:ifempty=`[+jot.guestname+]`:esc+]`+][+comment.createdby:isnt=`0`:then=``+]</strong></a></li>

tagid で拾いたいコメントを限定する

Jot コールで「tagid」を指定すると、拾いたいコメントを限定することができます。その際、プレイスホルダ側にも、Jot コールで指定した「tagid」を指定する必要があります。

Jot コールサンプル(チャンクに書く)
[!Jot? &tagid=`blogcomment`&placeholders=`1` &output=`0` &tplComments=`recent_comment` &sortby=`createdon:d` &pagination=`0` &css=`0` &docid=`*`!]
<div class="sidebox kommentar">
<h3>コメント一覧</h3>
  <ul class="latest">
    [+jot.html.comments.blogcomment+]
  </ul>
</div>

△ページトップ