我正在创建一个Joomla 3.0组件,我有一个问题。
我想在编辑模式下将某些字段设为只读。它们应该在创作时设置,然后是不可编辑的。
我知道三种(在我看来)可能的方法。
我更喜欢方法2(或者更简单的方法),但我不知道如何实现。如果我们进入编辑模式,我怎么知道getForm()函数?有什么建议:)?
编辑: 目前,我正在使用我不喜欢的方法3:
<?PHP if ($this->item->id > 0) { ?>
<script type="text/javascript">
var text_box = document.getElementById('jform_name');
text_box.setAttribute('readonly', 'readonly');
</script>
<?PHP } ?>
答案 0 :(得分:1)
我不建议您创建“只读”表单,因为您必须在更新时保持不同版本之间的同步,基本上您会中断DRY。
您可以使用setFieldAttribtue()
在运行时设置JForm的各种属性。
例如,在许多核心组件中,您可以找到要修改的表单:
<强> com_admin/models/profile.php
强>
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_admin.profile', 'profile', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
if (!JComponentHelper::getParams('com_users')->get('change_login_name'))
{
$form->setFieldAttribute('username', 'required', 'false');
$form->setFieldAttribute('username', 'readonly', 'true');
$form->setFieldAttribute('username', 'description', 'COM_ADMIN_USER_FIELD_NOCHANGE_USERNAME_DESC');
}
return $form;
}
在我们的某些组件中,我们不仅设置了readonly
属性,还设置了class
,因此我们可以适当地设置字段的样式。
$form->setFieldAttribute('name', 'class', 'readonly');
$form->setFieldAttribute('name', 'readonly', 'true');