1

SharePoint WCM パブリッシング ページの編集と表示の両方のエクスペリエンスを向上させるために、編集モードで Masterpage/PageLayout の特別なセットに切り替えられるようにしたいと考えています。

したがって、 /_catalogs/masterpage には次のものが必要です。

MyMasterpage.master - 表示モードのマスターページ MyMasterpage-edit.master - 編集モードのマスターページ、使用可能な場合のみ使用 MyPageLayout.aspx - 表示モードのページレイアウト MyPageLayout-edit.aspx - 編集モードのページレイアウト、使用可能な場合のみ使用

ページ ライブラリに新しい発行ページを作成するときは、MyPageLayout ページ レイアウトを選択します。

ページをレンダリングするときに、サーバー コントロールと同じように、Edit of Display モードであるかどうかを検出したいと考えています。このコントロールは、次のコードを実行してレンダリング モードを決定します。

private void calculateShouldRender()
{
    SPControlMode contextualFormModeFromPostedForm = ConsoleUtilities.GetContextualFormModeFromPostedForm();
    if ((SPControlMode.Display == contextualFormModeFromPostedForm) && (PageDisplayMode.Display == this.PageDisplayMode))
    {
        this.shouldRender = true;
    }
    else if ((SPControlMode.Edit == contextualFormModeFromPostedForm) && (PageDisplayMode.Edit == this.PageDisplayMode))
    {
        this.shouldRender = true;
    }
    else
    {
        this.shouldRender = false;
    }
    this.Visible = this.shouldRender;
}

レンダリング モードが編集の場合、MyMasterpage-edit.master マスターページと MyPageLayout-edit.aspx ページレイアウトに切り替えたいと考えています。

サーバー コントロールによって制御されるマスター ページとページ レイアウトで大きな切り替えを行うことができますが、責任を分割したいと考えています。SharePoint アナリストは最適な編集モードのページを作成でき、フロント エンドの開発者は、編集の雑然とすることなく、クリーンで美しい表示モードのページを作成できます。

これを達成する方法についてのアイデアはありますか? マスターページの切り替えは問題ではないようです。私はかつてこれについてブログ投稿を書きました。難しかったのはページレイアウトの切り替え。

4

6 に答える 6

1

私はかつて、さまざまな基準に応じてページレイアウトを切り替える機能を作成しました。違いは、表示モードや編集モードではなく、サイトの作成中にページレイアウトが変更されたことです。ページレイアウトを変更するコードは次のとおりです。

    private void SetPageLayout(SPWeb web, string pageName, string pageLayoutName)
    {
        PageLayout layout = null;
        PublishingPage page = null;
        SPFile pageFile = null;
        bool checkedOut = false;

        try
        {
            PublishingWeb publishWeb = PublishingWeb.GetPublishingWeb(web);
            // verify that the requested pageLayout is available
            foreach (PageLayout pl in publishWeb.GetAvailablePageLayouts())
            {
                if (pl.Name.Equals(pageLayoutName, StringComparison.OrdinalIgnoreCase))
                {
                    layout = pl;
                    break;
                }
            }
            // got my layout
            if (layout != null)
            {
                page = null;
                foreach (PublishingPage pubPage in publishWeb.GetPublishingPages())
                {
                    if (pageName == pubPage.Name)
                    {
                        page = pubPage;
                        break;
                    }
                }
                // got my page
                if (page != null)
                {
                    pageFile = page.ListItem.File;

                    page.CheckOut();
                    checkedOut = true;

                    page.Layout = layout;
                    page.Update();

                    page.CheckIn("changed the page-layout to " + pageLayoutName);
                    checkedOut = false;

                    pageFile.Publish("");
                    // If required, approve the page
                    try
                    {
                        pageFile.Approve(string.Empty);
                    }
                    catch
                    {
                        // Page doesn't need to be approved
                    }
                }
            }
        }
于 2009-07-22T19:05:26.697 に答える
1

その道を進むと、SharePoint と戦うことになると思います。また、問題がどこにあるのかがはっきりしなくなったり、何かが起こったときに両方 (または 4 つすべて!) の場所を変更することを忘れなかったりするため、サポートの悪夢のようなものになるのではないかと心配しています。更新されます。

ページの編集モードに応じてコントロールを表示または非表示にすることができるため、ユーザーに表示される内容はまったく異なりますが、ページのすべてのコードは 1 つの場所にあります。

editmode パネルを調査します。

<publishingwebcontrols:editmodepanel ID="Editmodepanel1" runat="server">
   <link id="Link2" rel=Stylesheet href="<% $SPUrl:~sitecollection/EditMode.css %>" runat="server" type="text/css" />
</publishingwebcontrols:editmodepanel>

ご質問のとおりではないことは承知していますが、SharePoint との闘いは敗戦であり、その「やり方」で作業する必要があります。

于 2009-06-11T16:35:31.567 に答える
0

私の文章はコメント欄には長すぎたので、あたかも答えであるかのようにエイデンで答えますが、私の質問は残っています!

こんにちは、Aidan さん。SharePoint は、ソリューションを構築できるプラットフォームだと思います。また、Microsoft がプラットフォーム上に構築した WCM ソリューションは弱いと思います。私のやり方が SharePoint の標準的な方法ではないことはわかっていますが、標準的な方法ではうまくいきません。編集モードと表示モードを組み合わせると (選択してください): - すべて同じように見えるが、編集モードでは問題なく動作する標準の SharePoint 発行サイト - 非常に編集可能であるが、外観は非常に基本的なサイト - 表示モードで見栄えの良いサイト編集するのはほとんど不可能です 表示モードで必要なスタイルシートと MOSS WCM スタイルシートの間に多くの衝突があります。それを機能させるために、あらゆる種類の補正スタイルシートを作成しましたが、これは面倒です。ページにスタイルを含むコードを挿入して編集を可能にすることは重大な欠陥です。これは、編集中のページの外側で完全に行われているはずです。たとえば、編集中のページの上にフローティング ウィンドウとして表示できる iframe で。しかし、そうではありません。また、ページにタブやアコーディオン コントロールがある場合に発生する問題についても言及しませんでした。

多くのコンテンツ管理を行う必要がある、本当にインタラクティブな Web 2.0 サイトをターゲットにしています。SharePoint の方法で編集モードを正しく設定してもうまくいきません。

最適な編集エクスペリエンスが重要です。それでは、編集用に最適化されたマスターページとページレイアウトを使用して、編集可能なすべての要素に明確かつ一貫した方法で到達できるようにしましょう。ただし、それでも表示モードが必要です。これは、SharePoint で生成されたデータのみを使用する完全に別のサイトを使用して行うことができます。これは ASP.NET サイトにすることも、html MVC を完全に制御したい場合は使用することもできます。ナビゲーション、セキュリティ、コントロールの再利用、Web パーツの使用などに多くの影響があるため、私はそのようにはいきません。

編集用に最適化された masterpage/pagelayout を使用し、ページ レイアウトの最小限のコード セットのみを表示するために別の masterpage/pagelayout を使用すると、両方の長所が得られると思います。

だから..答えを続けてください!

于 2009-06-11T21:02:31.520 に答える
0

確かに、それには Microsoft.SharePoint.Publishing.PublishingLayoutPage をサブクラス化する必要があり、それを使用して、「編集モード」に応じて必要な実際の PublishingLayoutPage のコンテンツをレンダリングします。

マスターページを変更する方法...ええと。

于 2009-06-12T01:00:02.540 に答える
0

この質問に対する決定的な答えは、DualLayout for SharePoint と呼ばれる製品に「焼き付けられた」ものになりました。私たちのアプローチは、SharePoint WCM 設計の悪夢をすべて解決します。

  • WCM の編集ビューと表示ビュー以外に、エンド ユーザー向けの追加ビューを導入する
  • SharePoint スタイルと独自のスタイルが衝突することはありません
  • WCM マスター ページとページ レイアウトに干渉しない無駄のない平均的な「ビュー」マスター ページとページ レイアウトを作成します。
  • エンドユーザー向けの超軽量ページを作成し、SharePoint 固有のページの乱雑さをすべて取り除きます
  • エンド ユーザー ビューでレンダリングするコントロールのセットが最小限しかないため、ページのパフォーマンスが向上します。

詳細な背景情報については、そのページのブログ ロールにあるブログ投稿を参照してください

于 2011-02-27T12:56:46.983 に答える