Hi every body.
I want to Override Customer Controller (Register action inside that) in nop version 4.
please advice me, if possible.
My problem is more in ViewEngine and RouteProvider.
[Best Regards]
Thanks
var productCreateRoute =
routes.MapRoute("Nop.Plugin.Misc.Sample.ProductCreate",
"Admin/Product/Create",
new { controller = "CustomProductAdmin", action = "CustomCreate", area = "Admin" },
new[] { "Nop.Plugin.Misc.Sample.Controllers" });
productCreateRoute.DataTokens.Add("area", "admin");
routes.Remove(productCreateRoute);
routes.Insert(0, productCreateRoute);
public class CustomViewEngine : ThemeableRazorViewEngine
{
ViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
PartialViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
AreaViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
AreaPartialViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
}
var productCreateRoute =
routes.MapRoute("Nop.Plugin.Misc.Sample.ProductCreate",
"Admin/Product/Create",
new { controller = "CustomProductAdmin", action = "CustomCreate", area = "Admin" },
new[] { "Nop.Plugin.Misc.Sample.Controllers" });
productCreateRoute.DataTokens.Add("area", "admin");
routes.Remove(productCreateRoute);
routes.Insert(0, productCreateRoute);
public partial class RouteProvider : IRouteProvider
{
/// <summary>
/// Register routes
/// </summary>
/// <param name="routeBuilder">Route builder</param>
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapRoute("Plugin.Payments.PayPalDirect.Webhook", "Plugins/PaymentPayPalDirect/Webhook/",
new { controller = "PaymentPayPalDirect", action = "WebhookEventsHandler" });
}
/// <summary>
/// Gets a priority of route provider
/// </summary>
public int Priority
{
get { return -1; }
}
}
public class CustomViewEngine : ThemeableRazorViewEngine
{
ViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
PartialViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
AreaViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
AreaPartialViewLocationFormats = new[]
{
"~/Plugins/Misc.Sample/Views/{1}/{0}.cshtml",
"~/Plugins/Misc.Sample/Views/{0}.cshtml"
};
}
public class CustomViewLocationExpander : IViewLocationExpander
{
private const string THEME_KEY = "nop.themename";
public void PopulateValues(ViewLocationExpanderContext context)
{
//no need to add the themeable view locations at all as the administration should not be themeable anyway
if (context.AreaName?.Equals(AreaNames.Admin) ?? false)
return;
var themeContext = (IThemeContext)context.ActionContext.HttpContext.RequestServices.GetService(typeof(IThemeContext));
context.Values[THEME_KEY] = themeContext.WorkingThemeName;
}
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
if (context.Values.TryGetValue(THEME_KEY, out string theme))
{
viewLocations = new[] {
$"/Themes/{theme}/Views/{{1}}/{{0}}.cshtml",
$"/Themes/{theme}/Views/Shared/{{0}}.cshtml",
$"~/Plugins/Misc.Sample/Views/{{1}}/{{0}}.cshtml",
$"~/Plugins/Misc.Sample/Views/{{0}}.cshtml"
}
.Concat(viewLocations);
}
return viewLocations;
}
}
public void ConfigureServices(IServiceCollection services, IConfigurationRoot configuration)
{
//themes support
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new CustomViewLocationExpander());
});
}
var productCreateRoute =
routes.MapRoute("Nop.Plugin.Misc.Sample.ProductCreate",
"Admin/Product/Create",
new { controller = "CustomProductAdmin", action = "CustomCreate", area = "Admin" },
new[] { "Nop.Plugin.Misc.Sample.Controllers" });
productCreateRoute.DataTokens.Add("area", "admin");
routes.Remove(productCreateRoute);
routes.Insert(0, productCreateRoute);
public partial class RouteProvider : IRouteProvider
{
/// <summary>
/// Register routes
/// </summary>
/// <param name="routeBuilder">Route builder</param>
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapRoute("Plugin.Payments.PayPalDirect.Webhook", "Plugins/PaymentPayPalDirect/Webhook/",
new { controller = "PaymentPayPalDirect", action = "WebhookEventsHandler" });
}
/// <summary>
/// Gets a priority of route provider
/// </summary>
public int Priority
{
get { return -1; }
}
}
public class RouteProvider : IRouteProvider
{
#region Implementation of IRouteProvider
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapLocalizedRoute("Nop.Plugin.Misc.Sample.HomeAdmin", "Admin/Home/Index", new
{
controller = "CustomHomeAdmin",
action = "Index"
});
}
public int Priority => -1;
#endregion
}
public class RouteProvider : IRouteProvider
{
#region Implementation of IRouteProvider
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapLocalizedRoute("Nop.Plugin.Misc.Sample.HomeAdmin", "Admin/Home/Index", new
{
controller = "CustomHomeAdmin",
action = "Index"
});
}
public int Priority => -1;
#endregion
}
routeBuilder.MapAreaRoute(name: "Nop.Plugin.Misc.Sample.HomeAdmin",
template: "Admin/Home/Index",
areaName: "Admin",
defaults: new { controller = "CustomHomeAdmin", action = "Index" }
);
public class RouteProvider : IRouteProvider
{
#region Implementation of IRouteProvider
public void RegisterRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapLocalizedRoute("Nop.Plugin.Misc.Sample.HomeAdmin", "Admin/Home/Index", new
{
controller = "CustomHomeAdmin",
action = "Index"
});
}
public int Priority => -1;
#endregion
}
routeBuilder.MapAreaRoute(name: "Nop.Plugin.Misc.Sample.HomeAdmin",
template: "Admin/Home/Index",
areaName: "Admin",
defaults: new { controller = "CustomHomeAdmin", action = "Index" }
);
routeBuilder.MapAreaRoute(name: "Nop.Plugin.Misc.Sample.HomeAdmin",
template: "Admin/Home/Index",
areaName: "Admin",
defaults: new
{
controller = "CustomHomeAdmin",
action = "CustomIndex"
});