E: ちょっとリッチなテキストユニットを作ってみよう

Ver. 2.8 からテキストユニットにLiteEditorという弊社が独自に開発したJavaScriptライブラリが使用されるようになりました。

テキストユニット(LiteEditor)拡張方法基礎知識

テキストユニット(LiteEditor)のボタンは一からボタンを作っていくことや既にあるボタンに対して新しくボタンを追加することもできます。

デフォルトのボタンを残して新しいボタンを追加する

既存の、「リンク」「強調」「重要」などのボタンに加えて新しいボタンを追加する場合は、下のようなソースコードになります。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions.push({
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u'
  });
});

複数追加したい場合は、下記のように pushメソッド をその分実行してください。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions.push({
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u',
    group: 'mark'
  });
  ACMS.Config.LiteEditorConf.btnOptions.push({
    label: '<span class="lite-editor-font-italic"></span>',
    tag: 'i',
    group: 'mark'
  });
});

デフォルトで用意されているボタンを消して、一からボタンを作る

ボタンを一から作りたい人は、ACMS.Config.LiteEditorConf.btnOptions に新しく配列を代入することで可能になります。この際に、ACMS.Configの設定はACMS.Readyメソッドで括ることに注意してください。ACMS.ReadyがACMS.Configのデフォルトの設定を上書きする最適なタイミングになります。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [];
});

配列には以下のようにオブジェクトを入れることができます。例えば下のソースコードでは、アンダーラインを挿入するためのボタンを追加しています。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u'
  }];
});

2つ以上ボタンを追加する場合はカンマ区切りでオブジェクトを渡してあげます。次の例ではアンダーライン挿入ボタンに加えて、斜体挿入ボタンを追加しています。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u'
  },
  {
    label: '<span class="lite-editor-font-italic"></span>',
    tag: 'i'
  }];
});

課題


完成図

完成図


上の画像のような以下5つの条件を満たすテキストユニットを作りましょう

  1. それぞれのボタンが用途に合わせてグルーピングされてある。
  2. メディア挿入ボタンがある。
  3. 進むボタン、戻るボタンがある。
  4. アイコンにはLiteEditorにデフォルトで用意されているアイコンフォントを使用。

1. それぞれのボタンが用途に合わせてグルーピングされてある

この際にgroupというプロパティを使用して例えば以下のようにボタンをグルーピングします。ボタン同士が同じグループに属するのであればgroupに同じ値を代入します。下の場合はmarkというボタングループにしています。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u',
    group: 'mark'
  },
  {
    label: '<span class="lite-editor-font-italic"></span>',
    tag: 'i',
    className: '',
    group: 'mark'
  }];
});

他にもボタンにはオプションとして以下のようなプロパティを設定可能です。


label ボタンのラベル内容です。テキストでもHTMLでも可
tag このボタンが押された時に挿入されるタグ
className このボタンが押された時にタグに追加されるクラスネーム
sampleText テキストが選択されていない時に挿入されるサンプルテキスト
action redo, undo, extraから選択可能。extraの場合は、ボタンクリック時にonClickが動作します。
group ボタンのグループ分けに使用します。同じ名前にすることでボタン同士を同じグループにできます。
selfClassName ボタン自体にクラスを付与したい時に指定します。
onClick ボタンを押された時に動作するコールバック
onInit テキストユニットがDOMに出現した際に動作するコールバック
onRender テキストユニットが再描画された時に動作するコールバック

2. メディア挿入ボタンがある

下記のように、js-media_insertというクラスが振られたボタンを追加することでメディアユニットを活用するボタンを追加可能です。js-media_insert自体は組み込みJSですのでテキストユニット(LiteEditor)とは関係ありません。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class=" acms-admin-icon acms-admin-icon-unit-image acms-admin-padding-none"></span>',
    selfClassName: 'js-media_insert',
    action: 'extra',
    group: 'extra',
    onClick: function(self) {
        self.saveSelection();
    }
  }];
});

3. 進むボタン、戻るボタンがある

以下のようにactionプロパティにundo/redoを代入することでそのボタンにundo/redoの機能を持たせることができます。

ACMS.Ready(function(){
    ACMS.Config.LiteEditorConf.btnOptions = [
        {
            label: '<span class="lite-editor-font-back"></span>',
            action: 'undo',
            group: 'action'
        },
        {
            label: '<span class="lite-editor-font-go"></span>',
            action: 'redo',
            group: 'action'
        }
    ]
});

4. アイコンにはLiteEditorにデフォルトで用意されているアイコンフォントを使用

またLiteEditorにはいくつかのアイコンフォントが用意されていますのでこれを活用してボタンのラベルを調整しましょう。


アイコン クラス名
lite-editor-font-back
lite-editor-font-go
lite-editor-font-bold
lite-editor-font-italic
lite-editor-font-underline
lite-editor-font-link

最終的なソースコード

最終的には以下のようなソースコードになります。この際に、下のJavaScriptはacms.jsを読み込んだ後に記述することに気をつけましょう。

ACMS.Ready(function(){
    ACMS.Config.mediaLibrary = 'off';
    ACMS.Config.LiteEditorConf.btnOptions = [
        {
            label: '<span class="lite-editor-font-back"></span>',
            action: 'undo',
            group: 'action'
        },
        {
            label: '<span class="lite-editor-font-go"></span>',
            action: 'redo',
            group: 'action'
        },
        {
            label: '<span class="lite-editor-font-link"></span>',
            tag: 'a',
            className: '',
            group: 'mark'
        },
        {
            label: '<span class="lite-editor-font-bold"></span>',
            tag: 'strong',
            className: '',
            group: 'mark'
        },
        {
            label: '<span class="lite-editor-font-italic"></span>',
            tag: 'i',
            className: '',
            group: 'mark',
        },
        {
            label: '<span class="lite-editor-font-underline"></span>',
            tag: 'u',
            className: '',
            group: 'mark',
        },
        {
            label: '<span class="acms-admin-icon acms-admin-icon-unit-image acms-admin-padding-none"></span>',
            selfClassName: 'js-media_insert',
            action: 'extra',
            group: 'extra',
            onClick: function(self) {
                self.saveSelection();
            }
        }
    ];
});

ハンズオンは以上で終わりですが、アイデア次第ではもっと便利なボタンが作れると思います。余力のある方はぜひチャレンジしてみてはいかがでしょうか?

動的フォームの基本

動的フォームはエントリーページに設置することができます。動的フォームはHTMLの知識のない人でもフォームを設置できる仕組みになっています。例えば採用ページのエントリーを書いて、更新者がそのページに採用フォームをつけることができます。

フォームでは以下のような種類のフォームパーツが用意されています。

  • テキスト
  • テキストエリア
  • ラジオ
  • セレクト
  • チェックボックス

動的フォームの導入方法

動的フォームはコンフィグ管理の機能設定から機能を有効にすることができます。動的フォーム項目の動的フォームを利用可能にするにチェックをしてください。


動的フォームの有効化

動的フォームの有効化


エントリーの詳細ページを見てみるとエントリー管理ボタンのところに[フォーム]というボタンが追加されています。このボタンを押してエントリーに動的フォームを作っていきます。


動的フォームの編集ボタン

動的フォームの編集ボタン


動的フォーム作成画面ではエントリーのユニットと同じようにフォームのパーツが追加できます。ここにはフォームIDを紐づけるフォームセットという項目があります。こちらにフォームIDを設定していきます。次は動的フォーム用のフォームIDの作り作り方について解説します。


動的フォーム編集画面

動的フォーム編集画面


フォームIDを作成

フォームIDは通常のフォームと同じようにフォーム管理の[フォームIDを作成]ボタンから作っていきます。 フォームID、フォーム名、一般のメールテンプレート、管理者のメールテンプレート、管理者のメールアドレスを設定していきます。

メールテンプレートのパスについて

動的フォームのメールテンプレートはsystemのテーマフォルダに用意されています。通常のフォームのメールテンプレートは自分で自由にレイアウトができますが、動的フォームでは自由にレイアウトなどカスタマイズができません。動的フォームのメールテンプレートのパスは以下のようになります。

SubjectTpl/include/form/subject.txt
BodyTpl/include/form/body.txt
AdminSubjectTpl/include/form/adminsubject.txt
AdminBodyTpl/include/form/adminbody.txt

上記は /themes/system/include/ 以下に存在する各ファイルとなりますが、実際に使用する場合には本文など適宜カスタマイズが必要になるため、使用するテーマディレクトリへのコピーをしてカスタマイズ・利用をすることをお勧めします。
一例として、 /themes/使用テーマディレクトリ/recruit/form/ 以下に各ファイルをコピーしカスタマイズしたものを使用する場合の設定画面は以下のようになります。他の内容に動的フォームを使いたい場合には、 /themes/使用テーマディレクトリ/aaaaa/form/ のようにもう1セットコピーして利用すれば、各フォームに合わせたメールテンプレートが使用できます。


フォームID作成画面

フォームID作成画面


動的フォーム画面からフォームIDをセット

動的フォームを設置したいエントリーに戻り、[フォーム]ボタンを押して動的フォーム作成画面で先ほど作成したフォームIDを設定してください。動的フォームで送信されたデータはこのフォームIDに蓄積されていきます。

動的フォームの項目を追加

フォームのパーツはテキスト、テキストエリア、ラジオ、セレクト、チェックボックスを追加することができます。フォームのパーツはエントリーのユニットと同じように項目を追加していってください。


動的フォーム編集ボタン

動的フォーム編集ボタン


[フォーム]ボタンを押すとフォームの編集画面に移動します。ここからテキスト、テキストエリア、ラジオ、セレクト、チェックボックスなどフォームの項目を追加することができます。


動的フォーム編集画面

動的フォーム編集画面


ラベルフォームの項目名{label}
説明このフォームユニットの説明{caption}

バリデータとコンバーターを使う

[入力チェック]のリンクをクリックすることでフォームの項目を必須にしたり、文字数制限をしたり、文字を変換したり設定することができます。フォームのバリデータとコンバーターの設定について一部ご紹介していきます。

必須にする

項目はrequiredを選択します。メッセージにエラーメッセージを入力してください。


必須入力

必須入力


数値になっているかチェック

項目はdigitsを選択します。メッセージにエラーメッセージを入力してください。


数値かチェック

数値かチェック


入力文字数を制限する

項目はminLengthか、maxLengthを選択します。値には制限したい文字数を入力し、メッセージにエラーメッセージを入力してください。


文字数のチェック

文字数のチェック


入力した文字を変換する

入力の変換 ( converter )を選択し、値に変換したい種類を入力してください。コンバーターの変換種類についてはリファレンスのconverter ( c )の項目を御参考ください。


「全角カタカナ」を「半角カタカナ」に変換

「全角カタカナ」を「半角カタカナ」に変換


1つのフォーム項目に複数のオプションを設定することができます。フォームの項目を保存するとエントリーに動的フォームが設置されました。


動的フォーム完成例

動的フォーム完成例


標準提供のテンプレートの中には、説明 {caption} が使われておりません。入力した内容を表示させる際には、テンプレートのカスタマイズが必要です。

D: スクロールを予測させるテーブルユニットを作ってみよう

先日弊社で新しいOSS(ScrollHint)を公開しました。このJavaScriptを使うと下のデモようにコンテンツが表示エリアをはみ出した時に、そのコンテンツに対してスクロール可能領域にボックスシャドウをかけ、さらにコンテンツが表示エリアに入った瞬間にスクロールを促すためのアイコンが表示されます。

Col1 Col2 Col3
Lorem ipsum dolor sit. Lorem ipsum dolor sit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Et, magnam.
Lorem ipsum dolor sit. Lorem ipsum dolor sit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Et, magnam.
Lorem ipsum dolor sit. Lorem ipsum dolor sit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Et, magnam.

課題

以下の画像のようにエントリー編集画面のテーブルユニットより「スクロールを促すテーブル」を選択すると、表側の画面でScrollHintが適応されたテーブルを表示できるようにする。


エントリー編集画面

Col1 Col2 Col3
Lorem ipsum dolor sit. Lorem ipsum dolor sit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Et, magnam.
Lorem ipsum dolor sit. Lorem ipsum dolor sit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Et, magnam.
Lorem ipsum dolor sit. Lorem ipsum dolor sit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Et, magnam.

1. JavaScriptを使ってテーブルユニットの選択項目を増やす

Ver.2.8よりテーブルユニットのテーブル自体に対してクラスを追加することができるように下の図のようにセレクトボックスが追加されました。


デフォルトでは、「スクロールするテーブル」しか選択できませんが、この項目はJavaScriptより増やすことが可能です。以下のように、その項目のラベル名とその項目が選択された際にテーブルに付与するクラス名を記述します。

ACMS.Ready(function(){  
 ACMS.Config.aTableOption.push({
    label: 'スクロールを促すテーブル', 
    value: 'js-scrollable'
  });
});

2. 表側ベージでjs-scrollable というクラス名が振られた要素に対して、ScrollHintを実行する

はじめにhead内に以下のコードを書いて ScrollHint を読み込みます。

<link rel="stylesheet" href="https://unpkg.com/scroll-hint@latest/css/scroll-hint.css">
<script src="https://unpkg.com/scroll-hint@latest/js/scroll-hint.min.js"></script>

次に、以下のようなJavaScriptを記述してScrollHintを実行します。

document.addEventListener('DOMContentLoaded', function(){
    new ScrollHint('.js-scrollable', {
      applyToParents: true,
      i18n: {
        scrollable: 'スクロールできます'
      }
  });
});

ハンズオンは以上になります。ぜひ、ScrollHintを使ってみてください!

AMPPS2.4でのa-blog cmsの利用


AMPPS2.4での注意点

AMPPSはローカルにapache, mysql, php の環境を用意できるソフトになります。 標準でa-blog cmsを動かすのに必要なioncubeが入っていてa-blog cmsのローカル開発環境として便利です。


しかし、2014/05/16日現在最新のAMPPS2.4をphp5.4で動かすとioncubeが標準で入っていないようで、 a-blog cmsを動作させることが出来ません。

※php5.3では動作を確認しています

手動でioncubeのインストールを試みたのですが、うまくいかず様子みている状態です。 AMPPS2.4の場合は、php5.3をご利用頂くか、他の環境をご利用ください。

動的フォームのためのテンプレート

動的フォームのテンプレートはメールのテンプレート、入力フォームと入力確認画面のテンプレートがあります。フォームの項目は動的に出力されるため自由なカスタマイズはできないのですが、文面や署名などはテンプレートから変更することができます。

テンプレートについて

テンプレートはsystemテーマに置いてあります。変更するときはご利用しているテーマ内にコピーしてきてください。 /themes/利用中のテーマ/include/form/adminsubject.txt

メールのテンプレート

管理者宛メールの件名

/themes/system/include/form/adminsubject.txt

管理者宛メールの本文

/themes/system/include/form/adminbody.txt

一般宛メールの件名

/themes/system/include/form/subject.txt

一般宛メールの本文

/themes/system/include/form/body.txt

入力フォームと入力確認画面のテンプレート

formタグや入力フォームと入力確認画面のテンプレートを読み込んでいます

/themes/system/include/form/unit.html

完了画面のテンプレートは、デフォルトだと「thanks.html」が指定されています

/bid/%{BID}/eid/%{EID}/tpl/thanks.html

この時、URLコンテキスト「tpl」によって、thanks.html を指定していることによって、Ver. 2.11.25 以上をお使いの場合は、そのままでは動きません。 「private/config.system.yaml」の allow_tpl_path に 「thanks.html」を指定ください。これはセキュリティ上の仕様変更によるものになります。詳細

allow_tpl_path: [thanks.html]

入力フォームのテンプレート

/themes/system/include/form/input.html

入力確認画面のテンプレート

/themes/system/include/form/confirm.html

メールの署名を変更

メールの署名は /themes/system/include/form/adminbody.txt と /themes/system/include/form/body.txt に記述されています。ご利用のテーマにコピーしてきて署名を変更します。  
/themes/ご利用テーマ/include/form/body.txt

%{BLOG_NAME}

〒000-0000
○○県○○○市○○区 ××の××の××
電話番号: 123-456-7890
E-mail: ■■■@■■■■.■■