Answers:
是的,您可以这样做。
我们有一个具有“计划”概念的组件,它对不同的访问级别使用相同的视图,但是取决于用户组,这些字段是否可以访问。
因此,对于那些可以“运行”计划但不能编辑计划的用途,我们将“关闭”许多字段。根据字段类型,这可能意味着设置多个字段属性,例如
$this->form->setFieldAttribute('name', 'class', 'readonly');
$this->form->setFieldAttribute('name', 'readonly', 'true');
$this->form->setFieldAttribute('description', 'class', 'readonly');
$this->form->setFieldAttribute('description', 'disabled', 'true');
$this->form->setFieldAttribute('description', 'type', 'text');
$this->form->setFieldAttribute('published', 'class', 'readonly');
$this->form->setFieldAttribute('published', 'readonly', 'true');
$this->form->setFieldAttribute('publish_up', 'class', 'readonly');
$this->form->setFieldAttribute('publish_up', 'readonly', 'true');
$this->form->setFieldAttribute('publish_up', 'format', '%Y-%m-%d %H:%M:%S');
$this->form->setFieldAttribute('publish_up', 'filter', 'user_utc');
$this->form->setFieldAttribute('publish_down', 'class', 'readonly');
$this->form->setFieldAttribute('publish_down', 'readonly', 'true');
$this->form->setFieldAttribute('publish_down', 'format', '%Y-%m-%d %H:%M:%S');
$this->form->setFieldAttribute('publish_down', 'filter', 'user_utc');
因此,根据您的myReadOnlyCode
字段的不同,可以通过设置一个或多个属性(如上所示)来完成此操作,例如,如果它只是一个标准文本输入:
$this->form->setFieldAttribute('myReadOnlyCode', 'class', 'readonly');
$this->form->setFieldAttribute('myReadOnlyCode', 'readonly', 'true');
比较Joomla核心文章编辑。管理员-article.php-方法getForm。
请注意过滤器,以防止“后门”更新。
$user = JFactory::getUser();
// Check for existing article.
// Modify the form based on Edit State access controls.
if ($id != 0 && (!$user->authorise('core.edit.state', 'com_content.article.' . (int) $id))
|| ($id == 0 && !$user->authorise('core.edit.state', 'com_content'))
)
{
// Disable fields for display.
$form->setFieldAttribute('featured', 'disabled', 'true');
$form->setFieldAttribute('ordering', 'disabled', 'true');
$form->setFieldAttribute('publish_up', 'disabled', 'true');
$form->setFieldAttribute('publish_down', 'disabled', 'true');
$form->setFieldAttribute('state', 'disabled', 'true');
// Disable fields while saving.
// The controller has already verified this is an article you can edit.
$form->setFieldAttribute('featured', 'filter', 'unset');
$form->setFieldAttribute('ordering', 'filter', 'unset');
$form->setFieldAttribute('publish_up', 'filter', 'unset');
$form->setFieldAttribute('publish_down', 'filter', 'unset');
$form->setFieldAttribute('state', 'filter', 'unset');
}