Преглед и циљ
Оут оф тхе бок, МОСС’ Веб сегмент за упит садржаја (ЦКВП) приказује резултате у виду листе, similar to search results. It is also possible to display the results in a grid format (и.е. ХТМЛ формат табеле). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Пословни сценарио
I have worked with a client on an enterprise-wide MOSS rollout. We have designed their taxonomy such that projects are first class citizens in the hierarchy and have their own top level site. Project managers maintain a singleton list of project summary information, као што је наслов, буџет, Очекује датум завршетка, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, то изгледа овако:
Технички приступ је исто као што је описано овде (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). The CQWP uses an XSL transform to emit HTML for the browser to render.
I always envision the result before diving into the XSL because XSL is a nightmare. Here’s my desired result:
ХТМЛ овако ствара тај резултат:
|
<ХТМЛ>
<тело>
<центар>
<табела граница= 1>
<!-- Етикете ->
<тр бгцолорПлава =>
<тд><фонт боја= Бело><Б>Назив пројекта</Б></фонт></тд>
<тд алигнДесно =><фонт боја= Бело><Б>Комплетан датум</Б></фонт></тд>
<тд алигнДесно =><фонт боја= Бело><Б>Буџет</Б></фонт></тд>
<тд алигнДесно =><фонт боја= Бело><Б>Стварни трошак</Б></фонт></тд>
<тд><фонт боја= Бело><Б>Генерално статус</Б></фонт></тд>
</тр>
<тр>
<тд>Поново жица рачунара соба.</тд>
<тд алигнДесно =>02/01/08</тд>
<тд алигнДесно =>22,500.00</тд>
<тд алигнДесно =>19,000.00</тд>
<тд>У току</тд>
</тр>
<тр>
<тд>Резервисања СКЛ сервера за надоградњу</тд>
<тд алигнДесно =>04/01/08</тд>
<тд алигнДесно =>7,500.00</тд>
<тд алигнДесно =>0.00</тд>
<тд>Планиран</тд>
</тр>
</табела>
</центар>
</тело>
</ХТМЛ>
|
Приступ
Следите ове кораке да створи мрежу:
- Идентификовати компоненте мреже (редове / колоне).
- Дефинисати и створити неопходне колоне локације.
- Направите под сајтова за пројекте и једноплодним листама.
- Додајте ЦКВП на веб страницу и подесите га да тражи своје листе.
- Измена КСМЛ је ЦКВП да покупи додатне колоне.
- Измените КССЛ за генерисање табеле.
I’m going to concentrate on number six. Numbers one through four are straight-forward and something that any CQWP user has already done. Number five has been well-documented by others including this exhaustive screen-shot laden article from MSDN овде (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) и Хеатхер Соломонов блог овде (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Ораси и навртке
Почните и спроводи кроз пет корака један по МСДН документацију и Хедер Соломоновом чланак.
У овом тренутку, Додали сте свој ЦКВП на страницу и имате <ЦоммонВиевФиелдс> конфигурисан као неопходно.
Након уобичајене кораке, Имам те међурезултате:
1. Креирање типа садржаја, a templatized custom list for that content type and two sites. Here is the content type:
Овде је сајт структура:
2. Додајте ЦКВП након стварања мој пројекат подлокација и Синглтон листе резиме пројекта:
3. Додајте све додатне информације путем желим <ЦоммонВиевФиелдс>:
<имовина име="ЦоммонВиевФиелдс" тип="ниска">Пројецт_к0020_Наме;Пројецт_к0020_Екпенсес;Пројецт_к0020_Статус;Пројецт_к0020_Старт_к0020_Дате;Пројецт_к0020_Енд_к0020_Дате;Пројецт_к0020_Будгет</имовина>
Имајте на уму да сам морао да задржи сва поља имовине на једној линији, или то не би ишло (ЦКВП би ми рекао да је упит вратио ниједан артикал).
4. У овом тренутку, we’re ready to move beyond the MSDN article and flip on over to Heather Solomon’s article. Follow her steps starting near step #5 да створи прилагођене / unghosted version of ItemStyle.xsl. I follow Heather’s advice, кроз корак 11 и добити ове међурезултате:
4.1: Име мог шаблон КССЛ следећи:
<клс:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Ја мало да модификује јој предложио <клс:-за сваки …> додавањем <бр /> означите да обезбеди чистији листинг:
<клс:-за сваки изабрати="@ *">
П:<клс:вредности од изабрати="име()" /><БР/>
</клс:-за сваки>
4.2: Ја мења део веб, go to appearance and select my "Grid" стил:
Примените промене и овде је резултат:
Можемо да видимо из горе да поља желимо (Име пројекта, расход, статус, итд) are available for us to use when we emit the HTML. Not only that, but we see the names by which we must reference those columns in the XSL. На пример, we reference Project Status as "Project_x005F_x0020_Name".
У овом тренутку, Крећемо из блога Хедер и са раменима ових гиганата, Да додам свој мало.
ЦонтентКуериМаин.ксл
НАПОМЕНА: Приликом измене у оба ЦонтентКуериМаин.ксл као ИтемСтиле.ксл, потребно је да проверите те фајлове назад пре него што будете видели ефекат променама.
За израду Грид-сврхе, MOSS uses two different XSL files to produce the results we see from a CQWP. To generate the previous bit of output, we modified ItemStyle.xsl. MOSS actually uses another XSL file, ContentQueryMain.xsl to in conjunction with ItemStyle.xsl to generate its HTML. As its name implies, ContentQueryMain.xsl is the "main" XSL that controls the overall flow of translation. It iterates through all the found items and passes them one by one to templates in ItemStyle.xsl. We’ll modify ItemStyle.xsl to generate the open <табела> таг пре него што емитује први ред података и затварање <табела> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" шаблон у ИтемСтиле.ксл, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Using Heather Solomon’s technique, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
We need to make the following changes:
- Modify an xsl template, "CallItemTemplate" that actually invokes our Grid template in ItemStyle.xsl. We will pass two parameters to the Grid template so that it will have the data it needs to conditionally generate opening and closing <табела> ознаке.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" ЛастРов параметар тако да се могу пренети на нашу Грид предлошку.
Locate the template named "OuterTemplate.CallItemTemplate" препознати по низу:
<клс:шаблон име="ОутерТемплате.ЦаллИтемТемплате">
Замените цео шаблон на следећи начин:
|
<клс:шаблон име="ОутерТемплате.ЦаллИтемТемплате">
<клс:парам име="ЦурПоситион" />
<!--
Add the "LastRow" параметар.
We only use it when the item style pass in is "Grid".
-->
<клс:парам име="ЛастРов" />
<клс:изабрати>
<клс:када тест="@ Стил = 'НевсРоллУпИтем'">
<клс:аппли-темплатес изабрати="." начин="итемстиле">
<клс:са парам- име="ЕдитМоде" изабрати="$цбк_иседитмоде" />
</клс:аппли-темплатес>
</клс:када>
<клс:када тест="@ Стил = 'НевсБигИтем'">
<клс:аппли-темплатес изабрати="." начин="итемстиле">
<клс:са парам- име="ЦурПос" изабрати="$ЦурПоситион" />
</клс:аппли-темплатес>
</клс:када>
<клс:када тест="@ Стил = 'НевсЦатегориИтем'">
<клс:аппли-темплатес изабрати="." начин="итемстиле">
<клс:са парам- име="ЦурПос" изабрати="$ЦурПоситион" />
</клс:аппли-темплатес>
</клс:када>
<!--
Пасс тренутну позицију и ластров у шаблон Грид итемстиле.ксл.
ИтемСтиле.ксл ће користити да се емитују отворен и затварање <табела> ознаке.
-->
<клс:када тест="@ Стил = 'Мрежа'">
<клс:аппли-темплатес изабрати="." начин="итемстиле">
<клс:са парам- име="ЦурПос" изабрати="$ЦурПоситион" />
<клс:са парам- име="Последњи" изабрати="$ЛастРов" />
</клс:аппли-темплатес>
</клс:када>
<клс:иначе>
<клс:аппли-темплатес изабрати="." начин="итемстиле">
</клс:аппли-темплатес>
</клс:иначе>
</клс:изабрати>
</клс:шаблон>
|
Коментари описују сврху промене.
Наравно, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<клс:шаблон име="ОутерТемплате.Боди">
Кретање кроз упутства у ОутерТемплате.Боди и убаците ЛастРов параметар на следећи начин (приказано у напомени у курзиву):
<клс:позива шаблон име="ОутерТемплате.ЦаллИтемТемплате">
<клс:са парам- име="ЦурПоситион" изабрати="$ЦурПоситион" />
<!-- Убаците ЛастРов параметар. -->
<клс:са парам- име="ЛастРов" изабрати="$ЛастРов"/>
</клс:позива шаблон>
После свега овога, коначно смо ствари поставили правилно да би наш ИтемСтиле.ксл емитовати <табела> ознаке на правом месту.
ИтемСтиле.Кссл
НАПОМЕНА: Поново, пријавите ИтемСтиле.ксл после доношења било какве промене, тако да можете видети ефекат тих промена.
Овде имамо два задатка:
- Replace the entire Grid template. You can copy/paste from below.
- Add some mumbo jumbo outside the template definition that enables "formatcurrency" template to work. (Можете рећи да имам слабу регулатор на КССЛ).
Прво, близу врха ИтемСтиле.ксл, Додајте ову линију:
<!-- Неки мамбо џамбо који нам омогућава да прикажете У.С. валута. -->
<клс:Децимално формату име="особље" цифра="Д" />
<клс:шаблон име="Уобичајено" меч="*" начин="итемстиле">
Имајте на уму да сам је додао непосредно пре <клс:template name="Default" …> дефиниција.
Следећи, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, али не оклевајте да ми е-маил или оставите коментар на мом блогу, ако имате питања.
|
<клс:шаблон име="Решетка" меч="Ред[@ Стил = 'Мрежа']" начин="итемстиле">
<!--
ЦонтентМаин.ксл пролази и ЦурПос Последња.
Користимо ово да емитују условно отворена и затварање <табела> ознаке.
-->
<клс:парам име="ЦурПос" />
<клс:парам име="Последњи" />
<!-- Следеће променљиве су немодификоване из стандардног ИтемСтиле.ксл -->
<клс:варијабла име="СафеИмагеУрл">
<клс:позива шаблон име="ОутерТемплате.ГетСафеСтатицУрл">
<клс:са парам- име="УрлЦолумнНаме" изабрати=""УРЛ слике '"/>
</клс:позива шаблон>
</клс:варијабла>
<клс:варијабла име="СафеЛинкУрл">
<клс:позива шаблон име="ОутерТемплате.ГетСафеЛинк">
<клс:са парам- име="УрлЦолумнНаме" изабрати="'ЛинкУрл'"/>
</клс:позива шаблон>
</клс:варијабла>
<клс:варијабла име="ДисплаиТитле">
<клс:позива шаблон име="ОутерТемплате.ГетТитле">
<клс:са парам- име="Наслов" изабрати="@ Титле"/>
<клс:са парам- име="УрлЦолумнНаме" изабрати="'ЛинкУрл'"/>
</клс:позива шаблон>
</клс:варијабла>
<клс:варијабла име="ЛинкТаргет">
<клс:ако тест="@ ОпенИнНевВиндов = 'труе'" >_бланк</клс:ако>
</клс:варијабла>
<!--
Сада ћемо дефинисати променљива, "tableStart". Овај садржи ХТМЛ
. Имајте на уму да ако ЦурПос = 1, обухвата ХТМЛ у ЦДАТА таг.
Иначе, то ће бити празан.
Вредност таблеСтарт се емитед сваки пут ИтемСтиле се зове преко
.
-->
<клс:варијабла име="таблеСтарт">
<клс:ако тест="$ЦурПос = 1">
<![ЦДАТА[
<Табела бордер = 1>
<tr bgcolor="blue">
<тд><font color="white"><Б>Назив пројекта</Б></фонт></тд>
<td align="right"><font color="white"><Б>Комплетан датум</Б></фонт></тд>
<td align="right"><font color="white"><Б>Буџет</Б></фонт></тд>
<td align="right"><font color="white"><Б>Стварни трошак</Б></фонт></тд>
<тд><font color="white"><Б>Генерално статус</Б></фонт></тд>
</тр>
]]>
</клс:ако>
</клс:варијабла>
<!--
Још једна променљива, таблеЕнд једноставно дефинише затварања табеле ознаку.
Као и код таблеСтарт, Увек је емитед. То је разлог зашто је његова вредност
.
-->
<клс:варијабла име="таблеЕнд">
<клс:ако тест="$ЦурПос = $ Последња">
<![ЦДАТА[ </табела> ]]>
</клс:ако>
</клс:варијабла>
<!--
Увек емитују садржаје таблеСтарт. Ако ово није први
, онда знамо његову вредност
.
Онемогући да излази излаз, јер када таблеСтарт није празно, она
. Ако
, it will generate
stuff like "&То;табела&гт;" instead of "<табела>".
-->
<клс:вредности од изабрати="$таблеСтарт" дисабле-излаз-беже="да"/>
<тр>
<!--
П:Пројецт_к005Ф_к0020_Наме
:Пројецт_к005Ф_к0020_Енд_к005Ф_к0020_Дате
:Пројецт_к005Ф_к0020_Будгет
:Пројецт_к005Ф_к0020_Екпенсес
:Пројецт_к005Ф_к0020_Статус
-->
<тд>
<клс:вредности од изабрати="@ Пројецт_к005Ф_к0020_Наме"/>
</тд>
<тд алигн="право">
<клс:вредности од изабрати="@ Пројецт_к005Ф_к0020_Енд_к005Ф_к0020_Дате"/>
</тд>
<тд алигн="право">
<клс:позива шаблон име="ФорматЦурренци">
<клс:са парам- име="вредност" изабрати="@ Пројецт_к005Ф_к0020_Будгет"></клс:са парам->
</клс:позива шаблон>
</тд>
<тд алигн="право">
<клс:позива шаблон име="ФорматЦурренци">
<клс:са парам- име="вредност" изабрати="@ Пројецт_к005Ф_к0020_Екпенсес"> </клс:са парам->
</клс:позива шаблон>
</тд>
<тд>
<клс:вредности од изабрати="@ Пројецт_к005Ф_к0020_Статус"/>
</тд>
<!--
Све од наведеног коментаром да разјасни ствари.
Међутим, вратите га и угура га у <тд> да бисте видели њену
.
-->
<!--
<div id="linkitem" class="item">
<клс:if test="string-length($СафеИмагеУрл) != 0">
<div class="image-area-left">
<a href="{$СафеЛинкУрл}" target="{$ЛинкТаргет}">
<img class="image-fixed-width" src="{$СафеИмагеУрл}" alt="{@ ИмагеУрлАлтТект}"/>
</a>
</див>
</клс:ако>
<div class="link-item">
<клс:позива шаблон name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href="{$СафеЛинкУрл}" target="{$ЛинкТаргет}" title="{@ ЛинкТоолТип}">
<клс:value-of select="$DisplayTitle"/>
</a>
<div class="description">
<клс:value-of select="@Description" />
</див>
</див>
</див>
-->
</тр>
<!--
Емит ознаку затварања табеле. Ако нисмо у последњем реду,
ово це бити празно.
-->
<клс:вредности од изабрати="$таблеЕнд" дисабле-излаз-беже="да"/>
</клс:шаблон>
<клс:шаблон име="ФорматЦурренци">
<клс:парам име="вредност" изабрати="0" />
<клс:вредности од изабрати='формат-број($вредност, "$DDD,ДДД,DDD.DD", "staff")' />
</клс:шаблон>
|