Как установить новый модуль Orchard в качестве домашней страницы с помощью кода

Я новичок в садоводстве.

Чтобы изучить разработку модуля сада, я следовал документации и попытался создать коммерческий модуль.

Модуль состоит из части продукта и типа продукта, который имеет часть продукта.

Во время включения модуля он создаст административное и домашнее меню для этого модуля, «Коммерция» и «Магазин» соответственно.

Мои вопросы

  • Как сделать этот модуль домашней страницей во время включения модуля. Другими словами, я хочу, чтобы метод Index модуля HomeController обрабатывал домашний URL-адрес?
  • Как сделать так, чтобы меню магазина в интерфейсе было после домашнего меню, или зарегистрировать этот модуль в домашнем меню?

Я прилагаю исходный код, пожалуйста, загрузите его по следующей ссылке

загрузить исходный код


person embarus    schedule 18.06.2011    source источник
comment
+1 за первую часть вашего вопроса. И у @bertrand есть ОЧЕНЬ полезный лаконичный ответ!   -  person gideon    schedule 23.06.2011


Ответы (3)


Чтобы взять на себя домашнюю страницу, стандартным способом Orchard является реализация IHomePageProvider.

person Bertrand Le Roy    schedule 22.06.2011
comment
Большое спасибо за ответ. Однако мне нужно следовать некоторой базе соглашений об именах классов для класса, который реализует IHomeProvider, и где разместить этот класс. В корне модуля, не так ли. - person embarus; 13.03.2012
comment
IHomePageProvider больше не существует (ну, по крайней мере, Orchard 1.6) - вместо этого посмотрите на части Alias ​​/ Autoroute. - person Henry C; 29.03.2013

Вы можете при создании страницы как части migrations.cs в модуле указать части Autoroute установить псевдоним созданной страницы в качестве домашней страницы:

        //create a page page
        var homepage = _contentManager.Create("Page");
        homepage.As<TitlePart>().Title = "My Home";            
        _contentManager.Publish(homepage);

        var homePageArp = homepage.As<AutoroutePart>();
        homePageArp.DisplayAlias = String.Empty;            
        _autorouteService.PublishAlias(homePageArp);

Это предполагает, что вы переходите с чистого экземпляра Orchard без каких-либо предыдущих домашних страниц; если у вас есть существующая домашняя страница, вам также придется повторно создать псевдонимы этих страниц как часть вашего модуля. Вот как это делается в рамках AutoroutePartHandler в проекте Orchard.Autoroute (внутри метода Publish Alias):

            // regenerate the alias for the previous home page
            var currentHomePages = _orchardServices.ContentManager.Query<AutoroutePart, AutoroutePartRecord>().Where(x => x.DisplayAlias == "").List();
            foreach (var current in currentHomePages) {
                if (current != null) {
                    current.CustomPattern = String.Empty; // force the regeneration
                    current.DisplayAlias = _autorouteService.Value.GenerateAlias(current);
                }
                _autorouteService.Value.PublishAlias(current);
            }


        _autorouteService.Value.PublishAlias(part);

Если вы покопаетесь в драйвере и обработчике проекта autoroute, вы многое узнаете о его внутреннем устройстве; когда вы ставите галочку в поле «Установить как домашнюю страницу» в пользовательском интерфейсе администратора, он устанавливает путь в «/», а затем он подхватывается, вызывает переподключение старой домашней страницы, очищает путь «/» к String.Empty, а затем публикует этот пустой псевдоним, предоставляя вам новую домашнюю страницу.

(действительно начиная с Orchard 1.6)

person Henry C    schedule 29.03.2013

Если ваш модуль будет использоваться другими, то лучше сделать виджет, который можно добавить на любой слой (например, на слой домашней страницы). Таким образом, каждый пользователь может решить, где использовать ваш модуль. Если вы используете этот модуль только для себя, вы можете просто переопределить маршруты по умолчанию (стандартная функциональность mvc). Посмотрите мой модуль ExtendedRegistration (Routes.cs), чтобы увидеть, как это делается.

Здесь я переопределяю стандартный URL-адрес учетной записи/регистрации. Ничто не должно мешать вам переопределить HomeController по умолчанию.

public class Routes : IRouteProvider
    {

        public void GetRoutes(ICollection<RouteDescriptor> routes)
        {
            foreach (var routeDescriptor in GetRoutes())
            {
                routes.Add(routeDescriptor);
            }
        }

        public IEnumerable<RouteDescriptor> GetRoutes()
        {
            return new[] {

                    new RouteDescriptor {
                    Priority = 19,
                    Route = new Route(
                        "Users/Account/Register",
                        new RouteValueDictionary {
                            {"area", "itWORKS.ExtendedRegistration"},
                            {"controller", "Account"},
                            {"action", "Register"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "itWORKS.ExtendedRegistration"}
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }
person santiagoIT    schedule 21.06.2011