Prehľad a cieľ
Po vybalení z krabice, MACHY’ Obsah webovej časti dotaz (CQWP) jeho výsledky sa zobrazuje vo formáte zoznamu, podobné výsledky vyhľadávania. Je tiež možné zobraziť výsledky vo formáte mriežky (tj. Formát tabuľky HTML). Mriežka formáty sú lepšie v niektorých prípadoch. Opísať, ako dosiahnuť tento efekt v tomto článku.
Obchodné scenáre
Pracoval som s klientom na rozľahlej MOSS rollout. Navrhli sme ich taxonómie, taká, že projekty sú prvej triedy občanov v hierarchii a majú svoje vlastné stránky najvyššej úrovne. Projektoví manažéri udržiavať zoznam ojedinelého projektu súhrnné informácie, napríklad názov, rozpočet, predpokladaný dátum ukončenia, zostávajúci rozpočet a ďalšie polia, typ súhrnu. : "Singleton" Myslím, že vlastný zoznam lokality SharePoint, zaručene obsahujú iba jednu položku. Zjednodušene, Vyzerá to, že to:
Technický prístup je veľa rovnaký ako je popísané tu (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP využíva Transformácia XSL vypúšťať HTML pre prehliadač urobiť.
Vždy som predstaviť výsledok pred potápanie do XSL, pretože XSL je nočná mora. Tu je môj požadovaný výsledok:
HTML takhle generuje tento výsledok:
|
<HTML>
<telo>
<centrum>
<Tabuľka orámovanie= 1>
<!-- Menovky-->
<TR bgcolor= modrá>
<TD><písmo Farba= biela><b>Názov projektu</b></písmo></TD>
<TD Zarovnať= právo><písmo Farba= biela><b>Dátum dokončenia</b></písmo></TD>
<TD Zarovnať= právo><písmo Farba= biela><b>Rozpočet</b></písmo></TD>
<TD Zarovnať= právo><písmo Farba= biela><b>Skutočné náklady</b></písmo></TD>
<TD><písmo Farba= biela><b>Celkový stav</b></písmo></TD>
</TR>
<TR>
<TD>Re-drôt počítačovej učebni.</TD>
<TD Zarovnať= právo>02/01/08</TD>
<TD Zarovnať= právo>22,500.00</TD>
<TD Zarovnať= právo>19,000.00</TD>
<TD>Prebieha</TD>
</TR>
<TR>
<TD>Poskytovanie serverov SQL Upgrade</TD>
<TD Zarovnať= právo>04/01/08</TD>
<TD Zarovnať= právo>7,500.00</TD>
<TD Zarovnať= právo>0.00</TD>
<TD>Plánované</TD>
</TR>
</Tabuľka>
</centrum>
</telo>
</HTML>
|
Prístup
Postupujte podľa týchto krokov Vytvorte mriežky:
- Identifikovať komponenty mriežky (riadky alebo stĺpce).
- Definovať a vytvoriť stĺpce potrebné lokality.
- Vytvorenie podstránky pre projekty a ojedinelého zoznamy.
- Pridať CQWP na webovú stránku a nakonfigurovať tak, aby vyhľadávanie pre vaše zoznamy.
- Upraviť CQWP XML zhromaždiť ďalšie stĺpce.
- Upraviť súbor XSL, vytvárať tabuľky.
Budem sa sústrediť na číslo šesť. Čísla jedna až štyri sú rovno-dopredu, a niečo, čo už urobil každý užívateľ CQWP. Číslo päť bol dobre zdokumentovaný, iní vrátane tento vyčerpávajúci náhľad obrazovky naloženého článku na lokalite MSDN tu (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) a Heather Solomon's blog tu (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Skrutky a matice
Začať a vykonávať krokov jedna až päť podľa MSDN dokumentáciu a Heather Šalamúna článok.
V tomto momente, ste pridali svoj CQWP na stránku a budete mať vaše <CommonViewFields> nakonfigurované podľa potreby.
Nasledujúci po obvyklé kroky, Môžem získať tieto priebežných výsledkov:
1. Vytvorenie typu obsahu, šablónovej vlastného zoznamu pre daný typ obsahu a dve stránky. Tu je typ obsahu:
Tu je štruktúra stránky:
2. Pridať CQWP po vytvorení môj projekt podlokalít a ojedinelého projektu súhrnné zoznamy:
3. Pridajte všetky dodatočné informácie, chcem prostredníctvom <CommonViewFields>:
<nehnuteľnosti meno="CommonViewFields" typ="reťazec">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</nehnuteľnosti>
Všimnite si, že som musel držať všetky polia vlastností na jednom riadku alebo to nebude fungovať (CQWP by mi povedať, či dotaz vrátil žiadne položky).
4. V tomto momente, sme pripravení posunúť MSDN článku a flip cez na Heather Šalamúna článok. Jej kroky, začína v blízkosti krok #5 vytvoriť vlastnú / unghosted verzia ItemStyle.xsl. Sledujem Heather poradenstvo, až cez krok 11 a získajte tieto priebežných výsledkov:
4.1: Meno mojej šablóne XSL takto:
<XSL:Názov šablóny = "Grid" zápas = "riadok[@Style = "Siete"]" režim = "itemstyle">
Tiež mierne upraviť jej navrhol <XSL:pre každý …> pridaním <br /> značka poskytnúť čistejšie výpis:
<XSL:pre každý Vyberte="@*">
P:<XSL:hodnoty z Vyberte="meno()" /><br/>
</XSL:pre každý>
4.2: Upraviť webovú časť, Prejsť na vzhľad a vyberte moje "Grid" štýl:
Použiť zmeny a tu je výsledok:
Môžeme vidieť z vyššie uvedeného, že polia chceme (Názov projektu, náklady, stav, atď) sú k dispozícii pre nás používať, keď budeme vypúšťať HTML. Nielen, že, Ale vidíme, že názvy, ktoré sme odkaz týchto stĺpcov v XSL. Napríklad, My referenčný stav projektu ako "Project_x005F_x0020_Name".
V tomto momente, My odchýliť od Heather blog a ramenách týchto obrov, Môžem pridať svoje vlastné trochu.
ContentQueryMain.xsl
POZNÁMKA: Keď vykonávate zmeny na ContentQueryMain.xsl, ako aj ItemStyle.xsl, budete musieť skontrolovať tieto súbory späť predtým, ako budete vidieť vplyv zmeny.
Mriežka-tvorby účely, MOSS používa dva rôzne súbory XSL výsledky vidíme z CQWP. Vygenerovať predchádzajúce bitový výstup, sme upravili ItemStyle.xsl. MOSS skutočne používa iný súbor XSL, ContentQueryMain.xsl sa v spolupráci s ItemStyle.xsl vytvoriť svoje HTML. Ako už názov napovedá, ContentQueryMain.xsl je hlavným"" XSL, ktorý kontroluje celkový tok preklad. Opakuje prostredníctvom všetkých nájdených položiek a odovzdáva ich jeden po druhom do šablóny ItemStyle.xsl. Upravíme si ItemStyle.xsl vytvárať otvorené <Tabuľka> Tag pred vyžarujúce prvý riadok údajov a ukončenie <Tabuľka> značku po vyžarujúce posledný riadok. Na dosiahnutie tohto cieľa, ContentQueryMain.xsl je upravené prejsť dva parametre nášho "mriežky" šablóny ItemStyle.xsl, "posledný riadok" a "aktuálny riadok". ItemStyle.xsl používa tieto podmienečne vydávať potrebné značky.
Heather Šalamúna technikou, môžeme nájsť ContentQueryMain.xsl. Nachádza sa na rovnakom mieste ako ItemStyle.xsl. Tento náhľad obrazovky by malo pomôcť:
Musíme urobiť nasledovné zmeny:
- Upraviť šablónu xsl, "CallItemTemplate" že vlastne vyvolá naše šablóny mriežky v ItemStyle.xsl. Sme prejsť dva parametre mriežky šablónu tak, že bude mať údaje, ktoré potrebuje podmienečne generovať otváranie a zatváranie <Tabuľka> Tagy.
- Upraviť jeden kúsok ContentQueryMain.xsl, ktorý volá "CallItemTemplate" odovzdať ho "LastRow" Parameter tak, že LastRow môžu byť odovzdané do našej šablóny mriežky.
Vyhľadajte šablónu s názvom "OuterTemplate.CallItemTemplate" identifikované reťazcom:
<XSL:šablóny meno="OuterTemplate.CallItemTemplate">
Nahradiť celú šablónu takto:
|
<XSL:šablóny meno="OuterTemplate.CallItemTemplate">
<XSL:param meno="CurPosition" />
<!--
Pridať "LastRow" Parameter.
Používame iba to keď prejsť štýl položky v "Grid".
-->
<XSL:param meno="LastRow" />
<XSL:Vyberte>
<XSL:keď, kedy skúška="@Style = "NewsRollUpItem"">
<XSL:Apply-template Vyberte="." režim="itemstyle">
<XSL:s-param meno="EditMode" Vyberte="$cbq_iseditmode" />
</XSL:Apply-template>
</XSL:keď, kedy>
<XSL:keď, kedy skúška="@Style = "NewsBigItem"">
<XSL:Apply-template Vyberte="." režim="itemstyle">
<XSL:s-param meno="CurPos" Vyberte="$CurPosition" />
</XSL:Apply-template>
</XSL:keď, kedy>
<XSL:keď, kedy skúška="@Style = "NewsCategoryItem"">
<XSL:Apply-template Vyberte="." režim="itemstyle">
<XSL:s-param meno="CurPos" Vyberte="$CurPosition" />
</XSL:Apply-template>
</XSL:keď, kedy>
<!--
Súčasneho stavu a lastrow odovzdať šablónu itemstyle.xsl mriežky.
ItemStyle.xsl bude používať to vydávať otvoriť a zatvoriť <Tabuľka> Tagy.
-->
<XSL:keď, kedy skúška="@Style = "Siete"">
<XSL:Apply-template Vyberte="." režim="itemstyle">
<XSL:s-param meno="CurPos" Vyberte="$CurPosition" />
<XSL:s-param meno="Posledný" Vyberte="$LastRow" />
</XSL:Apply-template>
</XSL:keď, kedy>
<XSL:inak>
<XSL:Apply-template Vyberte="." režim="itemstyle">
</XSL:Apply-template>
</XSL:inak>
</XSL:Vyberte>
</XSL:šablóny>
|
Komentáre popisujú účel zmeny.
samozrejme, "OuterTemplate.CallItemTemplate" sa sám nazýva z inej šablóny. Vyhľadajte danú šablónu hľadaním tohto textového reťazca:
<XSL:šablóny meno="OuterTemplate.Body">
Prechádzať podľa pokynov v OuterTemplate.Body a vložiť LastRow parameter takto (zobrazí ako komentár kurzívou):
<XSL:call-template meno="OuterTemplate.CallItemTemplate">
<XSL:s-param meno="CurPosition" Vyberte="$CurPosition" />
<!-- Vložiť LastRow parameter. -->
<XSL:s-param meno="LastRow" Vyberte="$LastRow"/>
</XSL:call-template>
Po všetkých týchto, konečne máme veci správne nastavené tak, že naša ItemStyle.xsl môže vydávať <Tabuľka> Tagy na správnom mieste.
ItemStyle.Xsl
POZNÁMKA: Znova, Skontrolujte, či v ItemStyle.xsl po akýchkoľvek zmien tak, že môžete vidieť vplyv týchto zmien.
Tu máme dve úlohy:
- Nahradiť celú šablónu mriežky. Môžete kopírovať/vložiť z nižšie.
- Pridať niektoré zbytočne zložitá vec mimo definíciu šablóny, ktorá umožňuje "formatcurrency" Šablóna pre prácu. (Môžete povedať, že mám slabý rukoväť na XSL).
Prvá, v hornej časti ItemStyle.xsl, Pridajte nasledujúci riadok:
<!-- Niektoré zbytočne zložitá, ktorý nám umožňuje zobraziť USA. meny. -->
<XSL:formáte desatinného čísla meno="zamestnanci" číslica="D" />
<XSL:šablóny meno="Predvolené" zápas="*" režim="itemstyle">
Poznámka, že som pridal to priamo pred <XSL:Názov šablóny = "predvolené" …> definícia.
Ďalšie, vrátiť do našej siete šablóny. Nahradiť celú šablónu mriežke nižšie uvedený kód. Poznamenal, že je dôkladne, ale neváhajte mi email alebo zanechať komentár na môj blog, ak máte otázky.
|
<XSL:šablóny meno="Mriežka" zápas="Riadok[@Style = "Siete"]" režim="itemstyle">
<!--
ContentMain.xsl prechádza CurPos a naposledy.
Používame tieto podmienečne vypúšťať otvoriť a zatvoriť <Tabuľka> Tagy.
-->
<XSL:param meno="CurPos" />
<XSL:param meno="Posledný" />
<!-- Nasledujúce premenné sú nezmenené od štandardnej ItemStyle.xsl -->
<XSL:premenná meno="SafeImageUrl">
<XSL:call-template meno="OuterTemplate.GetSafeStaticUrl">
<XSL:s-param meno="UrlColumnName" Vyberte=""ImageUrl""/>
</XSL:call-template>
</XSL:premenná>
<XSL:premenná meno="SafeLinkUrl">
<XSL:call-template meno="OuterTemplate.GetSafeLink">
<XSL:s-param meno="UrlColumnName" Vyberte=""LinkUrl""/>
</XSL:call-template>
</XSL:premenná>
<XSL:premenná meno="DisplayTitle">
<XSL:call-template meno="OuterTemplate.GetTitle">
<XSL:s-param meno="Hlava" Vyberte="@Title"/>
<XSL:s-param meno="UrlColumnName" Vyberte=""LinkUrl""/>
</XSL:call-template>
</XSL:premenná>
<XSL:premenná meno="LinkTarget">
<XSL:Ak skúška="@OpenInNewWindow = "True"" >_blank</XSL:Ak>
</XSL:premenná>
<!--
Tu definujeme premenné, "tableStart". Tento balík obsahuje HTML, ktoré používame na definovanie otvorenie tabuľky, rovnako ako menovky stĺpcov. Všimnite si, že ak CurPos = 1, obsahuje HTML tag CDATA.
Inak, bude to prázdne.
Hodnota tableStart je emited, zakaždým, keď ItemStyle sa nazýva prostredníctvom ContentQueryMain.xsl.
-->
<XSL:premenná meno="tableStart">
<XSL:Ak skúška="$CurPos = 1">
<![CDATA[
<orámovanie tabuľky = 1>
<TR bgcolor = "blue">
<TD><Farba písma = "biele"><b>Názov projektu</b></písmo></TD>
<Zarovnať TD = "právo"><Farba písma = "biele"><b>Dátum dokončenia</b></písmo></TD>
<Zarovnať TD = "právo"><Farba písma = "biele"><b>Rozpočet</b></písmo></TD>
<Zarovnať TD = "právo"><Farba písma = "biele"><b>Skutočné náklady</b></písmo></TD>
<TD><Farba písma = "biele"><b>Celkový stav</b></písmo></TD>
</TR>
]]>
</XSL:Ak>
</XSL:premenná>
<!--
Inej premennej, tableEnd jednoducho definuje uzavretie tabuľky značky.
Rovnako ako u tableStart, to je vždy emited. To je dôvod, prečo jeho hodnota je priradená podmienečne založené na či sme už bol schválený v poslednom riadku ContentQueryMain.xsl.
-->
<XSL:premenná meno="tableEnd">
<XSL:Ak skúška="$CurPos = $Last">
<![CDATA[ </Tabuľka> ]]>
</XSL:Ak>
</XSL:premenná>
<!--
Vždy vypúšťať obsah tableStart. Ak to nie je prvý riadok prešiel k nám ContentQueryMain.xsl, potom vieme, že jeho hodnota bude prázdne.
Zakázať výstup utekať, pretože keď tableStart to nie prázdne, To zahŕňa skutočné HTML, ktoré chceme byť poskytnuté prehliadača. Ak sme nehovorte analyzátor jazyka XSL zakázať výstup úteku, to bude generovať podobne"<Tabuľka>" namiesto toho"<Tabuľka>".
-->
<XSL:hodnoty z Vyberte="$tableStart" zakázať-výstupný-únik="áno"/>
<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:hodnoty z Vyberte="@Project_x005F_x0020_Name"/>
</TD>
<TD Zarovnať="právo">
<XSL:hodnoty z Vyberte="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TD>
<TD Zarovnať="právo">
<XSL:call-template meno="FormatCurrency">
<XSL:s-param meno="hodnota" Vyberte="@Project_x005F_x0020_Budget"></XSL:s-param>
</XSL:call-template>
</TD>
<TD Zarovnať="právo">
<XSL:call-template meno="FormatCurrency">
<XSL:s-param meno="hodnota" Vyberte="@Project_x005F_x0020_Expenses"> </XSL:s-param>
</XSL:call-template>
</TD>
<TD>
<XSL:hodnoty z Vyberte="@Project_x005F_x0020_Status"/>
</TD>
<!--
Všetky tieto je zakomentovaný objasniť veci.
Avšak, priviesť ju späť a napchať si ho do <TD> jeho efekt.
-->
<!--
<konto div id = "linkitem" trieda = "položka">
<XSL:Ak otestovať = "dĺžka reťazca($SafeImageUrl) != 0>
<div triedy = "obrázok-oblasť-vľavo">
<href = "{$SafeLinkUrl}" cieľ = "{$LinkTarget}">
<img triedy = "obrázok-fixed-width" src = "{$SafeImageUrl}" klávesy ALT = "{@ImageUrlAltText}"/>
</a>
</DIV>
</XSL:Ak>
<div triedy = "položka prepojenia">
<XSL:call-template Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href = "{$SafeLinkUrl}" cieľ = "{$LinkTarget}" hlavy = "{@LinkToolTip}">
<XSL:hodnota-vyberte = "$DispXSLTitle" />
</a>
<div class = "Popis">
<XSL:hodnotu z select="@Description" />
</DIV>
</DIV>
</DIV>
-->
</TR>
<!--
Vyžarujú uzavretie tabuľky tag. Ak nie sme na poslednom riadku,
to bude prázdne.
-->
<XSL:hodnoty z Vyberte="$tableEnd" zakázať-výstupný-únik="áno"/>
</XSL:šablóny>
<XSL:šablóny meno="FormatCurrency">
<XSL:param meno="hodnota" Vyberte="0" />
<XSL:hodnoty z Vyberte='formát-čísla($hodnota, "$DDD,DDD,DDD.DD", "zamestnanci")' />
</XSL:šablóny>
|