Chu*_*uck 2 php pear quickform
我有使用QuickForm的代码,它使用以下内容创建一个选择小部件:
$form->addElement( 'select', 'state_id', 'State:', statesArray() );
Run Code Online (Sandbox Code Playgroud)
statesArray()查询数据库以获取可用状态,并返回一个关联数组,其中ID与状态名称相关联.我在整个解决方案中使用了类似的技术.
我想要做的是在这个数组前加上两个被禁用的选项,这样默认情况下,选择菜单会显示"请选择一个状态",后面跟一个破折号,这两个选项都被禁用.如果我没有使用QuickForm,则select将具有以下两个选项:
<option value="" disabled="disabled">Select a State</option>
<option value="" disabled="disabled">-</option>
Run Code Online (Sandbox Code Playgroud)
这两个选项都被禁用,如果用户在第一个值上保留选项,则选择窗口小部件会提交一个空值,该值由表单检查代码使其无效.
有没有办法用QuickForm做到这一点?
谢谢,查克
Chu*_*uck 11
好的,在深入研究QuickForm文档后,我想出了这一点.解决方案是不使用数组填充select小部件,但要手动构建select元素,请将其添加到表单中.
最初,我有这个:
function dbArray( $tableName, $fieldName ) {
$query = <<< EOT
SELECT `id`, `$fieldName`
FROM `$tableName`
ORDER BY `$fieldName`
EOT;
$link = connectToDatabase();
$result = mysql_query( $query, $link );
while ( $rec = mysql_fetch_assoc( $result ) );
{
$array[$rec['id']] = $rec[$fieldName];
}
return $array;
}
function statesArray() {
return dbArray( 'states', 'name' );
}
$form = new HTML_QuickForm( 'account', 'POST' );
$form->addElement( 'select', 'state_id', 'State:', statesArray() );
Run Code Online (Sandbox Code Playgroud)
我做了一个地方版本array( 'none' => 'Please select a State' )被前置到dbArray数组返回到调用代码之前调用,但这并没有使选项禁用.添加规则以确认选择是数字是变通方法($form->addRule( 'state_id', 'You must select a state.', 'numeric' )).但我仍然不喜欢它是可选择的.这是我找到的解决方案.
function statesSelect() {
$select = HTML_QuickForm::createElement( 'select' );
$select->addOption( 'Select a State', '', array( 'disabled' => 'disabled' ) );
$select->addOption( '-', '', array( 'disabled' => 'disabled' ) );
$statesArray = dbArray( 'states', 'name' );
foreach ( $statesArray as $id => $name ) {
$select->addOption( $name, $id );
}
return $select;
}
$form = new HTML_QuickForm( 'account', 'POST' );
$form->addElement( statesSelect() );
$form->addRule( 'state_id', 'You must select a state.', 'required' );
Run Code Online (Sandbox Code Playgroud)
我希望这有助于其他人.:)
| 归档时间: |
|
| 查看次数: |
8221 次 |
| 最近记录: |