HTML_QuickFormのhierselectとSmartyとの連携

お仕事でHTML_QuickFormのhierselectを使いました。沿線を選んだ後に該当する駅をselectでプルダウン表示する処理を作らなければならなかったのです。最初はAJAXを使ってやろうと思ってサンプルを探していたら、たまたまPHPならHTML_QuickFormのhierselectで出来ることを見つけ、こちらで実現しました。
簡単に作成できてJavaScriptのコードは書かなくて済むので、お仕事で使うには丁度いいです。
サンプルは次です。

<?php
/**
 * hierselectサンプル
 */

ini_set('include_path', 'PEAR/' . PATH_SEPARATOR . 'Smarty-2.6.20/');

/**
 * Smarty
 */
require_once 'libs/Smarty.class.php';

/**
 * HTML_QuickForm
 */
require_once 'HTML/QuickForm.php';
require_once 'HTML/QuickForm/Renderer/ArraySmarty.php';

/**
 * 沿線駅データ
 */
// 沿線
$line = array (
  1 => 'JR東海道・山陽本線',
  2 => 'JR山陽本線',
  3 => 'JR福知山線',
);

// 駅
$station = array (
  1 => 
  array (
    '' => '選択して下さい。',
    1 => '尼崎',
    2 => '立花',
    3 => '甲子園口',
    4 => '西宮',
    5 => 'さくら夙川',
    6 => '芦屋',
    7 => '甲南山手',
    8 => '摂津本山',
    9 => '住吉',
  ),
  2 => 
  array (
    '' => '選択して下さい。',
    43 => '神戸',
    44 => '兵庫',
    45 => '新長田',
    46 => '鷹取',
    47 => '須磨海浜公園',
    48 => '須磨',
    49 => '塩屋',
    50 => '垂水',
  ),
  3 => 
  array (
    '' => '選択して下さい。',
    73 => '尼崎',
    74 => '塚口',
    75 => '猪名寺',
    76 => '伊丹',
    77 => '北伊丹',
    78 => '川西池田',
    79 => '中山寺',
    80 => '宝塚',
  ),
);

/**
 * エリア・市区町村
 */
// エリア
$area = array(
  1 => '神戸',
  2 => '尼崎',
);
// 市区町村
$shikuchouson = array(
  1 => array(
    '' => '選択して下さい。',
    1 => '神戸',
    2 => '兵庫',
  ),
  2 => array(
    '' => '選択して下さい。',
    3 => '尼崎',
    4 => '塚口',
  ),
);

/**
 * hierselect
 */
$form = new HTML_QuickForm('sample');
// 交通
$form->setDefaults(array('line_station' => array(2, 45)));
$sel =& $form->addElement('hierselect', 'line_station', '交通:');
$sel->setOptions(array($line, $station));
// エリア
$form->setDefaults(array('area_shikuchouson' => array(2, 4)));
$sel =& $form->addElement('hierselect', 'area_shikuchouson', 'エリア:');
$sel->setOptions(array($area, $shikuchouson));

/**
 * Smarty
 */
$smarty = new Smarty();
$smarty->compile_dir = './templates_c';
$smarty->template_dir = './';
$renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$form->accept($renderer);
$smarty->assign('form', $renderer->toArray());
$smarty->display('sample.tpl');

テンプレート側の記述はこのようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta http-equiv="cache-control" content="no-cache" />
</head>
<body>
<form>
交通:
{$form.line_station.html}
<br />
エリア
{$form.area_shikuchouson.html}
</form>
</body>
</html>

名の知れたPHPのソフトウェアに何があるのか整理。正確である保障はありませんのでご注意下さい。

種類 製品名 データベース フレームワーク 登場時期 ライセンス
Wiki MediaWiki MySQL,PostgreSQL - 2002年頃? GPL
Wiki PukiWiki なし - GPL
CMS Joomla! MySQL - GPL v2
CMS Geeklog MySQL,SQLServer - GPL
CMS Drupal MySQL,SQLServer - 2001年 GPL
CMS MODx MySQL - GPL
CMS XOOPS MySQL - 2001年 GPL
CMS PHPNuke MySQL - GPL
CMS eZ Publish MySQL,PostgreSQL - GPL
CMS Nucleus CMS MySQL - 2001年 GPL
EC EC-CUBE MySQL,PostgreSQL - 2006年 GPL/商用
EC osCommerce MySQL - 2003年 GPL
EC Zen Cart MySQL - GPL
BBS Simple Machines Forum MySQL - 2003年 Simple Machines License
BBS phpBB MySQL,PostgreSQL - 2000年 GPL
Blog WordPress MySQL - GPL
SNS OpenPne MySQL - 2005年 PHPライセンス
CRM SugarCRM - SugarCRM Public Licence
グループウェア アイポ4 PostgreSQL - 2008年 GPL/商用
広告配信 OpenX MySQL,PostgreSQL - 2008年 Attribution-NonCommercial-ShareAlike 2.5
ソーシャルブックマーク Pligg

エディタ

PHPで開発をするのに、coLinuxemacszshを使ってやろうと思ったけど、ツールの使い方を覚えるのが大変なのでやめました。これらのツールにあこがれるのだけれど、敷居が高い。
おとなしくサクラエディタを使っておきます。アシアルの人も使っているらしい。
http://blog.asial.co.jp/284