我需要构建一个小部件插件,这样我需要知道如何渲染视图以放置 每个产品“添加到购物车”按钮之前的文字。
我的插件(小部件)将在添加到购物车按钮之前显示文本
我使用的是4.70版本
要在每个“添加到购物车”按钮之前添加文本,您需要在插件中创建组件。
请按照以下步骤操作:
你必须需要在你的插件中继承
IWidgetPlugin
。
public class YourPlugin : BasePlugin, IWidgetPlugin
继承IWidgetPlugin的所有方法(可以参考NivoSlider插件),更新plugin.cs中的
GetWidgetZonesAsync
方法
public Task<IList<string>> GetWidgetZonesAsync()
{
return Task.FromResult<IList<string>>(new List<string> { PublicWidgetZones.ProductDetailsAddInfo });
}
现在更新plugin.cs中的
GetWidgetViewComponent
方法
public Type GetWidgetViewComponent(string widgetZone)
{
if(widgetZone == PublicWidgetZones.ProductDetailsAddInfo)
{
return typeof(ProductDetailsAddInfoViewComponent);
}
else
{
return null;
}
}
现在您必须在插件文件夹中创建组件文件夹并添加组件类
ProductDetailsAddInfoViewComponent.cs
namespace Nop.Plugin.Widgets.YourPlugin.Components
{
public class ProductDetailsAddInfoViewComponent : NopViewComponent
{
private readonly IStoreContext _storeContext;
private readonly ISettingService _settingService;
public ProductDetailsAddInfoViewComponent(IStoreContext storeContext,
ISettingService settingService)
{
_storeContext = storeContext;
_settingService = settingService;
}
/// <returns>A task that represents the asynchronous operation</returns>
public async Task<IViewComponentResult> InvokeAsync(string widgetZone, object additionalData)
{
var store = await _storeContext.GetCurrentStoreAsync();
var settings = await _settingService.LoadSettingAsync<YourPluginSettings>(store.Id);
if (settings.Enable)
{
if (additionalData is not ProductDetailsModel.AddToCartModel model)
return Content(string.Empty);
// Prepare your custom model here
return View("~/Plugins/Widgets.YourPlugin/Views/Shared/Component/ProductDetailsAddInfo/Default.cshtml");
}
else
return Content(string.Empty);
}
}
}
现在在下面创建一个 Default.cshtml 视图
Widgets.YourPlugin/Views/Shared/Component/ProductDetailsAddInfo
文件夹结构
在您的视图文件中添加以下文本
<h3>Your custom text</h3>
保存并重建您的插件。