在NopCommerce中,我需要在HeaderLinks部分之外显示购物车,我应该在哪里添加新的控制器?

时间:2014-05-08 22:31:46

标签: nopcommerce

我需要在HeaderLinks partial之外显示购物车,该购物车将购物车物品从CommonController.HeaderLinks动作传递的模型中取出。通过创建一个带有传递购物车信息的操作的新控制器,我能够从我们的模板中获取自定义ui元素。现在,控制器在一个自定义插件中,我得到了其他一些东西。我看到它的方式我有两个选择:

  • 将控制器留在插件项目中,并考虑到如果由于某种原因没有安装插件(即从新开发人员那里重新结账),主题将会中断,可能会重定向用户到错误视图。

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

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

此致 何

1 个答案:

答案 0 :(得分:2)

我将告诉你解决它的捷径。首先创建一个部分(剃刀)视图,例如_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>
        }
    }

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