2011-05-03 126 views
1

我想填充表單與multicheckboxes和multicheckboxes分組在一起,所以如果我有複選框選中,我會查看他們所有。正常填充不起作用。它只是讓我的複選框之一。這是我的代碼。multicheckboxes zend表單多填充

public function addEditAction() { 


    $id = (int) $this->_request->getParam('id'); 

    $request = $this->getRequest(); 

    $form = new Admin_Form_Tab(); 

    $db = Zend_Db_Table::getDefaultAdapter(); 

    if ($this->getRequest()->isPost()) { 
     if ($form->isValid($request->getPost())) { 
      if (isset($id) && $id != "") { 
       $gettag = $form->getValue('tag_id'); 
       $gettags = count($gettag); 
       try { 
        //shift the orders to 
        $select = $db->select()->from(array('t' => 'tab'), array('t.id', 
           't.title', 
           't.tab_position', 
           't.order', 
           't.is_active', 
           't.is_deleted'))->where('id = ?', $id); 
        $currentTab = $db->fetchRow($select); 
        $var3 = array('tab.order' => new Zend_Db_Expr('tab.order - 1')); 
        $var4 = array('tab.order >= ' . $currentTab['order'], 'is_active=1', 'is_deleted=0', 'tab_position=1'); 
        $db->update('tab', $var3, $var4); 
        $var = array('tab.order' => new Zend_Db_Expr('tab.order + 1')); 
        $var2 = array('tab.order >= ' . $form->getValue('order'), 'is_active=1', 'is_deleted=0', 'tab_position=1'); 
        $db->update('tab', $var, $var2); 
        $db->delete('tab_tag', array('tab_id = ?' => $id)); 
        foreach ($gettag as $value) { 

         $db->insert('tab_tag', 
           array(
            'tag_id' => $value, 
            'tab_id' => $id 
         )); 
        } 
        $db->update('tab', array(
         'title' => $form->getValue('title'), 
         'body' => $form->getValue('body'), 
         'is_active' => $form->getValue('is_active'), 
         'banner_link' => $form->getValue('banner_link'), 
         'tab_path' => $form->getValue('tab_path'), 
         'link_open' => $form->getValue('link_open'), 
         'tab_position' => $form->getValue('tab_position'), 
         'tab_parent' => $form->getValue('tab_parent') 
          ), 
          array('id =?' => $id)); 
        $this->flash('Tab Updated', 'admin/tab'); 
       } catch (Exception $e) { 

        $this->flash($e->getMessage(), 'admin/tab'); 
       } 
      } else { 
       try { 
        $formValues = $form->getValues(); 
        $formValues['created_by'] = 1; 
        $formValues['created_date'] = date('Y/m/d H:i:s'); 
        $formValues['is_deleted'] = 0; 

        $var = array('tab.order' => new Zend_Db_Expr('tab.order + 1')); 
        $var2 = array('tab.order >= ' . $form->getValue('order'), 'is_active=1', 'is_deleted=0', 'tab_position=1'); 
        $db->update('tab', $var, $var2); 

        foreach ($gettag as $value) { 

         $db->insert('tab_tag', 
           array(
            'tag_id' => $value, 
            'tab_id' => $id 
         )); 
        } 
        $db->insert('tab', array(
         'title' => $form->getValue('title'), 
         'body' => $form->getValue('body'), 
         'is_active' => $form->getValue('is_active'), 
         'banner_link' => $form->getValue('banner_link'), 
         'tab_path' => $form->getValue('tab_path'), 
         'link_open' => $form->getValue('link_open'), 
         'tab_position' => $form->getValue('tab_position'), 
         'tab_parent' => $form->getValue('tab_parent') 
        )); 




        $this->flash('Tab inserted', 'admin/tab'); 
       } catch (Exception $e) { 
        $this->flash($e->getMessage(), 'admin/tab'); 
       } 
      } 
     } 
    } 
    /* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */ 


    if (isset($id) && $id != "") { 
     $values = $db->fetchRow($db->select() 
       ->from(array('t'=>'tab')) 
       ->joinLeft(array('tt'=>'tab_tag'), 'tt.tab_id = t.id')); 
     $form->populate($values); 
    } 

    $this->view->form = $form; 
} 
+0

重新提出同樣的問題在這裏是不可接受的行爲。如果你想引起人們對你的問題的關注,那麼兩天後你將被允許[放置賞金](http://stackoverflow.com/faq#bounty)。您也可以[編輯您的問題](http://stackoverflow.com/posts/5869027/edit)添加其他信息,這可能會使您的問題更易於理解和回答。 – Will 2011-05-04 12:15:44

回答

5

要填充multicheckbox你必須提供與已被選中的複選框的關鍵陣列:

$values = array(
    'my_mylticheckbox' => array(1,3,5) 
); 
$form->populate($values); 

,或者如果你想檢查只有一個複選框:

$values = array('my_multicheckbox' => 3); 
$form->populate($values); 

所以,只要確保你傳遞一個數組作爲你multicheckbox的值。

+0

我試着你說我把複選框的值放在數組中,仍然面臨相同的問題,只有一個複選框工作,這就是我所做的:$ values = array($ form-> getValue('tag_id')); (array)('t'=>'tab'')()(){if(isset($ id)&& $ id!=「」){ $ values = $ db-> fetchRow($ db-> select() - > from )) - > joinLeft(array('tt'=>'tab_tag'),'tt.tab_id = t.id')); $ form-> populate($ values); } – haider 2011-05-04 06:49:50

+0

不正確。應該是$ values = $ db-> fetchRow(...); $ values ['my_multicheckboxes'] =數組(...複選框的所有值...);如果你的複選框來自tab_tag表,那麼我認爲你不應該在一個查詢中這樣做。首先查詢選擇數據的標籤,第二個應該選擇tab_tags來生成multiheckbox的平面數組。 – ischenkodv 2011-05-04 07:55:25

0

看起來你是在表格上做$form>populate()你的所有元素添加到cat_parent控制之前。反轉這兩個塊的順序 - 首先將貓添加到cat_parent控件,然後添加獲取數據庫值並填充 - 應該做的伎倆。

[作爲一個方面的評論,我可能會將其中的大部分內容推到表單本身。允許您的表單在構造函數中使用noChildsCategory對象/數組,然後讓init()值添加multiOptions。另外,我可能會推動數據庫讀/寫到某種模型對象。然後控制器變得更加苗條,您可以單獨測試獨立於控制器代碼的形式和模型。只是一個想法]

0
$values = $this->getEntityManager()  
       ->getRepository('Application\Entity\Tab')   
       ->findBy(array(    
        "id" => $id 
       )); 

$arrayIds = array(); 
foreach ($values as $value) { 
    $arrayIds[] = $value->getId();    
} 
$form->get('your_check_name')->setValue($arrayIds); 

1)將所有ID和直接設置到複選框的表單字段中,它會自動填充。