SharePoint 게시 페이지의 PageLayout과 MasterPage를 동적으로 전환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/981685

문제

SharePoint WCM 게시 페이지의 편집 및 표시 환경을 모두 개선하기 위해 편집 모드에서 특별한 Masterpage/PageLayout 세트로 전환할 수 있었으면 좋겠습니다.

그래서 /_catalogs/masterpage에서 나는 다음을 갖고 싶습니다:

MyMasterPage.Master- 디스플레이 모드 용 Mas

페이지 라이브러리에서 새 게시 페이지를 만들 때 MyPageLayout 페이지 레이아웃을 선택합니다.

페이지를 렌더링할 때 서버 컨트롤과 마찬가지로 디스플레이 편집 모드에 있는지 확인하고 싶습니다.이 컨트롤은 다음 코드를 실행하여 렌더링 모드를 결정합니다.

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 materpage와 MyPageLayout-edit.aspx 페이지 레이아웃으로 전환하고 싶습니다.

서버 컨트롤에 의해 제어되는 마스터 페이지와 페이지 레이아웃에서 큰 전환을 할 수 있지만 책임을 분할하고 싶습니다.SharePoint 분석가는 최적의 편집 모드 페이지를 만들 수 있고, 프런트 엔드 개발자는 복잡한 편집 작업 없이 깔끔하고 아름다운 디스플레이 모드 페이지를 만들 수 있습니다.

이 작업을 수행하는 방법에 대한 아이디어가 있습니까?마스터페이지 전환에는 문제가 없는 것 같습니다. 블로그 게시물 이에.어려운 점은 페이지 레이아웃의 전환인 것 같습니다.

도움이 되었습니까?

해결책 6

이 질문에 대한 결정적인 대답은 이제 SharePoint를 위해 Duallayout이라고 부르는 제품으로 "구워졌습니다"입니다! 우리의 접근 방식은 모든 SharePoint WCM 디자인 악몽을 해결합니다.

  • WCM 편집 및 디스플레이보기 외에 최종 사용자에 대한 추가보기를 소개합니다.
  • SharePoint 스타일과 자신의 스타일 사이의 충돌이 없습니다.
  • WCM 마스터 페이지 및 페이지 레이아웃을 방해하지 않는 "마스터 페이지 및 페이지 레이아웃"마스터 페이지 및 페이지 레이아웃을 의미합니다.
  • 최종 사용자의 슈퍼 라이트 페이지를 만들고 모든 SharePoint 특정 페이지 클러 터를 제거하십시오.
  • 최종 사용자보기에서 렌더링 할 최소한의 컨트롤 세트 만 있으므로 페이지의 성능 향상

확인하십시오 http://www.macaw.nl/het+bedrijf/prodcen/macaw+duallayout+ offorpoint.aspx, 자세한 배경 정보는 해당 페이지의 블로그 롤의 블로그 게시물을 참조하십시오.

다른 팁

나는 당신이 그 경로를 계속하면 SharePoint와 싸울 것이라고 생각합니다. 나는 그것이 문제가 어디에 있는지 명확 해지거나, 두 곳 모두 (또는 4 개 모두) 무언가를 변화시키는 것을 기억하기 때문에 그것이 지원 악몽의 무언가가 될 것이라고 생각합니다. 업데이트됩니다.

페이지의 편집 모드에 따라 컨트롤이 나타나거나 숨길 수 있으므로 사용자에게 표시되는 내용은 완전히 다르지만 페이지의 모든 코드는 여전히 한 위치에 있습니다.

editmodepanel을 조사하십시오.

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

나는 그것이 당신이 요청한 것이 아니라는 것을 알고 있습니다. 그러나 나는 샤워 포인트와 싸우는 것이 당신이 그 '길'으로 일 해야하는 패배 전투라는 것을 알았습니다.

한 번 다른 기준에 따라 Page-Layouts를 전환하는 기능을 작성했습니다. 차이점은, 시원 또는 편집 모드가 아닌 사이트 생성 중에 페이지 레이 아웃이 변경되었다는 것입니다. 페이지 레이아웃을 변경하려는 코드는 다음과 같습니다.

    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
                    }
                }
            }
        }

내 텍스트가 댓글 상자에 너무 길었 기 때문에 Aiden에 대한 대답 인 것처럼 대답하지만 내 질문은 남아 있습니다!

안녕하세요 Aidan, SharePoint를 솔루션을 구축 할 수있는 플랫폼으로 본다. 그리고 플랫폼 위에 Microsoft가 구축 한 WCM 솔루션은 약하다고 생각합니다. 내 방식이 직접적인 표준 표준 방식이 아니라는 것을 알고 있지만 표준 방식은 작동하지 않습니다. 편집 및 디스플레이 모드를 결합하면 (선택 선택 선택) : - 표준 SharePoint 게시 사이트는 모두 똑같이 보이지만 편집 모드에서 OK가 작동합니다. 이는 편집하기가 거의 불가능합니다. 모스 WCM 스타일 시트와 함께 디스플레이 모드에 필요한 스타일 시트 사이에 많은 충돌이 있습니다. 우리는 그것을 작동시키기 위해 모든 종류의 보상 스타일 시트를 작성했지만 ***의 고통입니다. 편집 할 수 있도록 페이지에 스타일이있는 코드를 주입하는 것은 주요한 결함입니다. 편집중인 페이지 외부에서 완전히 수행해야합니다. 예를 들어 편집중인 페이지 상단의 부동 창으로 표시 될 수있는 iframe에서. 그러나 이것은 사실이 아닙니다. 그런 다음 페이지에 탭이나 아코디언 컨트롤이있을 때 발생하는 문제조차 언급하지 않았습니다.

우리는 많은 컨텐츠 관리를 수행 해야하는 실제 대화식 웹 2.0 사이트를 목표로하고 있습니다. SharePoint 방식으로 바로 편집 모드를 얻는 것은 작동하지 않습니다.

최적의 편집 경험이 중요합니다. 따라서 모든 편집 가능한 요소에 명확하고 일관된 방식으로 도달 할 수 있도록 편집에 최적화 된 MasterPage 및 PagelAyout을 사용해보십시오. 그러나 여전히 디스플레이 모드가 필요합니다. SharePoint에서 생성 된 데이터 만 사용하는 완전한 별도 사이트를 사용하여 수행 할 수 있습니다. 이 사이트는 ASP.NET 사이트 일 수 있거나 HTML MVC를 완전히 제어 할 수있는 경우 사용할 수 있습니다. 나는 그런 식으로 가고 싶지 않지만 탐색, 보안, 제어 재사용, 웹 부품 사용 등에 많은 영향을 미칩니다.

편집을 위해 최적화 된 MasterPage/PagelAyout을 사용하고 PagelAyout에서 최소한의 코드 세트와 함께 표시하는 데 사용되는 MasterPage/PagelAyout이 사용되면 두 세계를 최대한 활용할 수 있다고 생각합니다.

그래서 .. 답을 계속 해주세요!

반드시 Microsoft.sharePoint.publishing.publishingLayoutPage를 서브 클래스링해야하며 "편집 모드"에 따라 필요한 실제 PublishingLayoutPage의 내용을 렌더링하는 데 사용해야합니다.

마스터 페이지를 변경하는 방법 ... EK.

SharePoint를 다시 원하는 대로 구부리려고 하시나요?;)

나는 너의 고통을 느낀다.비슷한 동작을 얻기 위해 두 가지 방법을 사용하고 있습니다.

당신이 제안한 것처럼 페이지의 일부를 조건부로 렌더링하는 컨테이너 컨트롤입니다.처음에는 일부 필드에 특정 값이 있어서 HTML이 렌더링되지 않을 때 페이지의 일부를 숨기는 데 필요했습니다.보다 래퍼 컨트롤.컨트롤 자체는 매우 간단합니다. 클래스에 [ParseChildren(false)]가 필요하며, 조건이 충족되지 않으면 렌더링 메서드는 기본 렌더링을 호출하지 않습니다.이를 확장하여 편집자와 디자이너에게 완전히 다른 페이지를 표시할 수 있지만 모두 여전히 동일한 페이지에 있습니다.분석가가 사용하는 부분을 제거하여 자체 사용자 컨트롤에 넣을 수는 있겠지만 유지 관리가 쉽지 않습니다.

둘째, 양식 페이지입니다."/Pages/Forms/EditForm.aspx?ID=1"은 게시 페이지의 모든 필드를 깔끔하게 보여줍니다.방해가 되는 디자인은 없습니다.(저는 이 라이브러리와 현재 페이지 라이브러리에 대한 한 번의 클릭 액세스를 제공하고 사용된 콘텐츠 유형과 페이지 레이아웃을 표시하는 모든 페이지 레이아웃에 대한 컨트롤을 사용합니다.WCM 사이트를 구축할 때 매우 유용합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top