Преглед и циљ
Оут оф тхе бок, МОСС’ Веб сегмент за упит садржаја (ЦКВП) приказује резултате у виду листе, 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_Дате"/> </тд> <тд алигн="право"> <клс:позива шаблон име="ФорматЦурренци"> <клс:са парам- име="вредност" |
То је невероватно корисно. Хвала!
Аах… it was because I named my List Style differently and didn’t realise that in the ContentQueryMain.xsl it checks for the "style":
<клс:when test="@Style=’NameOfMyStyle’">
Уз то преименована је упалило. 🙂
Скоро да је радио за мене: Успевам да излаз </табела> Завршна ознака исправно, али почетну ознаку недостаје. It seems the test="$CurPos = 1" не врати истина. Али зашто?
Велики пост. Павле сам урадио све горе наведене ствари. Имам упит, how can I achive the sum of "TOTAL ACTUAL Expences" или збир вредности две колоне.
Да ли сте урадили било какав посао у креирању прилагођених ЦонтентКуериМаин и ИтемСтиле КССЛ датотеке? Разлог што тражим је да не желим да бринем о својој прилагођене стилове преписивања са било које флеке или надградње. Да ли имате примере? I’ve tried making an identical copy of the ContentQueryMain.xsl and uploading that new custom copy to the Style Library. When putting a reference to this xsl file in the .webpart’s MainXslLink property, I get 401 not authorized. The custom xsl file is a published version and everyone has read access to it.
fantastic post thanks! Have been battling with this now for the last few days.
Ћао, this was a really helpful posting. I have it all working, and also implemented Mike Brown’s change so it groups
the results inside the table by whatever I choose as the Group By parameter in the CQWB’s properties.
I made the title a link also, so it works nicely. I still have one problem, иако. I’m grouping the results by site name. Inside the table, it groups them nicely, and it looks great, but it’s still printing out all the group
names(in my case the site names) above the table. Does anyone know how to get rid of these?
Хвала,
Грег
Nice article. I managed to give my table the look of default Sharepoint Lists by analyzing the source code of the list. Here are the main HTML blocks needed to fit in ItemStyle:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–HEADER–>
<TR class="ms-viewheadertr" Валигн = Топ>
<TH nowrap scope="col" class="ms-vh2"><div style="width:100%;позиција:релативан;напустио:0;врх:0;">
<TABLE style="width:100%;" CtxNum="1" height="100%" cellspacing=1 cellpadding=0 class="ms-unselectedtitle">
<ТР>
<TD width="100%" Class="ms-vb" НОВРАП>
Текте ду титар ици
</ТД>
<TD style="position:апсолутан;">
</ТД>
</ТР>
</ТАБЕЛА></див>
</ТХ>
<!–Поновите поступак за све ћелије заглавља–>
</ТР>
<!– Табела података –>
<TR class="">
<!–Подаци колона, користите Павла број за први са хипервезе –>
<TD Class="ms-vb2">Подаци овде</ТД>
<!–Празна колона–>
<TD Class="ms-vb2">
<спан дир = Нема></распон><
/ТД>
<!–Датум колона–>
<TD Class="ms-vb2">
<Фонт>11/12/2008</Фонт>
</ТД>
</ТР>
<!–***Алтернативни ред – Користите нову променљиву КССЛ који ће убацити алтернативне класу на основу тренутног реда по модулу 2–>
<TR class="ms-alternating">
…
</ТР>
</ТАБЕЛА>
Тхатз управо сам у потрази за .. Роцк Иоу Ман .. Живела .. Волим те за то место..
<клс:apply-templates select="." mode="itemstyle">
<клс:with-param name="CurPos" select="$CurPosition" />
<клс:with-param name="Last" select="$LastRow" />
<клс:with-param name="StartNewGroup" select="@__begingroup" />
</клс:када>
<клс:when test="$StartNewGroup = ‘True’">
<тр>
<тд >
<клс:call-template name="OuterTemplate.GetGroupName">
<клс:with-param name="GroupName" select="@*[име()= $ Група]"/>
<клс:with-param name="GroupType" select="$GroupType"/>
</клс:позива шаблон>
</тд>
</тр>
</клс:када>
<клс:иначе>
</клс:иначе>
</клс:изабрати>
Здраво Павле,
Када радите са КСМЛ / КССЛ и садржаја Веб сегмент за упит, Да ли сте нашли неке добре начине да обликујете КССЛТ? Покушавајући да направи измене и тестирање дизајн се показао као прави бол у А ** управо користећи текст едитор…
Све најбоље
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Да ли да користим слику или слику у ЦоммонВиевФиелдс тип поља? (e.g. ИнтерналЦолумнНаме, Слика)
Your post is exactly what I was looking for. Међутим, I can’t get it to work.
I have documents that are stored in various doc. libraries but classified using a custom class column (choice: 1 или 2. I want to use CQWP to show these documents based on thier class.
I was able to add the CQWP, export it to SPD, configure the itemStyle.xls to show custom fileds in list view. међутим, I could not successfully implement what you describe here.
These are the columns I want to show in my CQWP:
File Type (to show icon)
File Title
Date Last Modified
Modified By Who
Checked Out To
Checked In Comments
I currently have the result in a list format. How do I change it to a talble format.
Хвала.
Saji
Извините за миссспеллинг на моје име нису сигурни где ” дошао из.