nopcommerce里面的@Html.Widget("home_page_top") 是什么?

很多朋友在修改模板的时候看到很多类似@Html.Widget("xxx")的东西,这里简单介绍一下流程:

比如@Html.Widget("home_page_top"),首先要知道Html.Widget是什么,这是Html的一个扩展方法,位于Nop.Web.Framework\HtmlExtensions.cs


public static MvcHtmlString Widget(this HtmlHelper helper, string widgetZone)
{
return helper.Action("WidgetsByZone", "Widget", new { widgetZone = widgetZone });
}

可以看到这里面调用的是action,找到WidgetController下面的WidgetsByZone,这是一个child
action(不懂的百度一下),读一下代码,就能了解这个方法就是通过反射获取到实现接口IWidgetPlugin并且GetWidgetZones()包含home_page_top的插件的列表,然后创建一个model传递给试图:


[ChildActionOnly]
public ActionResult WidgetsByZone(string widgetZone)
{
//model
var model = new List<RenderWidgetModel>();

var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone, _storeContext.CurrentStore.Id);
foreach (var widget in widgets)
{
var widgetModel = new RenderWidgetModel();

string actionName;
string controllerName;
RouteValueDictionary routeValues;
widget.GetDisplayWidgetRoute(widgetZone, out actionName, out controllerName, out routeValues);
widgetModel.ActionName = actionName;
widgetModel.ControllerName = controllerName;
widgetModel.RouteValues = routeValues;

model.Add(widgetModel);
}

return PartialView(model);
}

打开试图Widget\WidgetsByZone.cshtml:


@model List<RenderWidgetModel>
@using Nop.Web.Models.Cms;
@foreach (var widget in Model)
{
@Html.Action(widget.ActionName, widget.ControllerName, widget.RouteValues)
}

这个试图的目的就是循环输出html,具体输出的内容在插件里面实现的,比如插件Nop.Plugin.Widgets.NivoSlider里面有个NivoSliderPlugin,这类插件必须继承自BasePlugin,和IWidgetPlugin,里面的方法GetDisplayWidgetRoute就是用于返回显示这个插件内容的action的信息,WidgetsNivoSliderController.cs里面的public
ActionResult PublicInfo(string
widgetZone)就是这个插件具体输出的内容,大体流程就是这样了。

分享是一种美。版权所有,转载请注明出处 http://www.nopchina.net/

时间: 2024-10-13 16:59:33

nopcommerce里面的@Html.Widget("home_page_top") 是什么?的相关文章

关于NOP的@Html.Widget(“home_page_top”)的说明

以首页幻灯片为例子,首页幻灯片是在插件Nop.Plugin.Widgets.NivoSlider里面实现的 首页视图位置 这里其实是加载插件里面的视图内容,具体实现在插件实现 这个是扩展方法,就是执行Nop.Web 下面的WidgetController控制器里面的子动作WidgetsByZone 这个WidgetByZone就是查找当前已使用的@Html.Widget(“xxx”)并返回相应的控制器名字,方法名和路由值 Widget控制器位置 LoadActiveWidgetsByWidget

[转]nopCommerce Widgets and How to Create One

本文转自:https://dzone.com/articles/what-are-nopcommerce-widgets-and-how-to-create-one A widget is a stand-alone application that can be embedded into third party sites by any user on a page. It's a small application that can be installed and executed wi

NopCommerce Html扩展方法Html.Widget

在Nop中有一个Html扩展的类叫HtmlExtensions,主要源码: public static class HtmlExtensions { #region Admin area extensions public static MvcHtmlString Hint(this HtmlHelper helper, string value) { // Create tag builder var builder = new TagBuilder("img"); // Add a

nopcommerce的WidgetZones

Hi, Having just started developing nopCommerce (and having forked out for the User Guide, which is rather optimistically described as "is the definitive guide to installing, configuring, building, maintaining an e-commerce site using the nopCommerce&

nopcommerce商城系统--如何编写一个插件

原址:http://www.nopcommerce.com/docs/77/how-to-write-a-nopcommerce-plugin.aspx plug-in (或 plugin)是一个为更大的软件应用程序添加特定的能力的组件(Wikipedia) 插件是用来扩展nopCommerce功能的.nopCommerce拥有多种类型的插件.例如:支付方式(PayPal),税务机构,送货方式计算方法(UPS, USP, FedEx),小部件(如"在线聊天"块)等等. nopComme

NopCommerce 框架系列(二)

这一篇,让我们一起来认识一下 NopCommerce 的整体目录结构 1. Libraries 文件夹目录: (1)Nop.Core:核心库,包含了大量可重用代码,和系统业务无关,可以单独抽取出来,放到其他项目中也可使用.里面包含了依赖注入组件,Cache,业务对象等内容 (2)Nop.Data:包含一系列的数据访问类和方法以从数据库或其他数据媒介读取和保存数据.它也有助于把数据访问逻辑和你的业务对象分离.nopcommerce使用Entity Framework (EF) Code-First

我的NopCommerce之旅(8): 路由分析

一.导图和基础介绍 本文主要介绍NopCommerce的路由机制,网上有一篇不错的文章,有兴趣的可以看看NopCommerce源码架构详解--对seo友好Url的路由机制实现源码分析 SEO,Search Engine Optimization,中文叫做搜索引擎优化,主要是为了提高网站关键词排名,提高访问量.SEO是一个很广的话题,我们这里主要了解NopCommerce的友好Url机制(它是实现SEO的一个步骤). 二.承上启下 我的NopCommerce之旅(6): 应用启动中介绍在应用启动时

nopCommerce 3.9 大波浪系列 之 开发支持多店的插件

一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. ILocalizationService 接口:本地化资源接口,配合语言,实现多语言的显示. 二.插件安装.卸载 我们在上一篇介绍了小部件如何使用(点击这里),这里介绍下如何安装.卸载插件. [后台管理][插件管理][本地插件]可以对插件进行安装.卸载 Nop.Admin.Controllers.PluginC

nopcommerce的挂件技术

nopcommerce有着完善的插件处理机制.开发人员可以预先开发好独立运行的模块,在通过自身的插件机制即可加载实现该插件功能.这种插件模式有利于模块化编程,提高扩展性以及降低模块之间的耦合度.下面,我们将添加一个自定义的插件Demo并介绍如何管理插件. 1.新建类库项目:右键"添加"--"新建项目"--"类库".默认的规则是"Nop.Plugin.{Group}.{Name}".{Group}表示插件的分类(如支付.挂件(W