Bagaimana saya bisa mengganti atribut kelas atau hanya baca yang ditentukan dalam formulir xml?

9

Kami memiliki bidang tertentu yang hanya dapat mengizinkan input saat menambahkan catatan untuk pertama kalinya, jadi saya bertanya-tanya apakah mungkin untuk menambahkan kelas, atau menentukan readonlydi beberapa titik setelah formulir dimuat, tapi (tentu saja) , sebelum diberikan kepada pengguna.

Saat memuat formulir dari models\forms\myform.xml, atribut seperti kelas dan baca hanya dimuat seperti yang diharapkan. Berikut cara bidang saat ini sedang dirender, yang menggunakan libraries \ joomla \ form \ form.php:

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

Jawaban:

3

Ya, Anda bisa melakukan ini.

Kami memiliki komponen yang memiliki konsep "Paket", ia menggunakan tampilan yang sama untuk tingkat akses yang berbeda, tetapi membuat bidang dapat diakses atau tidak tergantung pada grup pengguna.

Jadi, untuk penggunaan yang dapat "Menjalankan" paket tetapi tidak mengeditnya, kami mematikan "sekelompok" bidang. Bergantung pada jenis bidang ini dapat berarti menetapkan beberapa atribut bidang, misalnya

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

Jadi, tergantung pada myReadOnlyCodebidang Anda, Anda dapat melakukannya dengan mengatur satu atau lebih atribut seperti yang ditunjukkan di atas, misalnya jika itu hanya input teks standar:

$this->form->setFieldAttribute('myReadOnlyCode', 'class', 'readonly');
$this->form->setFieldAttribute('myReadOnlyCode', 'readonly', 'true');
Craig
sumber
2

Bandingkan hasil edit artikel inti Joomla. Administrator - article.php - metode getForm.

Waspadai filter untuk mencegah pembaruan "pintu belakang".

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