Огляд і мета
З коробки, ЛИШАЙНИК’ Веб-частина запиту вмісту (CQWP) відображає результати в формат списку, аналогічні результати пошуку. Також можливе для відображення результатів у формі таблиці (тобто. Формат HTML-таблиці). Сітка форматами є краще в деяких обставин. Я описую, як добитися цього ефекту в цій статті.
Бізнес-сценарій
Я працював з клієнтом на в масштабах підприємства свиті МОСС. Ми розробили іх таксономії, така, що проектів першого класу громадян в ієрархії і мають свій власний сайт верхнього рівня. Менеджери проектів вести список singleton відомості про проект, Наприклад, заголовок, бюджет, очікується завершення дата, Решта бюджету та інші поля тип зведення. Від "Сінглтон" Я маю на увазі за настроюваним списком SharePoint гарантовано містять лише один елемент. Спрощено, це виглядає так:
Технічний підхід, так само, як описано Тут (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). На CQWP використовує XSL-перетворення випромінювати HTML для веб-переглядача для візуалізації.
Я завжди уявити собі результат перш ніж поринути у XSL, оскільки XSL кошмар. Ось мій бажаного результату:
HTML наступним чином генерує цього результату:
|
<HTML>
<тіло>
<Центр>
<Таблиця кордону= 1>
<!-- Етикетки->
<TR BGCOLOR= синій>
<TD><шрифт колір= білий><b>Назва проекту</b></шрифт></TD>
<TD Вирівняти= вправо><шрифт колір= білий><b>Повна дата</b></шрифт></TD>
<TD Вирівняти= вправо><шрифт колір= білий><b>Бюджет</b></шрифт></TD>
<TD Вирівняти= вправо><шрифт колір= білий><b>Фактичні витрати</b></шрифт></TD>
<TD><шрифт колір= білий><b>Загальний стан</b></шрифт></TD>
</TR>
<TR>
<TD>Re-wire комп'ютерний зал.</TD>
<TD Вирівняти= вправо>02/01/08</TD>
<TD Вирівняти= вправо>22,500.00</TD>
<TD Вирівняти= вправо>19,000.00</TD>
<TD>Триває</TD>
</TR>
<TR>
<TD>Надання серверів для оновлення SQL</TD>
<TD Вирівняти= вправо>04/01/08</TD>
<TD Вирівняти= вправо>7,500.00</TD>
<TD Вирівняти= вправо>0.00</TD>
<TD>Заплановано</TD>
</TR>
</Таблиця>
</Центр>
</тіло>
</HTML>
|
Підхід
Виконайте такі дії, щоб створити сітку:
- Визначення учасників Грід (рядки/стовпці).
- Визначити та створення необхідних сайт стовпців.
- Створення сайтів sub для проектів і singleton списки.
- Додати до CQWP на веб-сторінку і налаштувати його для пошуку ваших списків.
- Змінити на CQWP XML збирати додаткові стовпці.
- Змінити XSL для створення таблиці.
Я збираюся зосередитися на номер шість. Цифри, один через чотири роки є прямий вперед і те, що вже зроблено будь-якого користувача CQWP. Номер п'ять був добре документовані за інших, включаючи ця вичерпний знімок екрана Ладена стаття з MSDN Тут (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) і Хізер Соломон блог Тут (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Гайки і Болти
Почати та здійснити кроки один-п'ять згідно з MSDN документації та Хізер Соломон статті.
На даний момент, Додавання ваших CQWP на сторінку і у вас є свій <CommonViewFields> налаштований в разі необхідності.
Наступні кроки звичайна, Я отримую ці проміжні результати:
1. Створити тип вмісту, templatized особливий список для цього типу вмісту та двох сайтів. Ось типу вмісту:
Ось структура сайту:
2. Додати до CQWP після створення мого проекту підсайтів і singleton списки резюме проекту:
3. Додати додаткову інформацію, я хочу, через що <CommonViewFields>:
<майно Ім’я="CommonViewFields" тип="рядок">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</майно>
Зверніть увагу, що я повинен був тримати всі поля властивостей на один рядок, або він не буде працювати (CQWP б сказати мені, що запит повернув жодних елементів).
4. На даний момент, Ми готові вийти за рамки статті MSDN і фліп Хізер Соломон статтю. Виконайте її дії, починаючи поблизу крок #5 Створення настроюваного / unghosted версія ItemStyle.xsl. Я слідувати порадам Хізер, вгору через крок 11 і отримати ці проміжні результати:
4.1: Назва мого XSL-шаблону наступним чином:
<перетворення XSL:ім'я шаблону = "сітки" матч = "рядок[@Style = "Сітка"]" режим = "itemstyle">
Я також трохи змінити її запропонував <перетворення XSL:для кожного …> шляхом додавання до <br /> тег, щоб забезпечити cleaner лістингу:
<перетворення XSL:для кожного Виберіть="@*">
P:<перетворення XSL:значення з Виберіть="Ім’я()" /><br/>
</перетворення XSL:для кожного>
4.2: Я змінити веб-частини, сторінку вигляд і виберіть пункт мої "сітки" стиль:
Застосувати зміни, і ось результат:
Ми можемо бачити з вище, що поля ми хочемо (Назва проекту, рахунок, статус, д) доступні для нас, щоб використовувати, коли ми випромінюють HTML. Не тільки це, але ми бачимо імена, за допомогою якого ми повинні посилатися на ці стовпці в XSL. Наприклад, Ми посилання стан проекту як "Project_x005F_x0020_Name".
На даний момент, Ми відійти від блог Heather's і від плечей ці гіганти, Я додаю мої власні трохи.
ContentQueryMain.xsl
ПРИМІТКА: Коли внесення змін до ContentQueryMain.xsl як ItemStyle.xsl, Ви повинні перевірити ці файли назад в, перш ніж ви побачити ефект від зміни.
Для цілей Грід рішень, ЛИШАЙНИК використовує два різні XSL-файли, виробляти результати, які ми бачимо з за CQWP. Генерувати попередній біт виводу, Ми змінили ItemStyle.xsl. ЛИШАЙНИК фактично використовує інший файл XSL, ContentQueryMain.xsl до в поєднанні з ItemStyle.xsl генерувати його HTML. Як випливає з її назви, ContentQueryMain.xsl є головним"" XSL, яка контролює загальний потік перекладу. Це повторюється через всіх знайдених елементів та їх по черзі шаблони в ItemStyle.xsl. Ми будемо змінювати ItemStyle.xsl генерувати відкриту <Таблиця> Тег перед випромінюють перший рядок даних і закриття <Таблиця> Тег після випускають останній рядок. Для досягнення цієї мети, ContentQueryMain.xsl модифікація пройти два параметри до нашого "сітки" шаблон у ItemStyle.xsl, "останній рядок" і "поточний рядок". ItemStyle.xsl використовує дані умовно випромінювати необхідні Теги.
За допомогою техніки Хізер Соломона, ми знайти ContentQueryMain.xsl. Він знаходиться на тому ж місці, як ItemStyle.xsl. Цей знімок екрана повинен допомогти:
Нам необхідно внести наступні зміни:
- Змінити xsl-шаблону, "CallItemTemplate" що дійсно викликає шаблон нашого сітки в ItemStyle.xsl. Ми пройдемо два параметри сітки шаблон, так що вона буде мати даних, він повинен генерувати умовно відкриття і закриття <Таблиця> Мітки.
- Змінити ще трохи ContentQueryMain.xsl, який називає "CallItemTemplate" Щоб передати його "LastRow" параметр, так що LastRow може бути переданий шаблон нашого сітки.
Знайти шаблон з іменем «OuterTemplate.CallItemTemplate" визначені нитка:
<перетворення XSL:Шаблон Ім’я="OuterTemplate.CallItemTemplate">
Замінити весь шаблон наступним чином:
|
<перетворення XSL:Шаблон Ім’я="OuterTemplate.CallItemTemplate">
<перетворення XSL:парам Ім’я="CurPosition" />
<!--
Додати "LastRow" параметр.
Ми тільки використовувати його, коли елемент стилю перевалу в "Сітка".
-->
<перетворення XSL:парам Ім’я="LastRow" />
<перетворення XSL:вибрати>
<перетворення XSL:Коли тест="@Style = 'NewsRollUpItem'">
<перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
<перетворення XSL:з парам Ім’я="EditMode" Виберіть="$cbq_iseditmode" />
</перетворення XSL:застосовувати шаблони>
</перетворення XSL:Коли>
<перетворення XSL:Коли тест="@Style = 'NewsBigItem'">
<перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
<перетворення XSL:з парам Ім’я="CurPos" Виберіть="$CurPosition" />
</перетворення XSL:застосовувати шаблони>
</перетворення XSL:Коли>
<перетворення XSL:Коли тест="@Style = 'NewsCategoryItem'">
<перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
<перетворення XSL:з парам Ім’я="CurPos" Виберіть="$CurPosition" />
</перетворення XSL:застосовувати шаблони>
</перетворення XSL:Коли>
<!--
Пройти поточну позицію і lastrow до шаблону itemstyle.xsl сітка.
ItemStyle.xsl використовуватиме які випромінюють відкритою і закриття <Таблиця> Мітки.
-->
<перетворення XSL:Коли тест="@Style = "Сітка"">
<перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
<перетворення XSL:з парам Ім’я="CurPos" Виберіть="$CurPosition" />
<перетворення XSL:з парам Ім’я="Останнє" Виберіть="$LastRow" />
</перетворення XSL:застосовувати шаблони>
</перетворення XSL:Коли>
<перетворення XSL:в іншому випадку>
<перетворення XSL:застосовувати шаблони Виберіть="." режим="itemstyle">
</перетворення XSL:застосовувати шаблони>
</перетворення XSL:в іншому випадку>
</перетворення XSL:вибрати>
</перетворення XSL:Шаблон>
|
Коментарі підхожий пояснювальний зміни.
Звичайно, "OuterTemplate.CallItemTemplate" сама називається з іншого шаблону. Знайдіть цей шаблон за допомогою функції пошуку для цього текстового рядка:
<перетворення XSL:Шаблон Ім’я="OuterTemplate.Body">
Перегляньте інструкції в OuterTemplate.Body і вставляти параметра LastRow наступним чином (показано як коментар курсивом):
<перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.CallItemTemplate">
<перетворення XSL:з парам Ім’я="CurPosition" Виберіть="$CurPosition" />
<!-- Вставити параметром LastRow. -->
<перетворення XSL:з парам Ім’я="LastRow" Виберіть="$LastRow"/>
</перетворення XSL:дзвінок шаблон>
Після всіх цих, Ми, нарешті, є речі створені належним чином так, що нашими ItemStyle.xsl може випромінювати <Таблиця> Мітки у потрібному місці.
ItemStyle.Xsl
ПРИМІТКА: Знову, прибуття після внесення змін, щоб побачити ефект цих змін ItemStyle.xsl.
Ми маємо два завдання тут:
- Замінити весь шаблон сітки. Ви можете копіювати/вставити знизу.
- Додати деякі фетиш за межами визначенням шаблону, який дозволяє "formatcurrency" шаблон для роботи. (Ви можете сказати, що в мене є хитким ручкою на XSL).
Перший, у верхній частині ItemStyle.xsl, додати наступний рядок:
<!-- Деякі фетиш, що дає нам можливість відображення США. валюти. -->
<перетворення XSL:десятковий формат Ім’я="Персонал" цифра="D" />
<перетворення XSL:Шаблон Ім’я="За промовчанням" матч="*" режим="itemstyle">
Зверніть увагу, що я додав його безпосередньо перед тим, як на <перетворення XSL:ім'я шаблону = "типовий" …> визначення.
Наступний, повернутися до шаблон нашого сітки. Замінити весь шаблон сітки наведений нижче код. Це ретельно прокоментував, але, не соромтеся, напишіть мені або залишити коментар на моєму блозі, якщо у вас є питання.
|
<перетворення XSL:Шаблон Ім’я="Сітка" матч="Рядок[@Style = "Сітка"]" режим="itemstyle">
<!--
ContentMain.xsl проходить CurPos і останній.
Ми використовуємо ці умовно випромінювати відкритою і закриття <Таблиця> Мітки.
-->
<перетворення XSL:парам Ім’я="CurPos" />
<перетворення XSL:парам Ім’я="Останнє" />
<!-- Нижче подано змінні, незміненій від стандартних ItemStyle.xsl -->
<перетворення XSL:Змінна Ім’я="SafeImageUrl">
<перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.GetSafeStaticUrl">
<перетворення XSL:з парам Ім’я="UrlColumnName" Виберіть="'ImageUrl'"/>
</перетворення XSL:дзвінок шаблон>
</перетворення XSL:Змінна>
<перетворення XSL:Змінна Ім’я="SafeLinkUrl">
<перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.GetSafeLink">
<перетворення XSL:з парам Ім’я="UrlColumnName" Виберіть="'LinkUrl'"/>
</перетворення XSL:дзвінок шаблон>
</перетворення XSL:Змінна>
<перетворення XSL:Змінна Ім’я="DisplayTitle">
<перетворення XSL:дзвінок шаблон Ім’я="OuterTemplate.GetTitle">
<перетворення XSL:з парам Ім’я="Назва" Виберіть="@Title"/>
<перетворення XSL:з парам Ім’я="UrlColumnName" Виберіть="'LinkUrl'"/>
</перетворення XSL:дзвінок шаблон>
</перетворення XSL:Змінна>
<перетворення XSL:Змінна Ім’я="LinkTarget">
<перетворення XSL:Якщо тест="@OpenInNewWindow = "True"" >_ blank</перетворення XSL:Якщо>
</перетворення XSL:Змінна>
<!--
Тут ми визначаємо змінну, "tableStart". Це містить HTML-код, який ми використовуємо для визначення відкриття таблиці, а також підписи стовпців. Зверніть увагу, що якщо CurPos = 1, Вона включає в себе HTML теги CDATA.
В іншому випадку, вона буде порожня.
Значення tableStart є emited кожного разу, коли ItemStyle називається через ContentQueryMain.xsl.
-->
<перетворення XSL:Змінна Ім’я="tableStart">
<перетворення XSL:Якщо тест="$CurPos = 1">
<![CDATA[
<межу таблиці = 1>
<TR-bgcolor = "blue">
<TD><колір шрифту = "Біле"><b>Назва проекту</b></шрифт></TD>
<TD приєднуються = "право"><колір шрифту = "Біле"><b>Повна дата</b></шрифт></TD>
<TD приєднуються = "право"><колір шрифту = "Біле"><b>Бюджет</b></шрифт></TD>
<TD приєднуються = "право"><колір шрифту = "Біле"><b>Фактичні витрати</b></шрифт></TD>
<TD><колір шрифту = "Біле"><b>Загальний стан</b></шрифт></TD>
</TR>
]]>
</перетворення XSL:Якщо>
</перетворення XSL:Змінна>
<!--
Ще одна змінна, tableEnd просто визначає закриття таблиці тег.
Як і у tableStart, Це завжди emited. Саме тому його значення призначено умовно основі чи ми вже були передані останній рядок за ContentQueryMain.xsl.
-->
<перетворення XSL:Змінна Ім’я="tableEnd">
<перетворення XSL:Якщо тест="$CurPos = $Last">
<![CDATA[ </Таблиця> ]]>
</перетворення XSL:Якщо>
</перетворення XSL:Змінна>
<!--
Завжди виділяють вміст tableStart. Якщо це не перший рядок, який прийняв до нас за ContentQueryMain.xsl, Потім ми знаємо його значення буде пустою.
Вимкнути виводу втечі, тому що коли tableStart вона не порожні, Вона включає в себе фактичні HTML, які ми хочемо бути надані у браузері. Якщо ми не кажи XSL аналізатор відключити виводу втечі, він буде генерувати такі речі, як"<Таблиця>" Замість того, щоб"<Таблиця>".
-->
<перетворення XSL:значення з Виберіть="$tableStart" вимкнути виводу втечі="Так"/>
<TR>
<!--
P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
-->
<TD>
<перетворення XSL:значення з Виберіть="@Project_x005F_x0020_Name"/>
</TD>
<TD Вирівняти="право">
<перетворення XSL:значення з Виберіть="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TD>
<TD Вирівняти="право">
<перетворення XSL:дзвінок шаблон Ім’я="formatcurrency">
<перетворення XSL:з парам Ім’я="значення" Виберіть="@Project_x005F_x0020_Budget"></перетворення XSL:з парам>
</перетворення XSL:дзвінок шаблон>
</TD>
<TD Вирівняти="право">
<перетворення XSL:дзвінок шаблон Ім’я="formatcurrency">
<перетворення XSL:з парам Ім’я="значення" Виберіть="@Project_x005F_x0020_Expenses"> </перетворення XSL:з парам>
</перетворення XSL:дзвінок шаблон>
</TD>
<TD>
<перетворення XSL:значення з Виберіть="@Project_x005F_x0020_Status"/>
</TD>
<!--
Всі наступні закоментовано прояснити речі.
Однак, її повернути і все це в за <TD> щоб побачити його вплив.
-->
<!--
<DIV id = "linkitem" клас = "пункт">
<перетворення XSL:Якщо тест = "-довжина рядка($SafeImageUrl) != 0">
<DIV клас = "зображення області ліворуч">
<href = "{$SafeLinkUrl}" цільових = "{$LinkTarget}">
<IMG клас = "зображення фіксованої ширини" SRC = "{$SafeImageUrl}" Alt = "{@ImageUrlAltText}"/>
</на>
</DIV>
</перетворення XSL:Якщо>
<DIV клас = "посилання елемент">
<перетворення XSL:дзвінок шаблон Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href = "{$SafeLinkUrl}" цільових = "{$LinkTarget}" Назва = "{@LinkToolTip}">
<перетворення XSL:значення з виберіть = "$DisplayTitle" />
</на>
<DIV клас = "Опис">
<перетворення XSL:значення з select="@Description" />
</DIV>
</DIV>
</DIV>
-->
</TR>
<!--
Випромінюють закриття таблиці тег. Якщо ми не на останньому рядку,
Це буде порожнім.
-->
<перетворення XSL:значення з Виберіть="$tableEnd" вимкнути виводу втечі="Так"/>
</перетворення XSL:Шаблон>
<перетворення XSL:Шаблон Ім’я="formatcurrency">
<перетворення XSL:парам Ім’я="значення" Виберіть="0" />
<перетворення XSL:значення з Виберіть='Формат номера($значення, "$DDD,DDD,DDD.DD", "персонал")' />
</перетворення XSL:Шаблон>
|