Создайте псевдоним из рецепта в Orchard

Я хочу создать следующий псевдоним из рецепта.

псевдоним

Как это достигается?


person carrier    schedule 24.06.2013    source источник
comment
Можно немного конкретнее? Какой рецепт? Я не думаю, что есть шаг рецепта, который может это сделать, а псевдонимы не являются элементами контента и, как таковые, по своей сути не могут быть импортированы. Вероятно, вам придется написать свою собственную команду или шаг рецепта.   -  person Bertrand Le Roy    schedule 25.06.2013
comment
Чего я действительно хочу добиться, так это того, чтобы страница по умолчанию указывала на конкретный контроллер и действие в пользовательском модуле, а не на обычной странице.   -  person carrier    schedule 25.06.2013
comment
@carrier Я пытаюсь сделать то же самое. Вы придумали способ или написали команду или шаг рецепта для достижения этого?   -  person Darlene    schedule 23.07.2014


Ответы (1)


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

using Orchard;
using Orchard.Alias;
using Orchard.Commands;
using System;
using Orchard.Environment;
using System.Linq;

namespace Contrib.Foundation.Common.Commands
{
    public class AliasCommands : DefaultOrchardCommandHandler
    {
        private readonly Work<WorkContext> _workContext;
        private readonly IAliasService _aliasService;

        public AliasCommands(Work<WorkContext> workContext, IAliasService aliasService,
            IOrchardServices orchardServices)
        {
            _workContext = workContext;
            _aliasService = aliasService;
            Services = orchardServices;
        }
        public IOrchardServices Services { get; private set; }

        [OrchardSwitch]
        public string AliasPath { get; set; }
        [OrchardSwitch]
        public string RoutePath { get; set; }

        [CommandName("alias add")]
        [CommandHelp("alias add /AliasPath:<alias-path> /RoutePath:<route-path>\r\n\t" + "Add a new alias")]
        [OrchardSwitches("AliasPath,RoutePath")]
        public void Add()
        {
            AliasPath = AliasPath.TrimStart('/', '\\');
            if (String.IsNullOrWhiteSpace(AliasPath))
            {
                AliasPath = "/";
            }
            if (String.IsNullOrWhiteSpace(RoutePath))
            {
                Context.Output.WriteLine(T("Route can't be empty"));
                return;
            }       
            if (CheckAndWarnIfAliasExists(AliasPath))
            {
                Context.Output.WriteLine(T("Alias already exist"));
                return;
            }
            try
            {
                _aliasService.Set(AliasPath, RoutePath, "Custom");
            }
            catch (Exception ex)
            {
                Services.TransactionManager.Cancel();
                Context.Output.WriteLine(T("An error occured while creating the alias {0}: {1}. Please check the values are correct.", AliasPath, ex.Message));
                return;
            }
            Context.Output.WriteLine(T("Alias {0} created.", AliasPath));
        }
        private string GetExistingPathForAlias(string aliasPath)
        {
            var routeValues = _aliasService.Get(aliasPath.TrimStart('/', '\\'));
            if (routeValues == null) return null;

            return _aliasService.LookupVirtualPaths(routeValues, _workContext.Value.HttpContext)
                .Select(vpd => vpd.VirtualPath)
                .FirstOrDefault();
        }
        private bool CheckAndWarnIfAliasExists(string aliasPath)
        {
            var routePath = GetExistingPathForAlias(aliasPath);
            if (routePath == null) return false;

            return true;
        }
    }
}

Вы можете использовать его в рецепте следующим образом:

<Command>
alias add /AliasPath:"/" /RoutePath:"mycontroller"
</Command>

Поместите класс в свой модуль и укажите ссылку на Orchard.Alias.

person fotisgpap    schedule 07.04.2016