Coldfusion需要帮助父/子动态菜单

Coldfusion需要帮助父/子动态菜单,coldfusion,navigation,Coldfusion,Navigation,基本上,我想让每个子菜单只显示在父菜单ID上。但到目前为止,我所能得到的是所有的子李连接到我设置的任何父菜单 下面是一个图表,用于解释菜单当前的显示方式: 家 关于>就业和移动我只想显示就业 服务>就业和手机我只想手机显示 接触 因此,查询从数据库输出以下变量 pg_链接名称 pg_MenuTitle pg_ParentMenu父菜单的名称, pg_菜单键入是/否,说明它是否为父菜单/子菜单, pg_子菜单a是/否,用于指定菜单是否为父菜单 我想知道是否有一种方法可以将孩子动态地连接到父母。如果

基本上,我想让每个子菜单只显示在父菜单ID上。但到目前为止,我所能得到的是所有的子李连接到我设置的任何父菜单

下面是一个图表,用于解释菜单当前的显示方式:

关于>就业和移动我只想显示就业

服务>就业和手机我只想手机显示

接触

因此,查询从数据库输出以下变量

pg_链接名称 pg_MenuTitle pg_ParentMenu父菜单的名称, pg_菜单键入是/否,说明它是否为父菜单/子菜单, pg_子菜单a是/否,用于指定菜单是否为父菜单 我想知道是否有一种方法可以将孩子动态地连接到父母。如果我选择将页面附加到父级,它只会在下拉列表中显示在该父级上

以下是我的疑问:

<cfquery name="qry_GetMenu" datasource="#request.dsn#"> 
    SELECT *
    FROM tbl_pages 
    WHERE pg_MenuType = TRUE AND pg_Display = TRUE AND pg_AutoMenu = TRUE AND pg_Horiz_VertMenu = TRUE
    ORDER BY pg_sort
</cfquery>

<cfquery name="qry_GetSubMenus" datasource="#request.dsn#"> 
    SELECT *
    FROM tbl_pages 
    WHERE pg_MenuType = FALSE 
    ORDER BY pg_sort
</cfquery>

<cfquery name="qry_SubMenu" datasource="#request.dsn#"> 
    SELECT *
    FROM tbl_pages
    WHERE pg_SubMenu = TRUE
    ORDER BY pg_sort
</cfquery>
这是我的菜单:

<ul class="menu">     
    <cfoutput query="qry_GetMenu">
        <li <cfif cgi.path_info contains "#pg_LinkName#"> class="current-menu-parent"</cfif>>
        <a href="#systemurl#/index.cfm/#pg_LinkName#/">#pg_MenuTitle#</a>
        <cfif pg_SubMenu gt 0>
            <ul class="sub-menu">
                <cfloop query="qry_GetSubMenus">
                    <li><a href="#systemurl#/index.cfm/#pg_ParentMenu#/#pg_LinkName#/">#pg_MenuTitle#</a></li>
                </cfloop>
            </ul>
        </cfif>
        </li>
    </cfoutput>
</ul>

如果我理解正确,您只想在相应的父项下显示指定的子项,而您的代码当前正在显示每个父项下的子元素

使用当前代码,您需要将其中一个查询按行移动

<ul class="menu">     
<cfoutput query="qry_GetMenu">
    <li <cfif cgi.path_info contains "#pg_LinkName#"> class="current-menu-parent"</cfif>>
    <a href="#systemurl#/index.cfm/#pg_LinkName#/">#pg_MenuTitle#</a>
    <cfif pg_SubMenu gt 0>
        <ul class="sub-menu">
        <!---moved inline to add additional conditional pg_ParentMenu clause--->
        <cfquery name="qry_GetSubMenus" datasource="#request.dsn#">  
            SELECT * FROM q WHERE pg_MenuType = 0 AND pg_ParentMenu = '#pg_ParentMenu#'
        </cfquery>
            <cfloop query="qry_GetSubMenus">
                <li><a href="#systemurl#/index.cfm/#pg_ParentMenu#/#pg_LinkName#/">#pg_MenuTitle#</a></li>
            </cfloop>
        </ul>
    </cfif>
    </li>
</cfoutput>
这将允许查询被专门过滤到当前父菜单,而不是所有父菜单。如果是一个庞大的数据集,这将变得非常低效。 在这一点上有很多选项执行循环并分配给另一个对象,比如一个结构数组,其中包含父级和子级的键,子级是另一个数组,或者重新处理数据库以使子菜单关系化,等等


希望这是朝着正确的方向发展。

你能对你的查询说得清楚一点吗……只是更新了一些信息,希望它能更清楚一点!其中RU结束ur循环并更新代码..正确动态地向每个菜单添加..类,并使用jquery显示每个链接的菜单相关数据扫描输出范围?如果没有适当的范围,几乎不可能阅读。谢谢,这很有效!我不得不改变一些变量,但我做到了!