Как я могу переопределить класс или атрибут только для чтения, который указан в форме xml?


9

У нас есть определенное поле, которое может разрешить ввод только при первом добавлении записи, поэтому мне интересно, можно ли добавить класс или указать readonlyв какой-то момент после загрузки формы, но (конечно) до того, как он будет предоставлен пользователю.

При загрузке формы из models\forms\myform.xml, атрибуты, такие как class (s) и readonly загружаются как положено. Вот способ отображения поля в данный момент, который использует библиотеки \ joomla \ form \ form.php:

echo $this->form->getInput('myReadOnlyCode')

Ответы:


3

Да, ты можешь это сделать.

У нас есть компонент, имеющий концепцию «Планы», он использует одно и то же представление для разных уровней доступа, но делает поля доступными или нет в зависимости от групп пользователей.

Поэтому для тех применений, которые могут «запускать» план, но не редактировать его, мы выключаем «кучу» полей. В зависимости от типа поля это может означать установку нескольких атрибутов поля, например

$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');

2

Сравните правку основной статьи 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');
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.