كيفية التبديل ديناميكيا Pagelayout و MasterPage من صفحة النشر SharePoint؟

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

سؤال

لتحسين كل من تحرير وإظهار تجربة صفحات النشر SharePoint WCM، أود أن أكون قادرا على التبديل إلى مجموعة خاصة من masterPage / pagelayout عندما تكون في وضع التحرير.

لذلك في / _catalogs / masterpage أريد أن يكون لديك:

MyAmasterPage.master - MasterPage For Display Mode MyMasterPage-Edit.master - MasterPage لتحرير وضع، استخدم فقط إذا كان متاح MyPagelayout.aspx - Pagelayout لعرض العرض MyPagelayout-Edit.aspx - Pagelayout لتحرير وضع، استخدم فقط إذا كان ذلك متاحا

عندما أقوم بإنشاء صفحة نشر جديدة في مكتبة الصفحات، اخترت تخطيط صفحة 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;
}

إذا كان وضع Render هو تحرير، أريد التبديل إلى MyMasterPage-Edit.master Materpage و MyPagelayout-Edit.aspx Pagelayout.

يمكنني إجراء مفتاح كبير في MasterPage و Pagelayout التي يتم التحكم فيها بواسطة عناصر تحكم الخادم، لكني أرغب في تقسيم التنفس. يمكن أن يكون SwePoint Analeist إنشاء صفحات وضع التحرير الأمثل، ويمكن لمطور الواجهة الأمامية إنشاء صفحات وضع عرض نظيفة وجميلة دون كل فوضى التحرير.

أي أفكار بشأن كيفية تحقيق ذلك؟ لا يبدو أن تبديل ماسغراج المشكلة، لقد كتبت ذات مرة مشاركة مدونة على هذا. يبدو أن الشيء الصعب تبديل تخطيط الصفحة.

هل كانت مفيدة؟

المحلول 6

الجواب النهائي على هذا السؤال هو الآن "مخبوز" في منتج نسميه Duallayout ل SharePoint! نهجنا يحل كل ما تبذلونه من كابوس تصميم WCM SharePoint:

  • قدم عرضا إضافيا للمستخدم النهائي، إلى جانب تحرير WCM وعرض وجهات النظر
  • لم يكن لديك اشتباكات بين أنماط SharePoint وأنماط خاصة بك
  • جعل العجاف وتعني "عرض" الصفحات الرئيسية وتخطيطات الصفحة التي لا تتداخل مع الصفحات الرئيسية WCM تخطيطات الصفحات
  • جعل صفحات فائقة خفيفة للمستخدم النهائي، وإزالة جميع فوضى صفحة SharePoint الخاصة
  • تحسين أداء الصفحات لأن لدينا سوى مجموعة ضئيلة من عناصر التحكم لتقديمها في عرض المستخدم النهائي

التحقق من ذلك في http://www.macaw.nl/het+bedrijf/producten/macaw+duallayout+for+sharepoint.aspx., ، راجع مشاركات المدونة في لفة بلوق من تلك الصفحة للحصول على معلومات أساسية مفصلة.

نصائح أخرى

أعتقد أنك ستكون تقاتل SharePoint إذا كنت تستمر في أسفل هذا الطريق، أخشى أن أصبحت أيضا شيئا من كابوس الدعم لأنها تصبح أقل وضوحا عندما تكمن المشاكل أو تذكر إجراء تغييرات في كلا (أو كل أربعة!) عند شيء ما يتم تحديث.

يمكنك أن تكون لديك عناصر تحكم تظهر أو تخفيها وفقا لتحديث الصفحة، فما الذي يظهر للمستخدم مختلف تماما ولكن لا يزال كل التعليمات البرمجية لصفحة في مكان واحد.

التحقيق في editmodepanel.

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

أدرك أن هذا ليس ما طلبته تماما ... ولكن أجد أن القتال SharePoint هو معركة خاسرة عليك فقط العمل مع "طريقة".

لقد كتبت ذات مرة ميزة لتبديل تخطيطات الصفحات حسب معايير مختلفة. كان الفرق، أن تخطيط الصفحة قد تم تغييره أثناء إنشاء الموقع، وليس في طريقة العرض أو تحرير الوضع. الرمز لتغيير تخطيط الصفحات هو كما يلي:

    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 كما لو كان إجابة، لكن سؤالي لا يزال!

مرحبا عيدان، أرى SharePoint كمنصة حيث يمكنك بناء حلولك. وأعتقد أن محلول WCM الذي تم بناؤه بواسطة Microsoft On Top of the Platform ضعيف. أعرف طريقي ليس مباشرة طريقة SharePoint Standard، ولكن الطريقة القياسية لا تعمل فقط. يؤدي الجمع بين تحرير ووضع العرض إلى (اختيار اختيارك): - مواقع نشر SharePoint القياسية التي تبدو جميعها على حد سواء ولكن العمل موافق في وضع التحرير - موقع قابل للتحرير للغاية ولكنه أساسي للغاية في مظهره - موقع رائع في وضع العرض، من المستحيل تقريبا تحرير الكثير من الاشتباكات بين التصنيفات اللازمة في وضع العرض مع ورقة STYLESHEET MOSS WCM. لقد كتبنا جميع أنواع أنواع الأساليب للحصول عليها، لكنها ألم في ***. إنه عيب كبير لحقن الكود مع الأساليب في صفحتك لإجراء التحرير ممكنا، كان يجب القيام بذلك خارج الصفحة تماما تحريرها. في IFRAME على سبيل المثال والتي يمكن عرضها كإطار عائم أعلى الصفحة التي تحرزها. ولكن هذا ليس هو الحال. وبعد ذلك، لم أذكر حتى المشكلات التي لديك عندما يكون لديك علامات تبويب أو عنصر تحكم أكورديون في صفحتك.

نحن نستهدف مواقع الويب التفاعلية التفاعلية حقا حيث يجب إجراء الكثير من إدارة المحتوى. الحصول على وضع التحرير الحق في الطريق SharePoint فقط لا يعمل.

تجربة التحرير الأمثل هي المفتاح. فلماذا لا تستخدم MasterPage و Pagelayout المحسن للتحرير، لذا فإن الوصول إلى جميع العناصر القابلة للتحرير بطريقة واضحة ومتسقة. ولكن بعد ذلك ما زلت بحاجة إلى وضع العرض. يمكن القيام بذلك باستخدام موقع منفصل كامل يستخدم البيانات المنتجة في SharePoint. يمكن أن يكون هذا موقع ASP.NET، أو إذا كنت ترغب في استخدام التحكم الكامل عبر HTML MVC. أنا لا أذهب في هذه الطريقة، لأنه ولكن لديه الكثير من الآثار في الملاحة والأمن وإعادة استخدام الضوابط واستخدام أجزاء الويب وما إلى ذلك.

أعتقد أنك تحصل على أفضل ما في العالمين إذا تم استخدام MasterPage / Pagelayout الذي تم تحسينه للتحرير، ويستخدم زوجان آخران من MasterPage / Pagelayout للعرض فقط مع الحد الأدنى من التعليمات البرمجية في Pagelayout.

لذلك .. احتفظ بالإجابات القادمة من فضلك!

بالتأكيد من شأنها أن تتطلب الفئة الفئة الفرعية microsoft.sharepoint.publishing.publishementlayoutpage واستخدام ذلك لتقديم محتويات النشر الفعلي للوحدات البيئية المطلوبة وفقا ل "وضع التحرير".

كيفية تغيير صفحة رئيسية ... EK.

محاولة ثني SharePoint إلى إرادتك مرة أخرى؟ ؛)

أشعر بألمك. أنا أستخدم 2 طرق للحصول على سلوك مماثل:

تحكم في الحاويات إلى تجسد أجزاء من الصفحات، وأعتقد أنك اقترحت. في البداية كنت بحاجة إليها لإخفاء أجزاء من الصفحة عندما يكون لدى بعض الحقل قيمة محددة، لذلك لم يتم تقديم HTML. يرى عناصر تحكم المجمعوبعد التحكم نفسه بسيط للغاية، فإنه يحتاج إلى [parsechildren (false)] على فئتها وطريقة التجسيد لا يسميها إلى تقديم قاعدة إذا لم يتم الوفاء بالحالة. يمكنك تمديد هذا لعرض صفحة مختلفة تماما إلى محرر ومصمم على الرغم من أنها ستظل جميعها تعيش في نفس الصفحة. أعتقد أنك يمكن أن تجريد الجزء المستخدمة من قبل الناجل ووضعه في Usercontrol الخاص به ولكن هذا ليس الصيانة للغاية.

ثانيا، صفحة النموذج، على سبيل المثال "/pages/forms/editform.aspx؟id=1"، تعطي رؤية نظيفة لجميع الحقول على صفحة النشر .. لا يوجد تصميم للحصول على الطريق. (يمكنني استخدام عنصر تحكم في جميع تخطيطات الصفحة التي توفر 1 نقرة الوصول إلى هذه، ومكتبة الصفحات الحالية ويعرض نوع المحتوى وتخطيط الصفحة المستخدمة. مفيد للغاية عند بناء مواقع WCM.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top