Ajouter des propriétés personnalisées « Edit Mode » dans la publication du site - Créer comme WSP

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/13836

Question

J'ai 2 champs personnalisés qui sont associés aux fonctions d'édition Page type de contenu. Tout en regardant la page, dans le ruban, je peux cliquer sur Edit Properties pour afficher toutes les propriétés de ma page. Mes 2 propriétés personnalisées apparaissent et faites des économies bien.

Je voudrais avoir mes 2 propriétés personnalisées apparaissent lorsque vous cliquez sur « Modifier la page », de la même manière que la page Title a un champ modifiable. J'ai trouvé le <PublishingWebControls:EditModePanel> dans les mises en page. I prendre Je peux modifier la mise en page et être fait avec elle.

Comment puis-je créer cela comme une caractéristique déployable pour que je n'ai pas modifier manuellement chaque mise en page associée à ce type de contenu?

Modifier 1

Je suis en mesure de voir une zone de texte pour mes 2 propriétés personnalisées en mode d'édition quand j'ajoute 2 champs de texte à l'intérieur de la EditModePanel. Je peux voir et mettre à jour mon texte très bien. Mais je dois être en mesure de fournir une solution déployable.

Edit 2

Je suis fondamentalement d'essayer de recréer ce que vous voyez visuellement ici dans la capture d'écran. Propriétés personnalisées dans le mode d'édition de la page. J'ai ouvert la WSP ci-joint et il semble qu'une fonction est déléguée au AdditionalPageHead. Ainsi, l'ensemble doit avoir une sorte de logique pour déterminer le type et l'état de la page.

Modifier 3

Je fini par écrire un billet de blog avec la solution finale qui peut être trouvée ici

Était-ce utile?

La solution

La façon dont je l'ai fait est d'avoir une fonction (site-collection scope) qui a:

  • Vos deux nouveaux champs
  • Un type de contenu qui hérite de la page, qui comprend vos deux champs comme FieldRefs
  • Un module pour déployer votre mesure Mise en page, et associe les type de contenu.

Chris O'Brien a couvert cela dans ce billet de blog . Aussi Voici comment déployer des types de contenu dans les fonctionnalités aussi. Vous pouvez avoir tout cela dans la même fonction.

Mise à jour: @ webdes03 demandé une question aujourd'hui où il déployait sa mise en page, a un exemple de préfet du code Elements.xml pour cela.

Autres conseils

Je l'ai déjà accepté la réponse de James comme il m'a fourni les informations dont je avais besoin pour obtenir la solution. Mais pour référence future, voici une solution de code viable. Je ne sais pas si cela pourrait être optimisé pour fonctionner plus efficacement (comme la vérification du type de contenu), comme il est ajouté à chaque page.

Le procédé est comme suit

  1. Vérifiez que la page en cours est un élément de la liste
  2. Dans ce cas, est le type de contenu hérite de "Page"?
  3. Si nous sommes en mode d'édition ou c'est une nouvelle forme
  4. Trouvez PlaceHolderMain dans la page principale
  5. Obtenir de notre FieldRenderingControl et les ajouter à PlaceHolderMain

Désolé, mais je ne peux pas comprendre le bloc de code putain. La première instruction if n'y est pas fixe - James Love

if (SPContext.Current != null && SPContext.Current.ListItem != null)
{
    SPContentTypeId pageContentType = SPContext.Current.Web.ContentTypes["Page"].Id;
    if (SPContext.Current.ListItem.ContentType.Id.Equals(pageContentType) ||
    SPContext.Current.ListItem.ContentType.Parent.Id.Equals(pageContentType))
    {
        if (PublishingPage.IsPublishingPage(SPContext.Current.ListItem))
        {
            if (SPContext.Current.FormContext.FormMode == SPControlMode.Edit || SPContext.Current.FormContext.FormMode == SPControlMode.New)
            {
                ContentPlaceHolder placeHolderMain = (ContentPlaceHolder)this.Page.Master.FindControl("PlaceHolderMain");
                if (placeHolderMain != null)
                {
                    SPField seoDescription;
                    try {
                        seoDescription = SPContext.Current.ListItem.Fields["seoDescription"];
                    }
                    catch {
                        seoDescription = null;
                    }
                    if (seoDescription != null)
                    {
                        BaseFieldControl seoDescriptionControl = seoDescription.FieldRenderingControl;
                        if (seoDescriptionControl != null)
                        {
                            seoDescriptionControl.ID = seoDescription.InternalName;
                            placeHolderMain.Controls.Add(seoDescriptionControl);
                        }
                    }
                    SPField seoKeywords;
                    try {
                        seoKeywords = SPContext.Current.ListItem.Fields["seoKeywords"];
                    }
                    catch {
                        seoKeywords = null;
                    }
                    if (seoKeywords != null)
                    {
                        BaseFieldControl seoKeywordsControl = seoKeywords.FieldRenderingControl;
                        if (seoKeywordsControl != null)
                        {
                            seoKeywordsControl.ID = seoKeywords.InternalName;
                            placeHolderMain.Controls.Add(seoKeywordsControl);
                        }
                    }
                }
            }
        }
    }
}

Et la magie! Les 2 champs sont ajoutés dans les champs d'édition existantes et apparaissent comme si elles sont hors de la boîte! Nous pourrions soit re-leur style ou congé comme est.

Modifier

Shameless plug: A écrit un billet de blog à cette solution ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top