【问题标题】:In NopCommerce I need to display the shopping cart outside of the the HeaderLinks partial, where should I add a new controller?在 NopCommerce 中,我需要在 HeaderLinks 部分之外显示购物车,我应该在哪里添加新控制器?
【发布时间】:2014-06-26 13:12:24
【问题描述】:

我需要在 HeaderLinks 部分之外显示购物车,这会将购物车项目从 CommonController.HeaderLinks 操作传递的模型中取出。通过创建一个带有传递购物车信息的操作的新控制器,我能够从我们的模板中获取自定义 ui 元素。现在控制器在一个自定义插件中,我正在寻找其他东西。在我看来,我有两个选择:

  • 将控制器留在插件项目中,并接受这样一个事实,即如果由于某种原因未安装插件(即从新开发人员处重新签出),主题将会中断,可能会重定向用户到错误视图。

  • 将控制器放在 Nop.Web 的 Controllers 文件夹中,缺点是这会在升级 NopCommerce 的过程中增加一个额外的步骤。如果出现类似问题,这可能会很快变得很糟糕。

所以我的问题是:放置控制器的最佳位置在哪里?或者有没有更简单的方法来用购物车做这件事?

问候, 何塞

【问题讨论】:

  • 您只想获取购物车中的商品吗?

标签: nopcommerce


【解决方案1】:

我将向您展示解决问题的捷径。首先创建一个局部(剃刀)视图,例如_CustomPartialView,然后在局部视图的顶部添加这些使用

@using Nop.Core;
@using Nop.Core.Infrastructure;
@using Nop.Services.Orders;

接下来是查询购物车,这很容易,因为 nopCommerce 已经拥有访问依赖解析器方法的静态方式,即EngineContext.Current.Resolve<T>()。在您的情况下(对于购物车),可能是以下情况;

@{
        var shoppingCartEnabled = EngineContext.Current.Resolve<Nop.Services.Security.IPermissionService>()
            .Authorize(Nop.Services.Security.StandardPermissionProvider.EnableShoppingCart);
        var customer = EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer;

        int shoppingCartItems = 0;
        if (customer.HasShoppingCartItems)
        {
            shoppingCartItems = customer.ShoppingCartItems
                .Where(sci => sci.ShoppingCartType == Nop.Core.Domain.Orders.ShoppingCartType.ShoppingCart)
                .LimitPerStore(EngineContext.Current.Resolve<IStoreContext>().CurrentStore.Id)
                .ToList()
                .GetTotalProducts();
        }
        if (shoppingCartEnabled)
        {
            <div class="header-right pull-right wrap-cart hidden-xs ">
                <div class="cart-top pull-right">
                    <div id="cart">
                        <span class="icon fa fa-shopping-cart"></span>
                        <div class="heading">
                            <a href="@Url.RouteUrl("ShoppingCart")" class="ico-cart dropdown-toggle visible-md visible-lg" data-toggle="dropdown" data-hover="dropdown">
                                <h4 class="cart-label">
                                    @T("ShoppingCart")
                                    <span>@T("ShoppingCart.HeaderQuantity", shoppingCartItems)</span>
                                </h4>
                            </a>
                        </div>
                        <div class="content">
                            @if (!String.IsNullOrWhiteSpace(Html.Action("FlyoutShoppingCart", "ShoppingCart").ToString()))
                            {
                                <li>@Html.Action("FlyoutShoppingCart", "ShoppingCart")</li>
                            }
                        </div>

                    </div>
                </div>
            </div>
        }
    }

如果您需要更多帮助,请告诉我 :)

【讨论】:

    猜你喜欢
    • 2015-09-26
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多