gpt4 book ai didi

coldfusion - Fusebox 4/5 中的面包屑

转载 作者:行者123 更新时间:2023-12-03 12:20:55 28 4
gpt4 key购买 nike

我想知道是否有人提出了一种在 Fusebox 中生成面包屑路径的简洁方法。具体来说,有没有一种方法可以跟踪“你在哪里”并以某种方式为你生成面包屑?因此,例如,如果您正在执行

 /index.cfm?fuseaction=Widgets.ViewWidget&widget=1

电路结构类似于/foo/bar/widgets/ 然后系统会以某种方式自动创建一个数组,如下所示:

[
{ title: 'Foo', url: '#self#?fuseaction=Foo.Main' },
{ title: 'Bar', url: '#self#?fuseaction=Bar.Main' },
{ title: 'Widgets', url: '#self#?fuseaction=Widgets.Main' },
{ title: 'Awesome Widget', url: '' }
]

然后可以呈现为

Foo > Bar > Widgets > 很棒的小部件

现在看来,真正做到这一点的唯一方法是在某种 fuse (显示 fuse 或专用于创建碎屑轨迹的 fuse )中为每个 fuse Action 创建结构。

最佳答案

我使用 Fusebox 很长时间了,但仍然无法理解这部分:

circuit structure is something like /foo/bar/widgets/

无论如何,一旦我的想法是为每个 Controller fuseaction 使用名为“parent”(或任何东西)的自定义词典,您可以在其中放置上一级 fuseaction 的名称。

但据我所知,此方法仅适用于使用 XML 样式的电路,在这种情况下您始终可以从全局容器中获取任何融合信息——所以我没有成功,因为大量使用了 no-XMl 样式.

编辑:带有词典的示例

这仅适用于Fusebox 5 traditional

假设我们创建了以下词典定义 /lexicon/bc/parent.cfm:

<cfscript>
if (fb_.verbInfo.executionMode is "start") {
// validate fb_.verbInfo.attributes contents
if (not structKeyExists(fb_.verbInfo.attributes,"value")) {
fb_throw("fusebox.badGrammar.requiredAttributeMissing",
"Required attribute is missing",
"The attribute 'value' is required, for a 'parent' verb in fuseaction #fb_.verbInfo.circuit#.#fb_.verbInfo.fuseaction#.");
}
// compile start tag CFML code
circuit = fb_.verbInfo.action.getCircuit().getName();
fa = fb_.verbInfo.action.getCircuit().getFuseactions();
fa[#fb_.verbInfo.fuseaction#].parent = circuit & "." & fb_.verbInfo.attributes.value;
} else {
// compile end tag CFML code
}
</cfscript>

基本上这是专门为词典 parent 复制粘贴的标准词典标签。

假设我们使用的是 Fusebox 5 框架示例,contoller 可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE circuit>
<circuit access="public" xmlns:bc="bc/">

<postfuseaction>
<do action="layout.mainLayout" />
</postfuseaction>

<fuseaction name="welcome" bc:parent="">
<do action="time.getTime" />
<do action="display.sayHello" />
</fuseaction>

<fuseaction name="widgets" bc:parent="app.welcome">
<do action="display.showWidgets" />
</fuseaction>

<fuseaction name="widget" bc:parent="app.widgets">
<do action="display.showWidget" />
</fuseaction>

</circuit>

它显示了词典如何用于每个融合 Action 。请注意,如果您不定义属性 bc:parent,它将不会出现在以后的自定义属性结构中。

可以只使用 fuseaction 名称作为父级,如果所有链都在同一个电路中,以后使用起来会更容易。

最后,一些快速代码来构建这些东西。请查看评论,它们应该很有帮助。

<!--- path data container with current fuseaction saved --->
<cfset arrBreadcrumbs = [] />
<cfset ArrayAppend(arrBreadcrumbs, attributes.fuseaction) />

<!--- pull the current circuit fuseactions --->
<cfset fuseactions = myFusebox.getApplication().circuits[ListFirst(attributes.fuseaction,'.')].getFuseactions() />
<!--- OR <cfset fuseactions = application.fusebox.circuits[ListFirst(attributes.fuseaction,'.')].getFuseactions()> --->

<!--- pull the current fuseaction custom attributes --->
<cfset fa = ListLast(attributes.fuseaction,'.') />
<cfset customAttributes = fuseactions[fa].getCustomAttributes('bc') />

<!--- save the parent fuseaction name if present -- KEY CHECK IS RECOMMENDED --->
<cfif StructKeyExists(customAttributes, "parent")>
<cfset ArrayPrepend(arrBreadcrumbs, customAttributes.parent) />
</cfif>


<!--- let's say we know that parent is there... --->

<!--- pull the found fuseaction custom attributes --->
<cfset fa = ListLast(customAttributes.parent,'.') />
<cfset customAttributes = fuseactions[fa].getCustomAttributes('bc') />

<!--- save the parent fuseaction name if present --->
<cfif StructKeyExists(customAttributes, "parent")>
<cfset ArrayPrepend(arrBreadcrumbs, customAttributes.parent) />
</cfif>


<!--- render the collected path --->
<cfoutput>
<cfloop index="crumb" from="1" to="#ArrayLen(arrBreadcrumbs)#">

<!--- to have a nice labels you can use another lexicon --->
<a href="#myself##arrBreadcrumbs[crumb]#">#arrBreadcrumbs[crumb]#</a> <cfif crumb LT ArrayLen(arrBreadcrumbs)>&gt;</cfif>

</cfloop>
</cfoutput>

所以输出应该是这样的:app.welcome > app.widgets > app.widget

关于coldfusion - Fusebox 4/5 中的面包屑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828578/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com