0

Joomla 3.0 コンポーネントを作成していますが、質問があります。

編集モードで一部のフィールドを読み取り専用にしたいと考えています。それらは作成時に設定し、その後は編集できないようにする必要があります。

私はこれを行うための 3 つの (私の意見では) 可能な方法を知っています。

  1. フィールドをバックグラウンドで読み取り専用に設定する
  2. フィールドが読み取り専用で定義されている編集モードの場合は、他のフォームをロードします
  3. JavaScript を使用してフィールドを読み取り専用にします

私は方法 2 (または、より単純な場合は方法 2) を好みますが、これをどのように達成できるかわかりません。編集モードに入った場合、getForm() 関数でどのように知ることができますか? 助言がありますか :)?

編集:現時点では、私は好きではない方法3を使用しています:

<?PHP if ($this->item->id > 0) { ?>
<script type="text/javascript">
var text_box = document.getElementById('jform_name');
text_box.setAttribute('readonly', 'readonly'); 
</script>
<?PHP } ?>
4

1 に答える 1

1

「読み取り専用」フォームを作成することはお勧めしません。更新するときに異なるバージョン間の同期を維持する必要があるためです。基本的にはDRYを壊します。

を使用して、実行時に JForm のさまざまな属性を設定できますsetFieldAttribtue()

たとえば、多くのコア コンポーネントで、フォームが変更されているのを見つけることができます。

com_admin/models/profile.php

public function getForm($data = array(), $loadData = true)
{
    // Get the form.
    $form = $this->loadForm('com_admin.profile', 'profile', array('control' => 'jform', 'load_data' => $loadData));
    if (empty($form))
    {
        return false;
    }
    if (!JComponentHelper::getParams('com_users')->get('change_login_name'))
    {
        $form->setFieldAttribute('username', 'required', 'false');
        $form->setFieldAttribute('username', 'readonly', 'true');
        $form->setFieldAttribute('username', 'description', 'COM_ADMIN_USER_FIELD_NOCHANGE_USERNAME_DESC');
    }

    return $form;
}

一部のコンポーネントでは、readonly属性を設定するだけでなくclass、フィールドを適切にスタイルできるように も設定します。

$form->setFieldAttribute('name', 'class', 'readonly');
$form->setFieldAttribute('name', 'readonly', 'true');
于 2013-10-16T21:08:54.253 に答える