2012-09-10 66 views
0

我正在爲Concrete 5(5.4.0+)創建一個新包。插入一個新的塊可以很好地工作。但是,當我編輯現有的塊時,它會嘗試在我單擊「保存」時重新插入,而不是UPDATE。具體5 ADODB更新並插入重複主鍵

影響此數據庫的兩個字段是bID和eID。兩者都是non-auto-incrementing INT(10) default none NOT NULL

的值在控制器的關聯數組$args過去了,我打電話父保存方法與Parent::save($args);

任何幫助/輸入,將不勝感激。 PS:我在網上查了一下,C5論壇確實翻了一些我嘗試過的東西,主要是關於數據庫領域,但我仍然遇到了上述錯誤。如果可能,我不想覆蓋ADODB save()方法。

---編輯---

也許我看着這一切都錯了。讓我說我想達到的目標。我需要eID在塊的多個編輯中保持37(例如)。 BID可以增加AFAIC。

如何讓eID在編輯時保持37,但在創建新實例時增加1?合理?

第二個表引用eID字段,並且除非創建新實例,否則此表上的編輯實例必須具有相同的eID。 Sry - 我清楚地知道泥。

回答

0

你是說你在頁面上顯示一個塊的新實例,而不是現有的新版本?我認爲問題不在於表中插入了新記錄,因爲通常在編輯塊時創建新記錄。 C5保留塊的舊版本。

我所做的自定義塊從未要求調用父保存方法。您只需要一個編輯表單來收集數據並指定它所對應的數據庫字段,並且父級控制器在提交表單時知道如何處理它。

例如,如果你在所謂的「名字」正在更新塊表有一個文本字段,你會一行添加到您的edit.php文件是這樣的:

<?php echo $form->text('firstname', $firstname, array('style' => 'width: 320px'));?> 

我塊編輯器包含除此之外的其他內容,除html/CSS之外添加標籤並使窗體看起來更好。 $表單對象負責處理所有其他事情。

真正幫助我理解塊和塊控制器的一件事是下載並安裝「設計器內容」附加組件。免費。您可以使用它來構建一些自定義塊,然後查看它生成的代碼以執行各種功能。

+0

呀,好點。我知道C5在'save'上創建了新的塊實例,但是我需要eID字段從一個編輯到另一個編輯保持一致,除非創建了一個新實例,在這種情況下,eID應該增加1,是否合理?你有一個好點 - 雖然我從錯誤的角度看待這個:( – Jongosi

+0

eID的目的是什麼? – landollweb

+0

您是否使用它來標識塊類型的每個實例?如果是這樣的話,那麼我認爲在大多數情況下,你可能試圖進行一個比你真正需要的更細粒度的控制。 – landollweb