2

Web サイトのセクション全体 (約 10 ページ) を DotNetNuke モジュールとして開発する必要があります。このサイトは DNN を CMS として使用し、編集者がほとんどの Web サイトの HTML コンテンツを管理します (私が開発するセクションを除く)。

私はすでに DNN モジュール開発についてかなり広範な調査を行っています (DNN Corp によるウェビナーの記録もいくつか見ました)。残念ながら、私がオンラインで見つけたもののほとんどは、単純なウィジェットのようなモジュールの開発に関するものでした。また、ほとんどの場合、DNN がどのように機能するかを理解しようとしているときに、段階的な「Visual Studio を使用して x を作成する方法」アプローチを使用します。なので、自分で解決する必要があるようです...

この時点で、私はすでに DNN にある程度精通しており、私の問題に対するいくつかの異なる解決策を見ています。

  1. カスタム セクションのすべてのページのモジュールを作成します。特に、複数のページで共有する必要があるコードがあるため、このアイデアはあまり好きではありません。
  2. 内部に複数のユーザー コントロール (各ページに 1 つ) を含む単一のモジュールを開発し、カスタム モジュール設定を使用して、表示するコントロールを各ページに通知します。
  3. ライブラリとして機能する「偽の」モジュールと、各ページの追加モジュールを開発します。
  4. ライブラリ モジュールを開発し、ビューに Razor ホスト モジュールと Razor スクリプトを使用します (アプリに WebForms は必要ありません/必要ありません)。

そこで、皆さんにアドバイスを求めることにしました。どの方法が好ましいですか?たぶん、上記のどれでもない?上記の 4 つのオプションすべてで希望する結果が得られることはわかっていますが、「DNN の方法」に逆らいすぎたくもありません...

4

4 に答える 4

4

#1 (複数のモジュール) または #3 (複数のモジュール) はまったくお勧めしませんが、#2 (ビューを決定するモジュール レベルの設定を持つ単一のモジュール) は、DNN モジュール開発者によって広く使用されている堅実なオプションであることは間違いありませんが、開発スタイルが好きなので、#2 よりも #4 (Razor) を好むようです。

そのため、Razor アプローチを使用することをお勧めします。これは、アプローチをうまく理解しているようですが、後世のために詳しく説明したかったのです。

  • ライブラリ (アセンブリ/DLL) を構築して、再利用可能なすべてのビジネス ロジックをカプセル化します。
  • そのロジックを利用してページ上にデータをレンダリングする各ページの Razor ビューを構築します。
  • 必要な各ページに Razor Host モジュールをドロップし、正しいビューを指すようにします。

それはかなりうまくいくはずです。

于 2011-07-05T23:33:36.763 に答える
1
   <folder>
      <name>BlogDisplay</name>
      <friendlyname>Blog Display</friendlyname>
      <foldername>WebLog</foldername>
      <modulename></modulename>'

   '<folder>
      <name>BlogSidebar</name>
      <friendlyname>Sidebar Navigator</friendlyname>
      <foldername>WebLog</foldername>
      <modulename></modulename>

こんな感じになります!それがフォルダー名の場所です。モジュールがインストールされる DesktopModules の場所を定義します。

DNN 5 の本では、Web サイト プロジェクトの開発方法がまだ使用されていますが、コア モジュールの開発に参加している場合、プロジェクトは Web アプリ プロジェクト開発スタイルであることがわかります。コード ビハインドはアセンブリ内にあり、Web 上にソース コードとして公開されていません。

あなたは間違いなく正しい道を進んでいます。

于 2011-07-07T02:53:34.397 に答える
1

モジュール - これは、私たち全員が大まかに使用している用語です。

より明確な定義

  • パッケージ = Zip ファイル (モジュールではありません)
  • マニフェスト = .DNN ファイル

マニフェストを使用すると、モジュール (表示/編集/設定のグループ) ユーザー コントロールを単一のインストール パッケージとして定義できます。

DNN 3.0 マニフェストで、まだこの形式を使用している場合は、基本的な単一のインストール パッケージが次のように (簡単に) 構成されていることに気付くでしょう。

<dotnetnuke version="3.0" type="Module">
  <folders>
    <folder>
      <name>Side bar Navigation</name>
      <modules>
        <module>
          <friendlyname></friendlyname>
          <cachetime>0</cachetime>
          <controls>
            <control>
              <title>View</title>
              <src>DesktopModules/Module/View.ascx</src>
              <type>View</type>
            </control>
            <control>
              <key>Settings</key>
              <title>Settings</title>
              <src>DesktopModules/Module/Settings.ascx</src>
              <type>Edit</type>
            </control>
          </controls>
        </module>
      </modules>
      <files>
          ...
      </files>
    </folder>
</folders>
</dotnetnuke>

上記のように、インストール パッケージ内の単一モジュールを定義します。

ブログのコンテキストでは、2 つのモジュールがあります。

  1. ブログ表示モジュール (選択したブログまたは全体を表示)
  2. サイドバー ナビゲーション モジュール (任意の期間に書いたブログをすばやく表示するのに役立ちます)

できることは、ブログ表示モジュールをマニフェストのコピーにパッケージ化して <folder></folder>から、サイドバー ナビゲーション モジュールを<folder></folder>構造の別のコピーにパッケージ化することです。

たとえば、このプロジェクトには 7 つのモジュールがあります。サイドバーのナビゲーション、カスタム検索モジュール、何とか何とか

<dotnetnuke version="3.0" type="Module">
  <folders>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
    <folder>...</folder>
  </folders>
</dotnetnuke>
  1. 1 インストール パッケージ (つまり、1 Web アプリ プロジェクト)
  2. 7つのモジュール
  3. ビンに入れる 1 つのアセンブリ/
  4. すべてのコードは共有されているため、他のライブラリ参照から継承してさらに開発することができます。

それらは異なるビュー、名前、フレンドリ名を持っていますが、すべてが1つの共通点を共有しています<foldername>

キーはパッケージにあります。

于 2011-07-07T00:49:14.967 に答える
1

「Web サイト プロジェクト」スタイルでソフトウェアを開発しようと考えていると思います。「Web アプリケーション プロジェクト」スタイルの作業を検討することをお勧めします。

ライブラリで機能を共有している場合は、自由にアセンブリをビルドして bin フォルダーにドロップしてください。そこから、DNN によってピックアップされ、http コンテキストで実行されます。これはすばらしいことです。

モジュールを 1 つのプロジェクトでビルドし、さまざまなモジュールを DNN マニフェストにパッケージ化します。

あなたが理解していることについて話しているのではないことを願っています。


別の回答を追加しました。それ自体が投稿です。

于 2011-07-06T10:58:08.107 に答える