Настройка NopCommerce - PullRequest
       10

Настройка NopCommerce

0 голосов
/ 25 мая 2018

Я запускаю сайт электронной коммерции и решил начать с NopCommerce V4.00.Я разработал другие веб-сайты, используя WordPress и другие системы CMS, а также C #, .NET, MVC и т. Д., Но я не знаком с NopCommerce и ищу некоторые предложения о том, как лучше всего заниматься настройкой.

Этот сайт потребует обширной настройки, и одна из проблем, которую я имею, связана с ремонтопригодностью и обновлениями.Мне нужно убедиться, что я не стреляю себе в ноги и действительно усложняю ситуацию, когда приходит время перейти на новую версию NopCommernce.Я давно научился всегда пытаться добавлять поверх этих систем и по возможности оставлять системный код в одиночку.

Я нашел этот вопрос в отношении переопределения представлений и если я предполагаю,правильно, если представление присутствует в теме (следуя той же структуре), то это представление будет использоваться, в противном случае представление по умолчанию используется из корневой папки «Представления»?

Кажется, я не могу найти много о настройке админской стороны сайта и не знаю, как ее настроить, не касаясь источника.По сути, мне нужно предоставить урезанную версию области администрирования, если хотите, версию «Dummy Proof».Было бы разумнее использовать Контроль доступа и, возможно, пользовательские роли клиентов, чтобы скрыть какие-либо области, для которых мне нужно предоставить пользовательский интерфейс, например ввод новых продуктов или атрибутов и предоставление плагина вместо этого и добавление этого в меню администратора?Или было бы лучше сделать все это совершенно отдельным плагином для публичной стороны и полностью исключить администрацию?У меня еще не было достаточного опыта работы с этой системой, и я хочу избежать каких-либо проблем с разрешениями и / или открыть какие-либо дыры в системе безопасности, поскольку она находится в отдельной области.

Буду также признателен за любые советы или замечаниячто я должен знать о NopCommerce в целом.Я нашел довольно много сайтов, но все они, по-видимому, ссылаются на V2 или V3, и я не уверен, что с тех пор произошли какие-либо серьезные изменения.

Спасибо!


Обновление

В случае, если есть другие, которые ищут эту же информацию, в дополнение к ответу я смог найти пару ссылок, которые другие могут найти полезными, которые обращаются к этому.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Я нашел пару вещей, которые стоит упомянуть.Как и в принятом ответе, указывалось, что в NopCommernce произошли некоторые важные изменения в V4.0, в частности, в .Net Core, это довольно много меняет, особенно в отношении CustomViewEngines, который был предпочтительным методом для переопределения представлений.

Теперьчто все работает на .Net Core, есть другой метод, IViewLocationExpander .

Например, чтобы перезаписать _AdminLayout.cshtml, который отображается первым, необходим класс ViewLocationExpander:

ViewLocationExpander

public class ViewLocationExpander : IViewLocationExpander
{
    public void PopulateValues(ViewLocationExpanderContext context)
    {
    }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        // Since we are wanting to override the Admin template just look for Admin in the Context, you can also get the controller and view names here.
        if (context.AreaName == AreaNames.Admin)
        {
            //Add the location we want to use instead
            viewLocations = new string[] { $"/Plugins/YourPlugin/Views/Admin/{{1}}/{{0}}.cshtml",
                                          $"/Plugins/YourPlugin/Views/Admin/Shared/{{0}}.cshtml"}.Concat(viewLocations);
        }

        return viewLocations;
    }
}

Затем необходим файл запуска, чтобы сообщить NopCommerence об использовании этого нового ViewLocationExpander.Механизм NopCommerence находит все классы, реализующие INopStartup, и запускает их при запуске.

YourPluginStartup.cs

public class StoreManagerStartup : INopStartup
{
    public void ConfigureServices(IServiceCollection services, IConfigurationRoot configuration)
    {
        services.Configure<RazorViewEngineOptions>(options =>
        {
            options.ViewLocationExpanders.Add(new ViewLocationExpander());
        });
    }

    public void Configure(IApplicationBuilder application)
    {
    }

    public int Order {
        get { return 0; } //Return 0 to force this to execute first, otherwise set higher i.e. 1001 
    }

}

Одна вещь, которую я обнаружил, когда делал это как плагин, я должен был добавить несколько ссылок нашаблон _AdminLayout.cshtml вместе с соответствующими проектами.

_AdminLayout.cshtml (только заголовок, код опущен)

@inject IWebHelper webHelper
@inject IWorkContext workContext
@inject IDateTimeHelper dateTimeHelper
@inject IPermissionService permissionService
@inject IEventPublisher eventPublisher
@inject IHttpContextAccessor httpContextAccessor
@inject CommonSettings commonSettings
@inject LocalizationSettings localizationSettings
@inject StoreInformationSettings storeInformationSettings
@using System.Globalization;
@using System.Text.Encodings.Web;
@using Microsoft.AspNetCore.Http;
@using Nop.Core.Domain.Customers;
@using Nop.Web.Framework;
@using Nop.Web.Framework.Events;
@using Nop.Web.Framework.UI;
@using Nop.Core;
@using Nop.Core.Domain;
@using Nop.Core.Domain.Common;
@using Nop.Core.Domain.Localization;
@using Nop.Services.Common;
@using Nop.Services.Customers;
@using Nop.Services.Events;
@using Nop.Services.Helpers;
@using Nop.Services.Security;

Если вы хотите добавить только в меню администратора, просто наследуйте отинтерфейс IAdminMenuPlugin выглядит следующим образом:

public class YourPlugin : BasePlugin, IAdminMenuPlugin
{
    private readonly ISettingService _settingService;
    private readonly IWebHelper _webHelper;

    /**
     * Constructor
     **/
    public YourPlugin(ISettingService settingService, IWebHelper webHelper)
    {
        this._settingService = settingService;
        this._webHelper = webHelper;
    }

    /**
     * Adds the Admin Menu Item
     **/
    public void ManageSiteMap(SiteMapNode rootNode)
    {
        var menuItem = new SiteMapNode()
        {
            SystemName = "Plugins.YourPlugin",
            Title = "Your Plugin Title",
            ControllerName = "YourPlugin",
            ActionName = "Configure",
            Visible = true,
            RouteValues = new RouteValueDictionary() { { "area", null } },
        };

        // To add to the root Admin menu use
        rootNode.ChildNodes.Insert(1, menuItem); // or rootNode.ChildNodes.Add(menuItem);

        /* uncomment to add to the "Plugins" Menu Item
        var pluginNode = rootNode.ChildNodes.FirstOrDefault(x => x.SystemName == "Third party plugins");

        if (pluginNode != null)
            pluginNode.ChildNodes.Add(menuItem);
        else
            rootNode.ChildNodes.Add(menuItem);
        */
    }
}

Не забудьте добавить любые файлы _ViewStart.cshtml, если вы переопределяете страницы индекса, иначе шаблоны не будут загружены.

0 голосов
/ 26 мая 2018

Во-первых, вы не должны добавлять более одного вопроса за раз, вы можете задать столько вопросов, сколько хотите, но отдельно!

Ремонтопригодность и обновления.

В соответствии с тем, как я работал с nopCommerce, проект легко поддерживать и обновлять.Тем не менее, это зависит от того, какие практики вы будете следовать.Существует несколько распространенных способов сделать пользовательский код поверх кода по умолчанию.Лучший способ - разработать плагин для ваших требований, который сделает процесс обновления без проблем.

Но, когда nopCommerce перейдет на более новую технологию, возникнут проблемы с обновлением существующего сайта. То, что произошло при обновлении nopCommerce с 3.90 до 4.0, было радикальным изменением для перехода на ядро ​​ASP.NET.Но, обладая соответствующими технологиями, вы можете легко это сделать.

Я давно научился всегда пытаться добавлять поверх этих систем и по возможности оставлять системный код один на один

Да, это является наиболее предпочтительным для разработчиков, не трогайте код по умолчанию и запускайте код поверх системы, и именно для этого используется подключаемая архитектура.

, если присутствует представлениепод темой (следуя той же структуре), то это представление будет использоваться, в противном случае представление по умолчанию будет использоваться из корневой папки 'Views'?

Да, сначала он отображает страницы представления в папке темы, затемследуя по корню просмотра страниц.Оба могут переопределить из плагина.

как настроить его, не касаясь источника

Создайте свой плагин с нужной вам функциональностью и добавьте его в системный код.

Было бы разумнее использовать Контроль доступа и, возможно, пользовательские Роли Клиента, чтобы скрыть любые области, для которых мне нужно предоставить пользовательский интерфейс, например, ввод новых Продуктов или Атрибутов и предоставление Плагина вместо этого и добавление его кМеню администратора.

Вы можете создавать новые роли и обрабатывать ACL (Access Control List)

Или было бы лучше сделать все этокак полностью отдельный плагин для публичной стороны и полностью исключить его со стороны администратора?

Это зависит от ваших требований, хотите ли вы вносить изменения на стороне администратора или лицевой стороне, обе вещиможно управлять из плагина.

Надеюсь, это поможет!

...