Wie kann ich die im Formular xml angegebene Klasse oder das schreibgeschützte Attribut überschreiben?

9

Wir haben ein bestimmtes Feld, das nur Eingaben zulassen kann, wenn der Datensatz zum ersten Mal hinzugefügt wird. Daher frage ich mich, ob es möglich ist, eine Klasse hinzuzufügen oder readonlyirgendwann nach dem Laden des Formulars anzugeben , aber (natürlich) , bevor es dem Benutzer gerendert wird.

Beim Laden eines Formulars aus models\forms\myform.xmlwerden Attribute wie Klasse (n) und schreibgeschützt wie erwartet geladen. So wird das Feld derzeit gerendert, wobei Bibliotheken \ joomla \ form \ form.php verwendet werden:

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

Antworten:

3

Ja, das kannst du machen.

Wir haben eine Komponente mit dem Konzept "Pläne", die dieselbe Ansicht für verschiedene Zugriffsebenen verwendet, die Felder jedoch abhängig von den Benutzergruppen zugänglich macht oder nicht.

Für Anwendungen, die einen Plan "ausführen", aber nicht bearbeiten können, deaktivieren wir eine Reihe von Feldern. Abhängig vom Feldtyp kann dies bedeuten, dass mehrere Feldattribute festgelegt werden, z

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

Abhängig von Ihrem myReadOnlyCodeFeld können Sie dies tun, indem Sie eines oder mehrere der oben gezeigten Attribute festlegen, z. B. wenn es sich nur um eine Standardtexteingabe handelt:

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

Vergleichen Sie die Bearbeitung des Joomla-Kernartikels. Administrator - article.php - Methode getForm.

Beachten Sie den Filter, um ein "Backdoor" -Update zu verhindern.

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