web-dev-qa-db-fra.com

Comment puis-je remplacer l'attribut class ou readonly spécifié dans le formulaire xml?

Nous avons un champ particulier qui ne peut autoriser que les entrées lorsque vous ajoutez l'enregistrement pour la première fois. Je me demande donc s'il est possible d'ajouter une classe ou de spécifier readonly à un moment donné après le chargement du formulaire. , mais (bien sûr), avant qu’il ne soit rendu à l’utilisateur.

Lors du chargement d'un formulaire à partir de models\forms\myform.xml, les attributs tels que class (es) et readonly sont chargés comme prévu. Voici la façon dont le champ est actuellement rendu, qui utilise les bibliothèques\joomla\form\form.php:

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

Oui tu peux faire ça.

Nous avons un composant qui a un concept de "Plans", il utilise la même vue pour différents niveaux d’accès, mais rend les champs accessibles ou non en fonction des groupes d’utilisateurs.

Donc, pour les utilisations qui peuvent "exécuter" un plan mais pas le modifier, nous désactivons un ensemble de champs. En fonction du type de champ, cela peut signifier la définition de plusieurs attributs de champ, par exemple.

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

Ainsi, en fonction de votre champ myReadOnlyCode, vous pouvez le faire en définissant un ou plusieurs attributs comme indiqué ci-dessus, par exemple. s'il ne s'agit que d'une saisie de texte standard:

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

Comparez l'édition de l'article principal de Joomla. Administrateur - article.php - méthode getForm.

Soyez conscient du filtre pour empêcher la mise à jour "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');
    }
2
schnuti