Come posso sovrascrivere la classe o l'attributo readonly specificato nel modulo xml?


9

Abbiamo un campo particolare che può consentire l'input solo quando si aggiunge il record per la prima volta, quindi mi chiedo se è possibile aggiungere una classe o specificare readonlyad un certo punto dopo che il modulo è stato caricato, ma (ovviamente) , prima che sia reso all'utente.

Quando si carica un modulo da models\forms\myform.xml, gli attributi come le classi e solo vengono caricati come previsto. Ecco come viene attualmente visualizzato il campo, che utilizza le librerie \ joomla \ form \ form.php:

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

Risposte:


3

Si, puoi fare questo.

Abbiamo un componente che ha un concetto di "Piani", utilizza la stessa vista per diversi livelli di accesso, ma rende i campi accessibili o meno a seconda dei gruppi di utenti.

Quindi, per quegli usi che possono "eseguire" un piano ma non modificarlo, disattiviamo un gruppo di campi. A seconda del tipo di campo, ciò può significare l'impostazione di più attributi di campo, ad es

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

Quindi, a seconda di quale sia il tuo myReadOnlyCodecampo, puoi farlo impostando uno o più degli attributi come mostrato sopra, ad esempio se è solo un input di testo standard:

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

2

Confronta la modifica dell'articolo principale di Joomla. Amministratore - article.php - metodo getForm.

Prestare attenzione al filtro per impedire l'aggiornamento "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');
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.