PowerCMS ブログ

テキストエリアに対してリッチテキストエディタが選択可能なカスタムフィールドスニペットフィールド)を作成する方法をご紹介します。

この方法により、ユーザーが任意でテキストエリアの入力方法を選択できるようになります。

カスタムフィールドの設定値

システムオブジェクト: (任意)
名前: (任意)
説明: (任意)
種類: スニペット
オプション: EntryDataEXAMPLE_format,EntryDataEXAMPLE_text(任意)
必須: (任意)
既定値:

<MTIgnore>「オプション」で指定した値を変数に格納する</MTIgnore>
<$MTSetVar name="_name_snippet_format" value="EntryDataEXAMPLE_format"$>
<$MTSetVar name="_name_snippet_text"   value="EntryDataEXAMPLE_text"  $>

<MTIgnore>編集画面のHTML</MTIgnore>
<div style="margin-bottom:5px;text-align:right;">
フォーマット: <select name="<$MTGetVar name="_name_snippet_format"$>" id="<$MTGetVar name="_name_snippet_format"$>"> <option value="">なし</option> <option value="richtext"<MTIf name="$_name_snippet_format" eq="richtext"> selected="selected"</MTIf>>リッチテキスト</option> </select> </div> <div> <textarea name="<$MTGetVar name="_name_snippet_text"$>" id="<$MTGetVar name="_name_snippet_text"$>" class="text full high"><$MTGetVar name="$_name_snippet_text" escape="html"$></textarea> </div> <MTIgnore>エディタ処理</MTIgnore> <script> jQuery(function($){ var format_change = function(){ var $format = $('#<$MTGetVar name="_name_snippet_format"$>'); var $textarea = $('#<$MTGetVar name="_name_snippet_text"$>'); if($format.val() == 'richtext'){ if (MT && MT.EditorManager){ new MT.EditorManager($textarea.attr('id')); } }else{ tinyMCE.execCommand('mceRemoveControl', false, $textarea.attr('id')); } } $('#<$MTGetVar name="_name_snippet_format"$>').on('change',format_change); format_change(); }); </script>

ベースネーム: EntryDataEXAMPLE(任意)
テンプレートタグ: EntryDataEXAMPLE(任意)

テンプレートで保存された値を取り出す方法

<$EntryDataEXAMPLE key="EntryDataEXAMPLE_text"$>

画面イメージ(管理画面)

セレクトボックスでリッチテキストエディタを切り替える事が可能

カテゴリー
設定・管理画面カスタマイズ
投稿者
Fujimoto

通常、PowerCMS (Movable Type) のデータを確認するには、管理画面へログインするなど操作を行ったり、データベースを直接参照する必要があります。

その他では開発を行うことでデータを確認できますが、じつは Movable Type に専用のスクリプトが同梱されており、そちらを少し紹介します。

list-objects スクリプト

スクリプトの名前は list-objects です。これは tools ディレクトリの中にあります。

$MT_HOME/tools/list-objects

※ $MT_HOME は PowerCMS (Movable Type) のインストール先を指します。

オブジェクトを一覧出力できる

list-objects は Movable Type のオブジェクトを一覧出力できます。オブジェクトとはウェブサイトやカテゴリ、記事やウェブページなどのデータの種類と思って頂いて問題ありません。

出力は list-objects を実行したコンソールへ標準出力されます。

使い方と出力例

実行は run-periodic-tasks などと同様に Movable Type のアプリケーションディレクトリから行い、いくつかのパラメータを指定します。

type
出力したいオブジェクトの種類を指定します。このパラメータは必須です。 (記事=entry、ウェブページ=page、ログ=logなど)
id
オブジェクトの id を指定します。指定するとその ID をもつ一件だけが出力されます。未指定の場合は全件が対象になります
cols
出力したい情報を指定します (id=ID、name=名前、など) 指定できるものはオブジェクトによって異なります

実行すると、最初にカラム名の行、続いてデータが出力されます。下記の場合は id を指定しているので、ID=1 の一件だけが出力されています。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --id=1
id:accessibility:allow_comments:allow_pings:approver_ids:atom_id:attachfiles:author_id:authored_on:basename:blog_id:category_id:class:comment_count:convert_breaks:created_by:created_on:creator_id:excerpt:ext_datas:external_preview_expired_on:external_preview_id:external_preview_is_active:is_edited_by:is_edited_now:is_edited_on:keywords:modified_by:modified_on:owner_id:parent_entry_id:pcms_unpublished_on:ping_count:pinged_urls:prefs:revision_comment:status:tangent_cache:template_id:template_module_id:text:text_more:title:to_ping_urls:unpublished:unpublished_on:week_number:current_revision
1:1::::::1:20160609141635:about_page:1::page:0::1:20160609141635::::::::::::20160609141635:::20160609131635:0::::1::::

このページはアバウトページ (自己紹介や会社概要など、プロフィール用のページ) として利用するウェブページの例です。

作成したウェブページに @ABOUT_PAGE というタグを設定すると、ページのヘッダ、フッタにあるナビゲーションにリンクが追加されます。

::アバウトページ::::201623:0

cols を指定すると指定したカラム名の情報だけが出力されます。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --id=1 --cols=id,title
id:title
1:アバウトページ

cols に指定できるカラム名がわからない場合は、cols を指定せずに一度実行して出力を見ることで何が指定できるかわかります。

list-objects のメリット

管理画面へのログインが必要ない

list-objects はスクリプトなので管理画面へログインの必要がありません。 プラグイン開発などデバッグ途中であればデータをすぐに確認でき、また何らかの理由で管理画面へのログイン情報がわからない場合にも有効です。

管理画面に表示されないデータが見られる

list-objects はデータとして存在するが、管理画面に表示されないデータも出力されます。 内部的にあるフラグやデータなどの確認を行う場合に SQL を発行しなくてもデータが確認できます。

プラグインのデータに対応している

list-objects では Movable Type 標準のデータだけではなく、プラグイン独自のデータも出力できます。例えば type=mailmagazine と指定することで MailMagazine プラグインのデータが出力できます。

出力が整形しやすい

list-objects は区切り文字が決まっているなどデータが整形されています。 定期的にデータを確認したい場合、テンプレートを使わずに一覧をまとめることができます。

list-object のデメリット

カスタムフィールドなどメタデータは出力されない

カスタムフィールドなど mt_foo_meta テーブルに保存されるデータは出力されません。

ブログなどの絞り込みが行えない

絞り込みが行えるのは id のみです。blog_id など他の情報では絞り込みが行えません。

ただし、出力結果を整形したり、grep を併用することでフィルタすることはできます。

例: id=1 のデータを grep でフィルタする


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --cols=blog_id,id,title | grep ":1:"
blog_id:id:title
2:1:アバウトページ

全件が出力される

id を指定しなかった場合は全件が出力されます。そのため件数が多いオブジェクトではかなり時間がかかる場合があります。

出力のフォーマットを自由にできない

出力されるフォーマットは区切り文字が : と固定されており、またデータに改行が含まれる場合は標準出力にも改行が含まれます。 とくに区切り文字が : のため URL などデータに : が含まれると区切り文字なのか区別がつきません。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --cols=blog_id,,id,,title --id=1
blog_id::id::title
2::1::アバウトページ

使用例 : 定期的にログをファイル出力する

コマンドの工夫では list-objects の結果をファイル出力することができます。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=log > /path/to/file/log.txt

さらに cron などへ設定することで結果のファイルを定期的に更新することができます。 出力先を工夫すればコンソールが使えない状況でも結果を定期的に確認することができると思います。


cd $MT_HOME && perl ./tools/list-objects --type=log > /path/to/file/log.txt

list-objects の新しい使い方など、他の利用ケースがありましたらお知らせ下さい。

カテゴリー
技術情報

PowerCMS を利用しているユーザーに対して定期的なパスワード変更を実施したい場合は、PasswordExpired プラグインで設定することが可能です。

設定方法

プラグインのインストール

PowerCMS のパッケージを解凍して、options/plugins の中にある PasswordExpired フォルダをサーバーの /path/to/mt/plugins ディレクトリ内にフォルダごとアップロードしてください。
※ /path/to/mt は PowerCMS の設置ディレクトリに読み替えてください。

mt-config.cgiの設定

mt-config.cgi に設定をします。下記のサンプルは「パスワードが30日間変更されていない場合は、ユーザー情報の編集画面のみアクセスさせる」設定になります。

PasswordExpired 1
PasswordExpiredPeriod 30

ドキュメントは下記になります。

設定項目初期値解説
PasswordExpired 0 1を指定すると、パスワードの有効期限が切れたユーザはユーザ情報の編集画面以外には進めなくなります。1を指定されていない場合はメッセージの表示のみとなります。
PasswordExpiredPeriod 30 パスワードの有効期限を日数で設定します。

PSGI 環境では追加・設置したプラグインを認識させるために、PSGI プロセスの再起動が必要になります。システム管理者権限を付与されているユーザーなら、「システム」の「全般」メニューから「設定」にアクセスし、画面下部の「設定を保存」ボタンをクリックすることで PSGI プロセスの再起動が可能です。

動作確認

PowerCMS にサインインします。パスワードの有効期限が切れている場合は画面上部に警告メッセージが表示されます。

PasswordExpiredアラート

PasswordExpired が「1」の場合は、サインインすると自動的にユーザー情報の編集画面に遷移して、その画面以外は一切アクセスできなくなります。パスワードを変更するとウェブサイト/ブログの操作が可能になります。

PasswordExpired が「0」の場合は、ウェブサイト/ブログの操作は可能ですが、パスワードを変更するまで画面上部に「ログインパスワードが最後に変更されたのは ◯◯◯◯年◯◯月◯◯日 です。定期的にパスワードを変更してください。」と警告メッセージが表示され続けます。

PasswordExpired が「0」「1」どちらの場合もパスワードを変更することで、警告メッセージは非表示になります。

PasswordExpired プラグインの説明は以上です。サインインのセキュリティ対策は、Movable Type の「アカウントロックの機能」を利用することで、よりセキュアな管理ができます。下記のページも合わせてご確認ください。

不正サインインに対するアカウントのロック : Movable Type 6 ドキュメント

カテゴリー
プラグイン
投稿者
さとうせい

ページの先頭へ