2011-06-18 5 views
3

私はオーチャードでとても新しいです。新しいOrchardモジュールをホームページに設定するには

オーチャードモジュールの開発を学ぶために、私はマニュアルに従って、コマースモジュールを作成しようとしました。

モジュールは、製品の部品と製品の部品で構成された製品のタイプで構成されています。

有効化モジュールでは、このモジュールの管理モジュールとホームメニューがそれぞれ「Commerce」と「Shop」に作成されます。

私の質問は、私が有効モジュールの間に、このモジュールは、ホーム・ページであることを作るにはどうすればよい

  • です。言い換えれば、私は、 のIndexメソッドをHomeControllerのホームURLを処理したいのですか?
  • フロントメニューの[ショップ]メニューをホームメニューの後にする方法、またはこのモジュールをホームメニューに登録する方法を教えてください。

私は、ソースコードを添付しています、あなたのモジュールは、他の人が使用する場合は、次のリンク

download source code

+0

+1質問の最初の部分です。そして、@bertrandには非常に便利な簡潔な答えがあります! – gideon

答えて

4

ホームページを引き継ぐために、オーチャードの標準的な方法はIHomePageProviderを実装することです。

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

これは想定していますから行っている:モジュールにmigrations.csの一部としてページを作成するときに

+0

本当にありがとうございます。しかし、私は、IHomeProviderを実装しているクラスと、そのクラスを配置するクラスのために、いくつかのクラス名のコンベンションベースに従う必要があります。モジュールルートではありません。 – embarus

+1

IHomePageProviderはもう存在しません(少なくともOrchard 1.6以上)。代わりにAlias/Autorouteの部分を調べてください。 –

0

からダウンロードしてください、追加することができるウィジェットを作成することをお勧めします任意のレイヤー(たとえば、ホームページレイヤー)に移動します。こうすることで、各ユーザーがあなたのモジュールがどこに出るのかを決めることができます。 このモジュールを自分でのみ使用している場合は、デフォルトルート(標準の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()) 
       } 
      }; 
     } 
    } 
1

あなたは、ホームページとしてあなたの作成したページのエイリアスを設定するオートルートの一部を伝えることができます以前のホームページなしでオーチャードのきれいなインスタンス。既存のホームページがある場合は、それらのページの別名もモジュールの一部として再生成する必要があります。これは、それが(公開エイリアスメソッド内)Orchard.AutorouteプロジェクトにおけるAutoroutePartHandlerの一環として行うの方法です:あなたは自動ルートのプロジェクトのためのドライバとハンドラを介して掘る場合

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

、あなたがよ内部について多くのことを学ぶ。管理UIで「ホームページに設定」ボックスをチェックすると、パスが「/」に設定され、それが選択され、古いホームページが再配線され、「/」パスがString.Emptyにクリアされてからその空のエイリアスを公開し、新しいホームページを提供します。

(これはオーチャード1.6時点で有効です)

関連する問題