Publié dimanche 2 mars 2008 03:30 par Adrien Siffermann

[MOSS 2007] Intégrer des champs de type Link et Image à ses types de contenu de page de publication

Nous allons voir aujourd'hui comment créer un type de contenu héritant de Page et intégrant des champs personnalisés de type Link et Image, ainsi que son modèle de page associé. Commençons par créer le fichier de définition du type de contenu.

CustomPage.xml :

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <ContentType

    ID="0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39005AB43615533C4e09BF40969BDF9856AE"

    Name="CustomPage"

    Group="Types de contenu personnalisés"

    Description="Définit un type de contenu d'une page de publication personnalisée."

    Version="1">

    <FieldRefs>

      <FieldRef ID="{87F3E3CF-0861-4629-8386-7E87034A7A12}" Name="CustomPageLogo" />

      <FieldRef ID="{8558B229-B874-4c84-BE54-4AD6FA82B186}" Name="CustomPageContact" />

    </FieldRefs>

  </ContentType>

</Elements>

L'identifiant de notre type de contenu est constitué de l'identifiant du type de contenu Page suivi d'un séparateur "00" et d'un nouveau GUID. Cette mécanique permet de définir que CustomPage hérite de Page. Pour ceux qui ne sont pas familiarisés avec les ID des types de contenu, je conseille la lecture de cet article MSDN. Dans la partie FieldRefs, nous renseignons les références aux champs personnalisés que nous allons définir dans un deuxième fichier.

CustomPage.Fields.xml :

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <Field

    ID="{87F3E3CF-0861-4629-8386-7E87034A7A12}"

    Type="Image"

    Name="CustomPageLogo"

    DisplayName="Logo de la page personnalisée"

    StaticName="CustomPageLogo"

    Group="Custom"

    RichText="True"

    RichTextMode="FullHtml">

  </Field>

  <Field

    ID="{8558B229-B874-4c84-BE54-4AD6FA82B186}"

    Type="Link"

    Name="CustomPageContact"

    DisplayName="Contact de la page personnalisée"

    StaticName="CustomPageContact"

    Group="Custom"

    RichText="True"

    RichTextMode="FullHtml">

  </Field>

</Elements>

Pour les champs de type Link et Image, il nous faut préciser les propriétés RichText et RichTextMode respectivement à "True" et "FullHtml". Ces propriétés permettent en effet de déterminer l'affichage des champs de contenu dans les modèles de page comme nous le verrons plus loin. Nous déployons à présent ces deux fichiers grâce à une feature SharePoint.

Feature.xml :

<Feature xmlns="http://schemas.microsoft.com/sharepoint/"

    Id="FF8936BA-2BFB-48b3-B0B2-99E2F4E2E51B"

    Title="Publishing Custom Page Content Type"

    Description="Defines a simple custom publishing page content type"

    Hidden="FALSE"

    Scope="Site"

    Version="1.0.0.0">

  <ElementManifests>

    <ElementManifest Location="CustomPage.Fields.xml" />

    <ElementManifest Location="CustomPage.xml" />

  </ElementManifests>

  <ActivationDependencies>

    <!-- Publishing Feature -->

    <ActivationDependency FeatureId="AEBC918D-B20F-4a11-A1DB-9ED84D79C87E" />

  </ActivationDependencies>

</Feature>

Après le déploiement et l'activation de notre feature sur un site de publication, nous retrouvons bien notre type de contenu avec les colonnes personnalisées dans les pages de paramètres du site.

Pour pouvoir créer une page de type CustomPage, il nous faut à présent créer un modèle de page pour ce type de contenu. Grâce à SharePoint Designer, nous insérons nos deux champs de contenu dans un nouveau modèle de page.

CustomPageLayout.aspx

<%@ Page="" language="C#"  Inherits="Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" meta:progid="SharePoint.WebPartPage.Document" %>

<%@ Register="" Tagprefix="SharePointWebControls" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register="" Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register="" Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register="" Tagprefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<asp:Content ContentPlaceholderID="PlaceHolderPageTitle" runat="server">

  <SharePointWebControls:FieldValue id="PageTitle" FieldName="Title" runat="server"/>

</asp:Content>

<asp:Content ContentPlaceholderID="PlaceHolderMain" runat="server">

  <PublishingWebControls:RichLinkField FieldName="CustomPageContact" runat="server" />

  <PublishingWebControls:RichImageField FieldName="CustomPageLogo" runat="server" />

</asp:Content>

Voilà, nous pouvons alors créer une nouvelle page se basant sur le modèle de page CustomPageLayout. En mode édition, tout est comme nous l'attendions, et nous pouvons éditer le contenu de nos champs de type Link et Image.

 

Mais lorsque nous publions la page, on remarque alors que les champs sont rendus sous forme de texte simple, et pas comme du code HTML... In fine, le rendu est comme si nous n'avions pas précisé les deux propriétés RichText et RichTextMode dont je vous parlais plus haut.

 

Là se trouve la subtilité des champs de type Link et Image. En effet, si la propriété RichText n'est pas prise en compte, c'est parce que la valeur de cette propriété est sensible à la casse (sic !). Il s'agit alors de remplacer dans le fichier CustomPage.Field.xml de définition des champs les lignes :

    RichText="True"

par

    RichText="TRUE"

En redéployant notre type de contenu, le rendu de la page est tel que nous le souhaitions ! 

Adrien

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Les 10 derniers blogs postés

- un Pacman en Silverlight 2b2 par Pierrick's Blog le il y a 4 heures et 47 minutes

- Une table -> deux entity types sans colonne discriminante en base, gestion des relations par Matthieu MEZIL le il y a 12 heures et 45 minutes

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00