xml形式で指定されたクラスまたは読み取り専用属性をオーバーライドするにはどうすればよいですか?


9

初めてレコードを追加するときにのみ入力を許可する特定のフィールドがあるので、クラスを追加したりreadonly、フォームが読み込まれた後のある時点で指定したりできるかどうか疑問に思っていますが、(もちろん) 、ユーザーにレンダリングされる前。

からフォームをロードすると、models\forms\myform.xmlクラスや読み取り専用などの属性が期待どおりにロードされます。以下は、フィールドが現在レンダリングされている方法で、libraries \ joomla \ form \ form.phpを使用しています。

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

回答:


3

はい、できます。

「プラン」の概念を持つコンポーネントがあり、異なるアクセスレベルに対して同じビューを使用しますが、ユーザーグループに応じてフィールドにアクセスできるようにするかどうかを指定します。

したがって、プランを「実行」できるが編集はできない用途では、一連のフィールドを「オフ」にします。フィールドタイプによっては、これはいくつかのフィールド属性を設定することを意味します。

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

したがって、myReadOnlyCodeフィールドが何であるかに応じて、上記のように1つ以上の属性を設定することで、たとえば標準のテキスト入力だけの場合に、それを行うことができます。

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

2

Joomlaのコア記事の編集を比較してください。管理者-article.php-メソッドgetForm。

「バックドア」アップデートを防ぐためのフィルターに注意してください。

    $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');
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.