【问题标题】:Show all categories and subcategories on a nopcommerce 3.0 website?在 nopcommerce 3.0 网站上显示所有类别和子类别?
【发布时间】:2013-07-17 16:29:25
【问题描述】:

我想知道是否有人知道如何修改代码以使左侧导航菜单显示除主页、类别、搜索和产品页面上的类别之外的所有子类别?

我只需要朝着正确的方向前进。代码很复杂,但我可以说它组织得很好。

【问题讨论】:

    标签: c# nopcommerce


    【解决方案1】:

    nopCommerce 执行延迟加载以获取类别的子类别。

    要在菜单加载期间进行加载,需要获取所有类别的所有子类别。

    获取这些子类别后,需要将这些数据存储在缓存中以提高网站的性能。

    【讨论】:

      【解决方案2】:

      NopCommerce 为 3.x 做出了奇怪的决定,即仅加载活动类别的子类别并为每个单独的类别制作单独的缓存。此举的原因是通过防止通过单个请求从数据库加载数千个类别来提高性能。这对于说数百个类别当然没有多大意义,它实际上会使浏览商店的缓存过期。

      加载所有类别修复

      要加载包括子类别在内的所有类别,您必须在第 218 行附近的 \Presentation\Nop.Web\Controllers\CatalogController.cs 中更改方法 PrepareCategoryNavigationModel

      for (int i = 0; i <= breadCrumbIds.Count - 1; i++)
      if (breadCrumbIds[i] == category.Id)
      categoryModel.SubCategories.AddRange(PrepareCategoryNavigationModel(category.Id, breadCrumbIds));
      

      只是

      categoryModel.SubCategories.AddRange(PrepareCategoryNavigationModel(category.Id, breadCrumbIds));
      

      单一导航缓存修复

      要制作单个导航缓存而不是为每个单个活动类别制作相同的缓存,请在第 1157 行附近进行更改

      string cacheKey = string.Format(
          ModelCacheEventConsumer.CATEGORY_NAVIGATION_MODEL_KEY,
          _workContext.WorkingLanguage.Id,
          string.Join(",", customerRolesIds),
          _storeContext.CurrentStore.Id, 
          activeCategoryId);
      

      string cacheKey = string.Format(
          ModelCacheEventConsumer.CATEGORY_NAVIGATION_MODEL_KEY,
          _workContext.WorkingLanguage.Id,
          string.Join(",", customerRolesIds),
          _storeContext.CurrentStore.Id, 
          0);
      

      var breadCrumb = activeCategory != null ?
          activeCategory.GetCategoryBreadCrumb(categoryService, aclService, storeMappingService).Select(x => x.Id).ToList() : new List<int>();
      

      var breadCrumb = new List<int>();
      

      注意:防更新方法

      为了在更新 NopCommerce 时保持更改,您可以将 CatalogController.cs/CategoryNavigation 复制为插件中的新控制器。然后更改主题中的视图_ColumnsTwo、_ColumnsThree 以使用这个新控制器。或者告诉 NopCommerce 添加设置以在两种方法之间切换:-P。

      【讨论】:

        猜你喜欢
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多