Как установить новый модуль Orchard в качестве домашней страницы с помощью кода - PullRequest
3 голосов
/ 18 июня 2011

Я очень новичок в Орчард.

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

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

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

Мои вопросы

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

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

скачать исходный код

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

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

1 голос
/ 29 марта 2013

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

        //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)

0 голосов
/ 22 июня 2011

Если ваш модуль будет использоваться другими, то лучше создать виджет, который можно добавить к любому слою (например, к слою домашней страницы).Таким образом, каждый пользователь может решить, где ваш модуль вступает в игру.Если вы используете этот модуль только для себя, то вы можете просто переопределить маршруты по умолчанию (стандартная функция 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())
                }
            };
        }
    }
...