我有使用Kentico表單構建器構建的自定義表單。在我的表單中,我通過外鍵引用了一個自定義表...這意味着我的表單存儲了對我的自定義表數據的引用。在我的自動回覆中,有什麼方法可以使用我的表單中的id值從我的自定義表中檢索實際值?在表單構建器自動響應器中查詢自定義表格
3
A
回答
3
您可以通過creating a custom macro做到這一點,它接受FK值作爲參數,查找自定義表中的相應記錄,並將該記錄中的字段作爲字符串返回。然後,您只需在自動回覆編輯器中使用宏 - 與您在其他地方所用的相同 - 並傳入$$標籤:FieldName $$作爲參數。
其中最難的部分是使用Kentico的API從定製表中獲取數據。 Here are some examples for managing custom table data using their API。這不是那麼難,只需要多一點代碼就可以了。
就我個人而言,我更喜歡爲我的自定義表創建實體或LINQtoSQL類,並使用它們,特別是如果它是我將要使用的很多表。唯一真正失去的是對其他CMS功能的內置調用,比如更新智能搜索索引,我認爲將事件記錄到登臺模塊中,如果需要,以後都可以添加到這兩個模塊中。
1
傑瑞克是正確的,你可以用自定義宏來做到這一點。
如果您打算製作自定義宏,我建議您將自定義宏設置爲可重用,並將其傳遞給其他幾個參數。例如;
customTableItemID = 231;
customTableCodeName = "customtable.TableName";
customTableReturnColumnName = "DisplayName";
至少這樣你可以重新使用其他自定義表格相同的自定義宏,並從表中返回不同的領域。
假設您使用的是Kentico v8,以下代碼適用於我;
CustomMacroMethods.cs
using System;
using CMS.Base;
using CMS.MacroEngine;
using CMS.Helpers;
using CMS.CustomTables;
//declare CustomMacroNamespace
[Extension(typeof(CustomMacroMethods))]
public class CustomMacroNamespace : MacroNamespace<CustomMacroNamespace>
{
}
//register CustomMacroNamespace into the macro engine
[MacroNamespaceLoader]
public partial class CMSModuleLoader
{
/// <summary>
/// Attribute class that ensures the registration of custom macro namespaces.
/// </summary>
private class MacroNamespaceLoaderAttribute : CMSLoaderAttribute
{
/// <summary>
/// Called automatically when the application starts.
/// </summary>
public override void Init()
{
// Registers "CustomNamespace" into the macro engine
MacroContext.GlobalResolver.SetNamedSourceData("CustomMacroNamespace", CustomMacroNamespace.Instance);
}
}
}
//declare custom macro methods
public class CustomMacroMethods : MacroMethodContainer
{
[MacroMethod(typeof(object), "Returns the Value of a Column in a Custom Table as an object.", 3)]
[MacroMethodParam(0, "CustomTableCodeName", typeof(string), "The Custom Table code name. Eg customtable.TableName")]
[MacroMethodParam(1, "CustomTableItemID", typeof(int), "The ID of the to return.")]
[MacroMethodParam(2, "CustomTableReturnColumnName", typeof(string), "The field name of the column containing the value to return")]
public static object GetCustomTableValue(EvaluationContext context, params object[] parameters)
{
if (parameters.Length == 3)
{
string customTableCodeName = ValidationHelper.GetString(parameters[0], "");
int customTableID = ValidationHelper.GetInteger(parameters[1], -1);
string customTableReturnFieldName = ValidationHelper.GetString(parameters[2], "");
CustomTableItem cti = CustomTableItemProvider.GetItem(customTableID, customTableCodeName);
if (cti != null)
{
return cti.GetValue(customTableReturnFieldName);
}
else
{
return null;
}
}
else
{
throw new NotSupportedException("Custom macro GetCustomTableValue() requires three parameters");
}
}
}
使用
{% CustomMacroNamespace.GetCustomTableValue("customtable.TableName", 1, "DisplayName") #%}
請參考更多信息的文檔。 https://docs.kentico.com/display/K8/Registering+custom+macro+methods https://docs.kentico.com/display/K8/Creating+macro+namespaces
相關問題
- 1. 在Django中構建自定義查詢過濾器列表
- 2. 構建自定義查詢
- 3. WordPress中的自定義表格查詢
- 4. 從控制器類自定義UIButton自定義表格單元
- 5. 在Google電子表格中構建自定義多級菜單
- 6. 表單構建器中數據庫實體的自定義表單元素
- 7. PHP表單自動響應
- 8. Symfony表單實體集合自定義對象構建器
- 9. 設計和幫助自定義表單構建器
- 10. SQL - 查詢來創建自定義表
- 11. 自定義表單元格滾動
- 12. Laravel查詢生成器 - 自定義響應
- 13. 在WPF中創建自定義表單?
- 14. 在Joomla中創建自定義表單
- 15. 動態加載表格中的自定義表格單元
- 16. 爲多對多實體使用自定義查詢構建器
- 17. 自定義ASP.NET容器控件表格
- 18. 的WordPress:含有表格和自定義表的查詢自定義模板
- 19. 在cellForRowAtIndexPath中創建自定義的UITableView表格單元格
- 20. 在自定義表格中刷新單元格查看
- 21. Drupal 7表單API - 自定義自動填充過濾器
- 22. 自動安裝Outlook自定義表格
- 23. 自定義驗證器中的查詢
- 24. WSO2 API管理器 - 如何在自定義介體中構建Http響應
- 25. 無效的自定義表格單元格渲染器
- 26. JavaFX的拾色器自定義顏色表格單元格
- 27. 響應式構建 - 在自定義地圖上定位自定義標記
- 28. 自定義查詢排序表中ActiveAdmin
- 29. 從WCF架構驗證器中拋出自定義響應
- 30. 自定義表格單元格問題
而不是使用實體或LINQ,你可能會看自定義表的代碼選項卡上由Kentico自動生成的代碼。您不僅失去了CMS功能,而且還失去了內置緩存。恕我直言,使用API是一種更好的方法,因爲您可以擁有隨之而來的所有其他好處。雖然用自定義宏方法很好的答案。 –
@BrendenKehren我同意,堅持API。 Jerreck很好的回答:自定義宏,我提供了一些代碼來演示該解決方案。 –