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`" />")
}
}
}