オリジナルのカラムを追加する3【要PHP】

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


今回触れたいのは、


custom_multi_column_0


一つのカラムで複数の入力フォームを設置する事です。


/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()."][]\"

で配列になるようにしていますが、連想配列にすることも可能です。




続いて、


custom_multi_column_1


のように、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から得られる値を配列だとして処理を進めます。




最後に


custom_multi_column_2


入力内容の確認や自動送信メールへの文字列の挿入ですが、


<?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のコードは下記のリンク先ページで確認できます。

https://github.com/inunosinsi/soycms/blob/master/cms/app/webapp/inquiry/src/domain/SOYInquiry_Column.class.php