2014-12-22 57 views
0

我有一個TYPO3後端模塊列出了很多元素。現在,我想在我的列表中添加編輯表單,但目前效果並不理想。TYPO3合併列表和編輯

渲染是好的,但如果我發送的形式,我得到的錯誤:

Required argument "note" is not set.

我的代碼如下所示:

<f:for each="{notes}" as="note"> 
    <f:form action="update" name="note" object="{note}"> 
    <textarea class="form-control gettooltip" rows="1" placeholder="Kommentar" title="Kommentar zur Note">{note.kommentar}</textarea> 
    </f:form> 
</f:for> 

我怎樣才能正確合併這兩種觀點?

+1

想知道爲什麼你不想使用TYPO3的表單來編輯記錄? – biesior

回答

2

您的代碼無法工作,因爲您的textarea沒有屬性(或者您沒有使用<f:form.textarea ViewHelper)。

如果您在您的控制器中使用屬性映射$ note,則必須將該屬性傳遞給具有前綴擴展名和插件名稱的Fluid。這是在使用textarea ViewHelper的「property」參數時自動完成的。名稱屬性將是:

<textarea name="tx_myext_myplugin[note]"... 

Thîs將映射到控制器中的$ note。

因此,如果您不使用ViewHelper,則需要手動爲name屬性添加前綴以創建類似上面所打印的輸出。

如果您打算在一個請求中更新同一種類的多個對象,這不會因爲存在Extbase限制。

你可以做到以下幾點:

使用AJAX,通過對每一個音符提交按鈕,保存/加載的變化。

<f:for each="{notes}" as="note"> 
    <f:form action="update" name="note" object="{note}"> 
    <f:form.textarea class="form-control gettooltip" placeholder="Kommentar" property="kommentar">{note.kommentar}</f:form.textarea> 
    <f:form.submit value="Update" /> 
    </f:form> 
</f:for> 

然後你攔截提交的點擊,通過AJAX提交表單,並設置新的內容到文本區域。

如果你想對所有對象的一個​​形式,你將需要前綴領域

<f:form action="update" name="note"> 
    <f:for each="{notes}" as="note"> 
    <f:form.textarea class="form-control gettooltip" placeholder="Kommentar" name="note[note{note.uid}][kommentar]">{note.kommentar}</f:form.textarea> 
    </f:for> 
    <f:form.submit value="Update" /> 
</f:form> 

然後,您將有值的數組,需要在控制器遍歷並手動持續的變化。

+0

我有每個注意單獨的形式。並只發送一個表單一個音符。用這個js代碼。 ('。'note.id')。val(); var('''')。 $('#editnote'+ uid).submit();' JS是正確的,它只選擇選定的表單。 – Felix

+0

我調整了我的答案,也許這有助於。 – lorenz

1

您的問題 - 正如@lorenz回答您需要使用viewhelpers呈現的字段或至少使用有效name屬性爲您的領域...

無論如何,我想知道你爲什麼要重新發明輪子 - 特別是在創建BE模塊時,最快,最簡單和最優雅的方式是......使用TYPO3形式。他們處理很多事情,關係,本地化,驗證,RTE等等。還有,你還可以爲TCA添加自己的字段類型,並用你自己的PHP和JS進行處理 - 非常罕見的情況,但可以使用添加GoogleMap的領域,
@see:user type in TCA

最後,所有你需要從你的BE模塊打開記錄被創造適當的鏈接 - 這可以從列表模塊容易被複制(右鍵點擊黃色鉛筆旁邊的記錄和複製代碼),樣品:

<a href="#" onclick="window.location.href='alt_doc.php?returnUrl='+T3_THIS_LOCATION+'&amp;edit[fe_users][1234]=edit'; return false;" title="Edit user"> 
    <span title="" class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-open">&nbsp;</span> 
</a> 

哪裏fe_users是表名,1234是記錄UID。

alt_doc.php?returnUrl='+T3_THIS_LOCATION部分句柄返回到編輯開始的地方,所以它將成爲您的模塊,再次包括管理員在編輯之前選擇的所有GET參數。

用於創建新用戶

<a href="#" onclick="window.location.href='alt_doc.php?returnUrl='+T3_THIS_LOCATION+'&amp;edit[fe_users][6789]=new'; return false;" title="New record"> 
    <span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new">&nbsp;</span> 
</a> 

在這種情況下6789是PID(用戶應創建頁面的UID ...

創造記錄時,你甚至可以設置一些默認值使用PARAMS在新的鏈接自己的模塊:

&defVals[table_name][field_name]=value

樣品

<a href="#" onclick="window.location.href='alt_doc.php?returnUrl='+T3_THIS_LOCATION+'&amp;edit[fe_users][6789]=new&defVals[fe_users][tx_extbase_type]=Tx_MyExt_People&defVals[fe_users][usergroup]=1'; return false;" title="New record"> 
    <span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new">&nbsp;</span> 
</a>