当creating/registering a custom macro针对TreeNode
参数(CurrentDocument)时,可以/应该定位哪个宏命名空间,以便用户在针对TreeNode
编写宏表达式时可以访问命名空间的成员对象
documentation提供了StringNamespace
和SystemNamespace
等示例,应该用于TreeNode
个对象的内容?
自定义宏以以下方式注册。它需要TreeNode
的参数,理想情况下,它将与网页部件中的{% CurrentDocument.Foobar() %}
等中缀表示法一起使用。
[assembly: RegisterExtension(typeof(MacroMethods), typeof(TreeNode))]
public class MacroMethods : MacroMethodContainer
{
[MacroMethod(typeof(string), "Generates a string.", 1)]
[MacroMethodParam(0, "CurrentDocument", typeof(TreeNode), "The current rendered document.")]
public static object Foobar(EvaluationContext context, params object[] parameters)
{
// ...
}
感谢您提供任何帮助。
答案 0 :(得分:0)
您可能不必将CurrentDocument作为参数传递。您可以使用CMS.DocumentEngine.DocumentContext.CurrentDocument
答案 1 :(得分:0)
我担心这是不可能的,因为你需要扩展TreeNode
类本身。我也在查看源代码,DocumentContext
的注册方式与自定义宏方法/名称空间/属性不同。它没有使用MacroMethodContainer
,而是使用AbstractContext
,如果没有源代码则无法扩展{% MyCoolMacros.Foobar() %}
。
然而,即使这是可能的,我强烈建议不要这样做。将自定义代码与Kentico代码混合在一起是违反最佳做法的。我建议做的是创建一个自定义宏命名空间&将所有方法/属性放在那里。
最后,您可以调用所有宏,例如:
>>> from collections import defaultdict
>>> lookup = defaultdict(lambda: 'STRING', int='INTEGER')
>>> lookup['int']
'INTEGER'
>>> lookup['char']
'STRING'
>>> lookup['varchar']
'STRING'