Преглед и цел
Надвор од кутијата, Мос’ Содржината Пребарување Веб Дел (CQWP) покажува своите резултати во листата формат, similar to search results. It is also possible to display the results in a grid format (i.e. HTML табела формат). 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:
HTML вака генерира, кои се резултат:
<html> <тело> <центар> <маса границата= 1> <!-- Етикети -> <tr bgcolor= Сина> <td><фонт боја= Бело><б>Име на проектот</б></фонт></td> <td усогласување на= Право><фонт боја= Бело><б>Заврши Датум</б></фонт></td> <td усогласување на= Право><фонт боја= Бело><б>Буџет</б></фонт></td> <td усогласување на= Право><фонт боја= Бело><б>Крај на трошоците</б></фонт></td> <td><фонт боја= Бело><б>Целокупната состојба</б></фонт></td> </tr> <tr> <td>Ре-жица компјутерска сала.</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> |
Пристап
Следете ги овие чекори за да се создаде мрежа:
- Идентификација на компонентите на решетка (редови / колони).
- Дефинираат и да се создаде потребната сајт колони.
- Креирате под-сајтови за проекти и Singleton листи.
- Додадете CQWP на веб страница и конфигурирајте го да пребарувате за вашиот листи.
- Менувате XML на CQWP да собере дополнителни колони.
- Менувате XSL да генерира табела.
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).
Ореви и завртки
Започнете и спроведување чекори едно преку пет, како за на MSDN документација и член Хедер Соломон.
Во овој момент, сте ги додале на вашиот CQWP на страница и имате <CommonViewFields> конфигуриран како што е потребно.
По вообичаените чекори, Јас се добијат овие средно резултати:
1. Креирај типот на содржина, a templatized custom list for that content type and two sites. Here is the content type:
Тука е сајт структура:
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. Во овој момент, 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: Името на мојата XSL дефиниција како што следува:
<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Јас исто така, малку менувате нејзиниот предложи <XSL:за секој- …> со додавање на <Br /> ознака за да се обезбеди почиста оглас:
<XSL:за секој- изберете="@ *"> P:<XSL:вредност на изберете="име()" /><BR/> </XSL:за секој->
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".
Во овој момент, ќе заминеме од блог Хедер и од рамениците на овие гиганти, Додадам моето малку.
ContentQueryMain.xsl
ЗАБЕЛЕШКА: Кога правење на промени во двете ContentQueryMain.xsl како и ItemStyle.xsl, што треба да се провери оние датотеки назад, и пред да го видите ефектот на вашите промени.
За мрежа одлуки цели, 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" дефиниција во ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Користење на техника Хедер Соломон, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Ние треба да направите следниве промени:
- Менување на дефиниција XSL, "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" параметар, така што LastRow може да се пренесат на нашите Решетка дефиниција.
Locate the template named "OuterTemplate.CallItemTemplate" идентификувани од страна на низа:
<XSL:дефиниција име="OuterTemplate.CallItemTemplate">
Замени целата дефиниција како што следува:
<XSL:дефиниција име="OuterTemplate.CallItemTemplate"> <XSL:престанат име="CurPosition" /> <!-- Add the "LastRow" параметар. We only use it when the item style pass in is "Grid". --> <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:дефиниција> |
Коментари опише целта на промени.
Се разбира, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<XSL:дефиниција име="OuterTemplate.Body">
Движете се низ инструкциите во OuterTemplate.Body и вметнете ја параметар LastRow како што следува (прикажани како коментар во закосени букви):
<XSL:повик-дефиниција име="OuterTemplate.CallItemTemplate"> <XSL:со-Парам име="CurPosition" изберете="$CurPosition" /> <!-- Вметнете ја параметар LastRow. --> <XSL:со-Парам име="LastRow" изберете="$LastRow"/> </XSL:повик-дефиниција>
По сето ова, ние конечно работите се постави правилно, така што нашите ItemStyle.xsl можат да емитуваат <маса> тагови на вистинското место.
ItemStyle.Xsl
ЗАБЕЛЕШКА: Повторно, провери во ItemStyle.xsl по правење било какви промени, така што ќе го видите ефектот на тие промени.
Имаме две задачи овде:
- 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. (Можете да кажете дека имам слаб рачка на XSL).
Прва, во близина на врвот на ItemStyle.xsl, додадете оваа линија:
<!-- Некои mumbo џамбо што ни овозможува да се прикаже U.S. валута. --> <XSL:децимална формат име="персонал" цифрениот="D" /> <XSL:дефиниција име="Стандардно" одговара="*" владата="itemstyle">
Имајте на ум дека јас се додава непосредно пред <XSL:template name="Default" …> дефиниција.
Следна, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, но немојте да се двоумите да ми пишете или оставете коментари на мојот блог, ако имате прашања.
<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:со-Парам име="Наслов" изберете="@ Наслов"/> <XSL:со-Парам име="UrlColumnName" изберете=""LinkUrl""/> </XSL:повик-дефиниција> </XSL:променлива> <XSL:променлива име="LinkTarget"> <XSL:ако тест="@ OpenInNewWindow = 'точно'" >_blank</XSL:ако> </XSL:променлива> <!-- Еве ние се дефинира променлива, "tableStart". Таа содржи HTML . Имајте на ум дека ако CurPos = 1, тоа вклучува HTML во таг CDATA. Во спротивно, таа ќе биде празна. Вредноста на tableStart е emited секој пат ItemStyle се вика преку . --> <XSL:променлива име="tableStart"> <XSL:ако тест="$CurPos = 1"> <![CDATA[ <маса границата = 1> <tr bgcolor="blue"> <td><font color="white"><б>Име на проектот</б></фонт></td> <td align="right"><font color="white"><б>Заврши Датум</б></фонт></td> <td align="right"><font color="white"><б>Буџет</б></фонт></td> <td align="right"><font color="white"><б>Крај на трошоците</б></фонт></td> <td><font color="white"><б>Целокупната состојба</б></фонт></td> </tr> ]]> </XSL:ако> </XSL:променлива> <!-- Уште една променлива, tableEnd едноставно дефинира затворање табелата таг. Како и со tableStart, тоа е секогаш emited. Ова е причината зошто неговата вредност е . --> <XSL:променлива име="tableEnd"> <XSL:ако тест="$CurPos = $ Минатата"> <![CDATA[ </маса> ]]> </XSL:ако> </XSL:променлива> <!-- Секогаш емитуваат на содржината на tableStart. Ако ова не е прв , тогаш знаеме неговата вредност . Оневозможи излез избега, бидејќи кога tableStart не го полето празно, тоа . Ако , it will generate stuff like "<маса>" instead of "<маса>". --> <XSL:вредност на изберете="$tableStart" disable-излез-бегство="Да"/> <tr> <!-- P:Project_x005F_x0020_Name :Project_x005F_x0020_End_x005F_x0020_Date :Project_x005F_x0020_Budget :Project_x005F_x0020_Expenses :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:со-Парам име="вредност" |
Ова е неверојатно корисна. Ви благодариме!
Aah… it was because I named my List Style differently and didn’t realise that in the ContentQueryMain.xsl it checks for the "style":
<XSL:when test="@Style=’NameOfMyStyle’">
Со тоа преименувана тоа работел. 🙂
Тоа е речиси работел за мене: Умеам да излез </маса> заврши таг правилно, но почнувајќи таг се водат за исчезнати. It seems the test="$CurPos = 1" не се врати вистина. Но зошто?
Велики пост. Пол сум го сторил сето тоа погоре работите. Имам пребарување, how can I achive the sum of "TOTAL ACTUAL Expences" или Збирот на вредноста на две колони.
Дали сте го направиле било која работа со креирање на сопствени ContentQueryMain и ItemStyle XSL датотеки? Причина јас прашам е што јас не сакам да се грижи за се моите сопствени стилови препишани со било лепенки или надградби. Дали имате примери? Пробав правење идентична копија на ContentQueryMain.xsl и качувањето дека новиот обичај копија на стилот библиотека. Кога ставање упатување кон оваа датотека XSL во MainXslLink имотот на. Webpart е, Јас се 401 не се овластени. Обичај XSL датотеки е објавена верзија и секој има пристап за читање за да го.
фантастична пост благодарение! Се борат со овој сега во последните неколку дена.
Hi, ова е навистина од голема помош објавување. Јас сето тоа работи, и исто така, спроведува промена Мајк Браун, па тоа групи
резултатите во внатрешноста на табелата со она што го изберат како група со параметар во својства на CQWB е.
Јас го насловот на линкот, исто така,, така работи убаво. Јас имам уште еден проблем, иако. Јас сум групирање на резултатите од страницата името. Во табелата, тоа им групи убаво, и тоа изгледа одлично, но тоа е уште печатење сите членови на групата
имиња(во мојот случај на сајт имиња) над табелата. Дали некој знае како да се ослободи од овие?
Благодарение,
Greg
Убав напис. Успеав да им даде на мојата маса изгледот на стандардно Sharepoint Листи со анализа на изворниот код на листа. Тука се главните HTML блокови се потребни за да се вклопи во ItemStyle:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–Header–>
<TR class="ms-viewheadertr" Valign = top>
<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">
<TR>
<TD width="100%" Class="ms-vb" nowrap>
Texte ду титар ICI
</ТД>
<TD style="position:апсолутна;">
</ТД>
</TR>
</ТАБЕЛА></div>
</TH>
<!–Повторете го истото за сите насловот клетки–>
</TR>
<!– Табела на податоци –>
<TR class="">
<!–Податоци колона, користи кодот на Paul за првиот со хиперврска –>
<TD Class="ms-vb2">Податоци тука</ТД>
<!–Празна колона–>
<TD Class="ms-vb2">
<век реж = Никој></век><
/ТД>
<!–Датум колона–>
<TD Class="ms-vb2">
<NOBR>11/12/2008</NOBR>
</ТД>
</TR>
<!–***Алтернативен ред – Користете нови XSL променлива која ќе ја внесе алтернативна класа врз основа на тековниот ред modulo 2–>
<TR class="ms-alternating">
…
</TR>
</ТАБЕЛА>
Thatz прецизно ја барав .. Можете рок човек .. Да живее .. Те сакам за оваа функција..
<XSL:apply-templates select="." mode="itemstyle">
<XSL:with-param name="CurPos" select="$CurPosition" />
<XSL:with-param name="Last" select="$LastRow" />
<XSL:with-param name="StartNewGroup" select="@__begingroup" />
</XSL:кога>
<XSL:when test="$StartNewGroup = ‘True’">
<tr>
<td >
<XSL:call-template name="OuterTemplate.GetGroupName">
<XSL:with-param name="GroupName" select="@*[име()= $ Група]"/>
<XSL:with-param name="GroupType" select="$GroupType"/>
</XSL:повик-дефиниција>
</td>
</tr>
</XSL:кога>
<XSL:во спротивно>
</XSL:во спротивно>
</XSL:изберете>
Здраво Пол,
Кога се работи со XML / XSL и содржината на Барањето веб дел, Дали најде некои добри начини да го форматирате вашиот XSLT? Обидувајќи се да се прават промени и за тестирање на дизајн е за докажување на десната болка во еден ** само со користење на уредувачот на текст…
Сите најдобри
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Јас треба да го користите слика или слика во областа CommonViewFields Тип? (e.g. InternalColumnName, Сликата)
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 (избор: 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
Извини за missspelling на моето име не се сигурни каде ” дојдоа од.