2013-10-16 83 views
0

我創建一個Joomla 3.0組件,我有一個問題。Joomla的JForms使只讀編輯

我想在編輯模式下使某些字段爲只讀。他們應該被創造,然後是不可修改的。

我知道三個(在我看來)可能的方式來做到這一點。

  1. 設置字段只讀背景
  2. 負載如果我們在編輯模式下的字段爲只讀定義
  3. 使用其他形式的JavaScript,使外地只讀

我更喜歡方法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 } ?> 
+0

你應該能夠在JForm形式的XML decalration只讀添加=「真」(如果你使用它) – WooDzu

回答

1

我不會建議創建一個「只讀」形式,你就必須保持同步之間你更新它的不同版本,基本上你打破了DRY

您可以在運行時使用setFieldAttribtue()來設置JForm的各種屬性。

例如,在很多你可以找到核心部件被修改的形式:

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'); 
+0

這是偉大的,不知道。但最後一個問題仍然存在。我如何確定我是否正在編輯或創建產品? – Xavjer

+0

找到它我自己,這是$ this-> getState('profile.id')(Profile = loadForm的第二個參數,id =該字段的值),這將返回id,如果設置了我正在編輯;) – Xavjer