オリジナルのカラムを追加する2【要PHP】で作成しましたカスタムカラム(CustomColumn)を基にして仕様を更に確認してみます。
今回触れたいのは、

一つのカラムで複数の入力フォームを設置する事です。
/CMSインストールディレクトリ/app/webapp/inquiry/src/columns/CustomColumn.class.php
で公開側のフォームの出力に関与するgetFormメソッドを下記のようにします。
<?php
class CustomColumn extends SOYInquiry_ColumnBase{
/**
* ユーザに表示するようのフォーム
* @param array
* @return string
*/
function getForm(array $attrs=array()){
// 入力した内容
$values = $this->getValue();
if(!is_array($values)) $values = array("", "");
$html = array();
$html[] = "<input type=\"text\" name=\"data[".$this->getColumnId()."][]\" value=\"".htmlspecialchars($values[0], ENT_QUOTES, "UTF-8")."\">";
$html[] = "<input type=\"text\" name=\"data[".$this->getColumnId()."][]\" value=\"".htmlspecialchars($values[1], ENT_QUOTES, "UTF-8")."\">";
return implode("\n", $html);
}
/** 以下省略 **/
}
注目すべき点は
$values = $this->getValue();
if(!is_array($values)) $values = array("", "");
でgetValueで得られる値が配列になることです。
※上記のサンプルコードではフォームから送信する値が
name=\"data[".$this->getColumnId()."][]\"
で配列になるようにしていますが、連想配列にすることも可能です。
続いて、

のように、validate(入力内容のチェック)も複数の入力フォームに合うように書き換えます。
<?php
class CustomColumn extends SOYInquiry_ColumnBase{
/** 途中省略 **/
function validate(){
$values = $this->getValue();
if(!is_array($values)) $values = array("", "");
if(!strlen($values[0]) || !strlen($values[1])){
$this->setErrorMessage("値が入力されていません。");
return false;
}
return true;
}
/** 以下省略 **/
}
validateメソッドでもgetValueから得られる値を配列だとして処理を進めます。
最後に

入力内容の確認や自動送信メールへの文字列の挿入ですが、
<?php
class CustomColumn extends SOYInquiry_ColumnBase{
/** 途中省略 **/
/**
* 確認画面で呼び出す
* @return string
*/
function getView(){
$values = $this->getValue();
if(!is_array($values)) $values = array("", "");
return $values[0].$values[1];
}
/**
* データ投入用
* @return string
*/
function getContent(){
$values = $this->getValue();
if(!is_array($values)) $values = array("", "");
return $values[0].$values[1];
}
/** 以下省略 **/
}
getValueから得られる値を配列として捉えて処理を進めます。
追記
カスタムカラムの親クラスのSOYInquiry_ColumnBaseのコードは下記のリンク先ページで確認できます。
