Jak mogę zastąpić atrybut klasy lub atrybut tylko do odczytu określony w formularzu xml?


9

Mamy określone pole, które może zezwalać na dane tylko podczas dodawania rekordu po raz pierwszy, więc zastanawiam się, czy można dodać klasę lub określić readonlyw pewnym momencie po załadowaniu formularza, ale (oczywiście) , zanim zostanie wyświetlony użytkownikowi.

Podczas ładowania formularza z models\forms\myform.xml, atrybuty takie jak klasa (klasy) i tylko do odczytu są ładowane zgodnie z oczekiwaniami. Oto sposób, w jaki pole jest obecnie renderowane, które wykorzystuje biblioteki \ joomla \ form \ form.php:

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

Odpowiedzi:


3

Tak, możesz to zrobić.

Mamy komponent, który ma pojęcie „Plany”, używa tego samego widoku dla różnych poziomów dostępu, ale udostępnia pola lub nie zależy od grup użytkowników.

Tak więc dla tych zastosowań, które mogą „uruchomić” plan, ale go nie edytować, wyłączamy kilka pól. W zależności od typu pola może to oznaczać ustawienie kilku atrybutów pola, np

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

Tak więc, w zależności od tego, jakie jest twoje myReadOnlyCodepole, możesz to zrobić, ustawiając jeden lub więcej atrybutów, jak pokazano powyżej, np. Jeśli jest to zwykłe wprowadzanie tekstu:

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

2

Porównaj edycję podstawowego artykułu Joomla. Administrator - article.php - metoda getForm.

Pamiętaj o filtrze, aby zapobiec aktualizacji „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');
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.