Як я можу змінити атрибут класу або readonly, вказаний у формі xml?


9

У нас є конкретне поле, яке може дозволити введення тільки при першому додаванні запису, тому мені цікаво, чи можна додати клас або вказати readonlyв якийсь момент після завантаження форми, але (звичайно) , перш ніж вона буде надана користувачеві.

Під час завантаження форми з models\forms\myform.xmlтаких атрибутів, як клас (и) та лише для читання завантажуються, як очікувалося. Ось так, як видається поле в даний час, яке використовує бібліотеки \ 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.

Будьте в курсі фільтра, щоб запобігти оновленню "backdoor".

    $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.