2009-08-12 4 views
3

J'ai créé un gabarit personnalisé dans sharepoint qui contient beaucoup d'images (disons 200). Comment puis-je regrouper tous les fichiers à provisionner dans la bibliothèque de styles d'une collection de sites? La seule façon que je sais de le faire est à travers une fonctionnalité, mais cela signifie la liste de tous les fichiers (tous les 200) comme un élément <file></file>. Y a-t-il un moyen plus facile? L'attribut IncludeFolders = "?? - ??" en <module></module> ne semble pas faire quoi que ce soit.Image de marque Sharepoint - Provisionnement de fichiers multiples

Si tous les fichiers image se trouvent dans un dossier de mon dossier de fonction (par exemple ... \ template \ features \ myFeature \ images), existe-t-il un moyen de provisionner le dossier complet dans la bibliothèque de styles?

Merci.

Répondre

4

Ce fichier module.xml se trouve dans un dossier nommé "Images". Toutes les images sont également dans ce dossier (en utilisant les outils de développement de sharepoint pour Visual Studio 2008 v1.3). Le paquet wsp a besoin de connaître tous les fichiers qui s'ajoutent donc vous devez ajouter chaque fichier. (Renommer le .wsp à .CAB et ouvrir Vous pouvez alors voir tous les fichiers de la solution.)

<Elements Id="8f8113ef-75fa-41ef-a0a2-125d74fc29b7" xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Module Name="Images" Url="Style Library/Images/myfolder" RootWebOnly="TRUE"> 
    <File Path="hvi_logo.bmp" Url="hvi_logo.bmp" Type="GhostableInLibrary" /> 
    <File Path="hvi_logo_small.bmp" Url="hvi_logo_small.bmp" Type="GhostableInLibrary" /> 
    <File Path="epj-logo.png" Url="epj-logo.png" Type="GhostableInLibrary" /> 
    </Module> 
</Elements> 

Vous pouvez Wirte une petite application C# pour créer le fichier xml pour vous, quelque chose comme ceci:

var info = new DirectoryInfo(@"c:\pathToImageFolder"); 
     var files = info.GetFiles(); 

     TextWriter writer = new StreamWriter(@"c:\pathToImageFolder\module.xml"); 

     writer.WriteLine("<Elements Id=..."); 
     foreach (FileInfo file in files) 
     { 
      writer.WriteLine(string.Format("<File Path='{0}' Url='{0}' Type='GhostableInLibrary' />",file.Name)); 
     } 
     writer.WriteLine("</Elements>"); 
     writer.Flush(); 
     writer.Close(); 
+0

Merci pour votre réponse. Bonne suggestion pour créer dynamiquement le fichier modules.xml par programmation. Je vais essayer de faire ça. –

1

est ici une fonction Powershell rapide qui fonctionne pour moi:

function Enum-FilesInPath 
{ 
    param([string]$path) 

    Get-ChildItem -path $path | foreach-object { 
     # if a directory, recurse... 
     if ($_.PSIsContainer) 
     { 
      $recursivePath = [string]::Format("{0}\{1}", $path, $_.Name) 
      Enum-FilesInPath $recursivePath 
     } 
     # else if a file, print out the xml for it 
     else 
     { 
      $finalPath = [string]::Format("{0}\{1}", $path, $_.Name) 
      $url = $finalPath.Replace("\", "/") # backslashes for path, forward slashes for urls 
      [string]::Format("`t<File Url=`"$url`" Path=`"$fullPath`" Type=`"GhostableInLibrary`" />") 
     } 
    } 
} 
Questions connexes