none
[MOSS 2007] Générer un lien de la master en fonction d'un champ de la page RRS feed

  • Question

  • Bonjour,

    je voudrais générer un lien placé dans ma master page en fonction de la valeur d'un champ de la page affiché.

    En fait, dans mon type de contenu de page, j'ai un champ "objet" de type "choix" et je voudrais que la valeur de ce choix soit reprise en tant que paramètre dans un lien de la master page : http://monurl/mapage.aspx?objet=[valeur_de_mon_champ_objet]

    Comment cela est-il possible ?

    Merci par avance.
    mardi 1 avril 2008 12:21

Réponses

  • Finalement, j'ai réussit à faire ce que je voulais mais c'est une grosse bidouille à mon goût...

    J'ai donc créé une nouvelle colonne "ObjectLink" dans ma collection de site, de type champs calculé, à partir de mon champs "Object". En voici la formule :

    Code Snippet

    ="<a href='http://monurl/mapage.aspx?objet="&[Object]&"'>Objet</a>"


    Dans ma master page j'ai créé un nouveau placeholder dans un div dont j'ai mis le "display" en "none" :

    Code Snippet

            <div id="objectlinkdiv">
                <asp:ContentPlaceHolder id="PlaceHolderObjectLink" runat="server" />
            </div>


    Dans mon modèle de page, j'ai rempli mon placeholder avec la colonne calculée :

     

    <asp:Content ContentPlaceholderID="PlaceHolderObjectLink" runat="server">
    <SharePointWebControls:CalculatedField FieldName="ObjectLink" runat="server"></SharePointWebControls:CalculatedField>
    </asp:Content>

    Dans la master page j'ai ajouté un javascript qui me permet de récupéré la valeur de mon champ calculé et de le mettre dans l'élément HTML ou doit se trouver mon lien :

     

    <script language="javascript" type="text/javascript">
       <!--//BEGIN Script
       var objectlinkdiv = document.getElementById("objectlinkdiv");
       if(objectlinkdiv){
        var objectlinkdivhtml = html_entity_decode(objectlinkdiv.innerHTML);
        if(objectlinkdivhtml != ""){
         document.getElementById("objectlink").innerHTML = objectlinkdivhtml;
        }
       }
       //-->

    </script>

     

    ("html_entity_decode" est une fonction javascript que j'ai récupéré sur le net, qui permet de décoder le HTML)

     

    Cette solution fonctionne mais je la trouve vraiment sale, donc si quelqu'un a une meilleure solution, sans javascript de préférence, qu'il n'hésite pas...

     

    Merci Sébastien pour ton aide.

     

    (PS : je n'ai pas mis de bloque de code pour mes 2 derniers exemples parce qu'a chaque fois que j'essayait de le faire cela transformait les précédents)

     

    mercredi 2 avril 2008 16:04

Toutes les réponses

  • Bonjour

     

    je vous propose une solution via du script côté client.

     

    votre liste contenant votre colonne de type choix peut disposer d'un champs particulier, champs calculé (ou bien un champ provenant d'une définition de liste) contenant du code javascript du style :

     

    Code Snippet
    document.getElementByID("monURLgeneree").InnerHTML = "<a href='http://monurl/mapage.aspx?objet=' + ID";

     

    Vous pouvez également ajouté ce champs calculé via l'API SharePoint, en ajoutant un SPField à votre liste. Vous aurez alors la main sur le rendu du champs.

     

    Pour illustrer mes propos, prenez la colonne "Titre". Elle existe plusieurs fois. L'une d'elle est purement textuelle, les autres laissent apparaître un menu contextuel... c'est un exemple de script dans le rendu d'un des champs de liste.

     

     

     

     

     

     

     

    mardi 1 avril 2008 12:39
    Modérateur
  • Oui mais je dois bien placé mon champ dans une balise <script/> ? Car ce n'est pas possible... 
    mardi 1 avril 2008 15:11
  • Regardez le fichier suivant : C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\DiscussionsList\Discuss\schema.xml.

     

    Il contient des exemples de script dans l'HTML des listes. Vous devrez reproduire le même genre de code pour obtenir le resultat que vous attendez.

    mardi 1 avril 2008 17:25
    Modérateur
  • Le problème est que dans mon cas, je n'utilise pas de feature. Je ne peux utiliser que l'interface de gestions des paramètre de ma collection de site, donc je n'utilise que le champs "Formule" du formulaire de modification de mon champs dans lequel les balises de type "<HTML>", "<![CDATA[]]>", ... ne semble pas passer...
    mercredi 2 avril 2008 08:30
  • Finalement, j'ai réussit à faire ce que je voulais mais c'est une grosse bidouille à mon goût...

    J'ai donc créé une nouvelle colonne "ObjectLink" dans ma collection de site, de type champs calculé, à partir de mon champs "Object". En voici la formule :

    Code Snippet

    ="<a href='http://monurl/mapage.aspx?objet="&[Object]&"'>Objet</a>"


    Dans ma master page j'ai créé un nouveau placeholder dans un div dont j'ai mis le "display" en "none" :

    Code Snippet

            <div id="objectlinkdiv">
                <asp:ContentPlaceHolder id="PlaceHolderObjectLink" runat="server" />
            </div>


    Dans mon modèle de page, j'ai rempli mon placeholder avec la colonne calculée :

     

    <asp:Content ContentPlaceholderID="PlaceHolderObjectLink" runat="server">
    <SharePointWebControls:CalculatedField FieldName="ObjectLink" runat="server"></SharePointWebControls:CalculatedField>
    </asp:Content>

    Dans la master page j'ai ajouté un javascript qui me permet de récupéré la valeur de mon champ calculé et de le mettre dans l'élément HTML ou doit se trouver mon lien :

     

    <script language="javascript" type="text/javascript">
       <!--//BEGIN Script
       var objectlinkdiv = document.getElementById("objectlinkdiv");
       if(objectlinkdiv){
        var objectlinkdivhtml = html_entity_decode(objectlinkdiv.innerHTML);
        if(objectlinkdivhtml != ""){
         document.getElementById("objectlink").innerHTML = objectlinkdivhtml;
        }
       }
       //-->

    </script>

     

    ("html_entity_decode" est une fonction javascript que j'ai récupéré sur le net, qui permet de décoder le HTML)

     

    Cette solution fonctionne mais je la trouve vraiment sale, donc si quelqu'un a une meilleure solution, sans javascript de préférence, qu'il n'hésite pas...

     

    Merci Sébastien pour ton aide.

     

    (PS : je n'ai pas mis de bloque de code pour mes 2 derniers exemples parce qu'a chaque fois que j'essayait de le faire cela transformait les précédents)

     

    mercredi 2 avril 2008 16:04