Subject: [PATCH] 69210: make the MaxSubCategoriesDepth manageable via CMS
 configuration parameter at "Main Navigation Category" component

- set MaxSubCategoriesDepth to '0' to disable the main navigation hover menu by default
---
 .../modules/category/CategoryNavigation.isml       | 14 ++++++++++----
 .../default/modules/category/Modules.isml          |  5 ++++-
 .../default/modules/category/SubCategories.isml    |  5 +++--
 ...mponent.system.mainnavigation.category.pagelet2 |  2 ++
 ...onent.system.mainnavigation.category.properties |  2 ++
 ...system.mainnavigation.category_de_DE.properties |  2 ++
 ...system.mainnavigation.category_fr_FR.properties |  2 ++
 .../component/system/MainNavigationCategory.isml   | 12 ++++++++++++
 8 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/CategoryNavigation.isml b/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/CategoryNavigation.isml
index 777cff5e1..94431a53c 100644
--- a/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/CategoryNavigation.isml
+++ b/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/CategoryNavigation.isml
@@ -5,6 +5,11 @@
 <isCurrentUserBO currentuserbo="UserBO">
 <isset name="SubCategoriesIterator" value="#CategoryBO:SortedAccessibleSubCatalogCategoryBOs(UserBO)#" scope="request">
 
+
+<isif condition="#NOT(isDefined(MaxSubCategoriesDepth))#">
+	<isset name="MaxSubCategoriesDepth" value="#0#" scope="request"/>
+</isif>
+
 <isif condition="#(CategoryBO:Accessible) AND (CategoryBO:VisibleInMenu)#">
 	<ISUUID name="RenderEntityID">
 	<ISRenderEntityRenderingStart RenderEntityRenderObject="#CategoryBO#" RenderEntityID="#RenderEntityID#">
@@ -16,18 +21,19 @@
 					<isprint value="#CategoryBO:DisplayName#">
 				</isif>
 			</a>
+			
 			<!--- Mobile Dropdown Anchor --->
-			<isif condition="#SubCategoriesIterator:isEmpty#">
-				<a class="dropdown-toggle visible-xs" data-toggle="dropdown"><span class="glyphicon" ></span></a>
+			<isif condition="#SubCategoriesIterator:isEmpty OR (MaxSubCategoriesDepth < 1)#">
+				<a class="dropdown-toggle visible-xs"><span class="glyphicon"></span></a>
 			<iselse/>
-				<a class="dropdown-toggle visible-xs" data-toggle="dropdown"><span class="glyphicon glyphicon-plus" ></span></a>
+				<a class="dropdown-toggle visible-xs" data-toggle="dropdown"><span class="glyphicon glyphicon-plus"></span></a>
 			</isif>
 
 			<ISSubCategories
 				CategoryBO="#CategoryBO#"
 				recursive="true"
 				subcategoriesdepth="#1#"
-				maxsubcategoriesdepth="#2#"
+				maxsubcategoriesdepth="#MaxSubCategoriesDepth#"
 			>
 		</li>
 	<ISRenderEntityRenderingEnd RenderEntityRenderObject="#CategoryBO#" RenderEntityID="#RenderEntityID#">
diff --git a/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/Modules.isml b/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/Modules.isml
index 8a928a1bb..0cd1a5205 100644
--- a/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/Modules.isml
+++ b/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/Modules.isml
@@ -100,9 +100,11 @@
 	Renders a categories navigation for a given category. 
 	Parameters:
 		- CategoryBO (required):
-			Category view opject of a Category (The key CategoryBO is used for the URL rewriting too!).
+			Category view object of a Category (The key CategoryBO is used for the URL rewriting too!).
 		- AlternateNavigationTitle (optional):
 			If given, the alternate navigation title is used for the navigation link instead of the categories display name.
+		- MaxSubCategoriesDepth (optional):
+			Defines how many sub categories are rendered.
 	Example:
 		<isCategoriesNavigation
 			CategoryBO="#CatalogBO:RootCatalogCategoryBO#">
@@ -112,6 +114,7 @@
 	strict="true"
 	attribute="CategoryBO"
 	attribute="AlternateNavigationTitle"
+	attribute="MaxSubCategoriesDepth"
 >
 
 <!--- 
diff --git a/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/SubCategories.isml b/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/SubCategories.isml
index be35f955e..61399c46b 100644
--- a/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/SubCategories.isml
+++ b/app_sf_responsive/staticfiles/cartridge/templates/default/modules/category/SubCategories.isml
@@ -2,7 +2,8 @@
 <iscachekey object="#CategoryBO#">
 <isCurrentUserBO currentuserbo="UserBO">
 <isset name="SubCategoriesIterator" value="#CategoryBO:SortedAccessibleSubCatalogCategoryBOs(UserBO)#" scope="request">
-<isif condition="#hasElements(SubCategoriesIterator)#">
+
+<isif condition="#(NOT(isDefined(maxsubcategoriesdepth)) OR (maxsubcategoriesdepth >= subcategoriesdepth)) AND hasElements(SubCategoriesIterator)#">
 	<ul class="category-level<isprint value="#subcategoriesdepth#" formatter="#"/> <isif condition="#subcategoriesdepth == 1#">dropdown-menu</isif>">
 		<isloop iterator="SubCategoriesIterator" alias="SubCategoryBO">
 			<iscachekey object="#SubCategoryBO#">
@@ -11,7 +12,7 @@
 					<a href="#URL(Action('ViewStandardCatalog-Browse'), Parameter('CatalogID', SubCategoryBO:CatalogBO:Name), Parameter('CategoryName', SubCategoryBO:Name))#" ><isprint value="#SubCategoryBO:DisplayName#"></a>
 					
 					<isif condition="#isDefined(recursive) AND (lcase(recursive) EQ 'true') AND 
-					((isDefined(maxsubcategoriesdepth) AND (subcategoriesdepth != maxsubcategoriesdepth)) OR (NOT(isDefined(maxsubcategoriesdepth))))#">
+					(NOT(isDefined(maxsubcategoriesdepth)) OR (subcategoriesdepth < maxsubcategoriesdepth))#">
 						<ISSubCategories
 							CategoryBO="#SubCategoryBO#"
 							recursive="#recursive#"
diff --git a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.pagelet2 b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.pagelet2
index 81ac3746c..cfa404dd3 100644
--- a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.pagelet2
+++ b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.pagelet2
@@ -6,6 +6,8 @@
         typeReference="bc_catalog:types.pagelet2-CategoryBO"/>
     <configurationParameterDefinitions name="AlternateNavigationTitle" optional="true"
         typeReference="bc_pmc:types.pagelet2-Text"/>
+    <configurationParameterDefinitions name="MaxSubCategoriesDepth" optional="true"
+        localizable="false" typeReference="bc_pmc:types.pagelet2-Text"/>
     <renderTemplate referencedName="component/system/MainNavigationCategory"/>
   </pageletDefinitions>
 </pagelet:PageletModel>
diff --git a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.properties b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.properties
index 4a81d2d02..96a17be9d 100644
--- a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.properties
+++ b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category.properties
@@ -7,4 +7,6 @@ ConfigurationParameter.Component.NavigationCategory.displayname=Navigation Categ
 ConfigurationParameter.Component.NavigationCategory.description=The root category for the navigation entry.
 ConfigurationParameter.Component.AlternateNavigationTitle.displayname=Alternate Navigation Title
 ConfigurationParameter.Component.AlternateNavigationTitle.description=An alternate navigation title for the navigation entry (instead of the selected categories name).
+ConfigurationParameter.Component.MaxSubCategoriesDepth.description=The maximum number of subcategories displayed in the main navigation area. A value of '0' disables the display of subcategories.
+ConfigurationParameter.Component.MaxSubCategoriesDepth.displayname=Maximum Subcategory Depth
 Pagelet.Component.image=component.system.mainnavigation.category.svg
diff --git a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_de_DE.properties b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_de_DE.properties
index 05dae292c..5a1cbf2ad 100644
--- a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_de_DE.properties
+++ b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_de_DE.properties
@@ -6,4 +6,6 @@ ConfigurationParameter.Component.NavigationCategory.displayname=Navigationskateg
 ConfigurationParameter.Component.NavigationCategory.description=Die Hauptkategorie (root) f\u00FCr den Navigationseintrag
 ConfigurationParameter.Component.AlternateNavigationTitle.displayname=Alternativer Navigationstitel
 ConfigurationParameter.Component.AlternateNavigationTitle.description=Ein alternativer Navigationstitel f\u00FCr den Navigationseintrag (anstelle des ausgew\u00E4hlten Kategorienamens).
+ConfigurationParameter.Component.MaxSubCategoriesDepth.description=Die maximale Anzahl der im Hauptnavigationsbereich angezeigten Unterkategorien. Mit dem Wert "0" wird die Anzeige von Unterkategorien deaktiviert.
+ConfigurationParameter.Component.MaxSubCategoriesDepth.displayname=Maximale Unterkategorientiefe
 Pagelet.Component.image=component.system.mainnavigation.category.svg
diff --git a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_fr_FR.properties b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_fr_FR.properties
index f1634e9c6..d35865e9b 100644
--- a/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_fr_FR.properties
+++ b/app_sf_responsive_cm/staticfiles/cartridge/pagelets/components/component.system.mainnavigation.category_fr_FR.properties
@@ -6,4 +6,6 @@ ConfigurationParameter.Component.NavigationCategory.displayname=Navigation de la
 ConfigurationParameter.Component.NavigationCategory.description=La cat\u00E9gorie fondamentale de l\u2019entr\u00E9e de la navigation.
 ConfigurationParameter.Component.AlternateNavigationTitle.displayname=Titre alternatif de la navigation
 ConfigurationParameter.Component.AlternateNavigationTitle.description=Un titre de navigation alternatif pour l\u2019entr\u00E9e de la navigation (au lieu du nom des cat\u00E9gories s\u00E9lectionn\u00E9es).
+ConfigurationParameter.Component.MaxSubCategoriesDepth.description=Le nombre maximum de sous-cat\u00E9gories affich\u00E9es dans la zone de navigation principale. Une valeur de \u00AB 0 \u00BB d\u00E9sactive l'affichage des sous-cat\u00E9gories.
+ConfigurationParameter.Component.MaxSubCategoriesDepth.displayname=Profondeur maximale des sous-cat\u00E9gories
 Pagelet.Component.image=component.system.mainnavigation.category.svg
diff --git a/app_sf_responsive_cm/staticfiles/cartridge/templates/default/component/system/MainNavigationCategory.isml b/app_sf_responsive_cm/staticfiles/cartridge/templates/default/component/system/MainNavigationCategory.isml
index 3dbf03080..0678c160b 100644
--- a/app_sf_responsive_cm/staticfiles/cartridge/templates/default/component/system/MainNavigationCategory.isml
+++ b/app_sf_responsive_cm/staticfiles/cartridge/templates/default/component/system/MainNavigationCategory.isml
@@ -1,6 +1,18 @@
 <iscontent type="text/html" charset="UTF-8" compact="true">
 <isinclude template="modules/category/Modules">
+
+<isif condition="#isDefined(PageletConfigurationParameters:MaxSubCategoriesDepth)#">
+	<%
+		try
+		{
+			getPipelineDictionary().put("MaxSubCategoriesDepth", Integer.parseInt((String)getObject("PageletConfigurationParameters:MaxSubCategoriesDepth")));
+		}
+		catch (NumberFormatException e) {}
+	%>
+</isif>
+
 <isCategoryNavigation
 	CategoryBO="#PageletConfigurationParameters:NavigationCategory#"
 	AlternateNavigationTitle="#PageletConfigurationParameters:AlternateNavigationTitle#"
+	MaxSubCategoriesDepth="#MaxSubCategoriesDepth#"
 >
\ No newline at end of file
-- 
2.30.1.windows.1

