2012-01-20 54 views
1

創建多個記錄我有以下的模式,我想創建的Symfony 1.4學說形式,其中用戶可以從選擇框選擇的雜誌,然後單擊幾個複選框,每個複選框是一個問題。如何爲每一個選擇的複選框

在僞標記應該是這樣的:

[選擇]雜誌[/選擇]

[複選框]第1期[複選框]

[複選框]第2期[複選框]

[複選框]第3 [複選框]

[複選框]第4 [複選框]

[複選框]第5 [複選框]

如果窗體保存它應該創建爲每個選定的複選框一個記錄。廣告ID通過url傳遞給表單。

我嘗試了幾種方法來實現這一點,但我堅持在這幾個星期了,在這裏希望有人能幫助我。

在實際的項目,我需要的描述形式25集,但是這不會是一個問題,如果我只得到這個基本形式的工作。

我應該創建一個廣告形式並嵌入刨形式進入呢?我總是試着用Planing表單直接試用。

任何建議,提示或幫助非常感謝。 對不起我可憐的英語。

Advertisement: 
    columns: 
    title:     { type: string(100), notnull: true } 

Issue: 
    columns: 
    magazine_id:   { type: integer, notnull: true } 
    number:     { type: string(10), notnull: true } 
    relations: 
    Magazine: 
     local: magazine_id 
     foreign: id 
     foreignAlias: Issues 
     type: one 
     foreignType: many 

Magazine: 
    columns: 
    title:     { type: string(100) } 

Planing: 
    columns: 
    advertisement_id:   { type: integer, notnull: true } 
    magazine_id:    { type: integer, notnull: true } 
    issue_id:     { type: integer, notnull: true } 
    relations: 
    Issue: 
     local: issue_id 
     foreign: id 
     foreignAlias: Planings 
     type: one 
     foreignType: many 
    Advertisement: 
     local: advertisement_id 
     foreign: id 
     foreignAlias: Planings 
     type: one 
     foreignType: many 
    Magazine: 
     local: magazine_id 
     foreign: id 
     foreignAlias: Planings 
     type: one 
     foreignType: many 

回答

1

如果我理解正確(讓我檢查:你想在某些雜誌的某些問題上顯示廣告?)那麼這是怎麼回事?

使用從Planing對象到Issue對象的關係,一對多,然後使用Symfony博客中所述的內置sfWidgetFormChoice:http://symfony.com/blog/new-in-symfony-1-2-make-your-choice(向下滾動到「將您的選擇分組」)。

因此,不要使用sfWidgetFormDoctrineChoice,而要使用它的父類,並編寫自己的方法來構建存儲在嵌套數組中的由雜誌分組的問題數組。您可以覆蓋像這樣在你的PlaningForm配置的部件:

$this->widgetSchema['issues_list'] = new sfWidgetFormChoice(array(
    'multiple' => true, 
    'expanded' => true, 
    'choices' => Doctrine_Core::getTable('Issue')->getIssuesForSelect(), 
)); 

然後將方法添加到IssueTable.class.php返回問題IDS與標題的嵌套陣列,通過雜誌的標題分類,它應該是這個樣子:

array(
    'Magazine 1' => array(
    17 => 'Issue 1', 
    18 => 'Issue 2', 
    28 => 'Issue 3', 
), 
    'Magazine 2' => array(
    11 => 'Issue 26', 
    19 => 'Issue 27', 
    29 => 'Issue 28', 
), 
); 
+0

我要補充,這將不會看起來很喜歡你叫什麼(一個選擇,改變複選框),但是一旦在頁面加載,你可以添加使用的JavaScript行爲。 – inanimatt

相關問題