Sharepoint Branding - предоставление нескольких файлов

Я создал собственную мастер-страницу в sharepoint, в которой много изображений (скажем, 200). Как упаковать все файлы для предоставления в библиотеку стилей семейства сайтов? Единственный способ, которым я знаю, - это использовать функцию, но это означает, что каждый файл (все 200 из них) перечисляется как <file></file> элемент. Есть ли более простой способ? Атрибут IncludeFolders="??-??" в <module></module> кажется, ничего не делает.

Если все файлы изображений находятся в папке внутри моей папки компонентов (например,...\template\features\myFeature\images), есть ли способ предоставить всю папку в библиотеку стилей?

Благодарю.

2 ответа

Решение

Этот файл module.xml находится в папке с именем "Images". Все изображения также находятся в этой папке (с использованием инструментов разработки sharepoint для visual studio 2008 v1.3). Пакет wsp должен знать все файлы, которые он добавляет, поэтому вы должны добавить каждый файл. (Переименуйте.wsp в.cab и откройте его. Затем вы сможете увидеть все файлы в решении)

 <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>

Вы можете написать небольшое приложение на C#, чтобы создать для вас xml-файл, что-то вроде этого:

 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();

Вот быстрая функция Powershell, которая работает для меня:

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`" />")
        }
    }
}
Другие вопросы по тегам