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" |
To bolo veľmi užitočný. ďakujem!
Ááá… to bolo preto menovaný môj štýl zoznamu inak a si neuvedomil, že v ContentQueryMain.xsl kontroly "štýlu":
<XSL:pri test="@Style='NameOfMyStyle" ">
S tým premenovali to fungovalo. 🙂
Takmer pracoval pre mňa: Sa mi podarí výstup </Tabuľka> koniec značku správne, ale chýba počiatočná značka. Zdá sa, test = "$CurPos = 1" nevráti pravda. Ale prečo?
Skvelé miesto. Paul má urobiť všetky vyššie uvedené veci. Mám dotaz, ako môžem dosiahnuť suma "celkových skutočných Expences" alebo súčtu hodnoty dvoch stĺpcoch.
Máte urobiť žiadnu prácu s vytvorením vlastných súborov xsl ContentQueryMain a ItemStyle? Dôvodom Pýtam je, že nechcem, aby sa starať o moje vlastné štýly sú prepísané s záplaty alebo upgrade. Máte príklady? Snažil som sa robiť identickú kópiu ContentQueryMain.xsl a nahrať nové vlastné kópiu ku knižnici štýl. Pri uvedení odkaz na tento súbor xsl na .webpart MainXslLink majetku, Dostanem 401 nie je povolené. Vlastná časť xsl súbor je publikovaná verzia a každý má prístup na čítanie k nemu.
fantastické post vďaka! Sme sa stretli s touto teraz za posledných pár dní.
ahoj, to bolo naozaj užitočné vysielania. Mám ju všetky pracovné, a tiež implementované Mike Brown je zmena tak zoskupuje
výsledky vo vnútri tabuľky tým, čo som si zvolil ako parameter zoskupiť podľa v CQWB vlastností.
Urobil som titul prepojenie aj, tak to funguje pekne. Mám ešte jeden problém, Hoci. Som zoskupovanie výsledkov podľa názvu webových stránok. Vo vnútri tabuľky, zoskupuje im pekne, a vyzerá to skvele, ale je to stále vytlačenie všetky skupiny
názvy(v mojom prípade miesto mená) nad tabuľkou. Vie niekto, ako sa zbaviť týchto?
vďaka,
Greg
Pekný článok. Podarilo sa mi zmeniť vzhľad môjho stola z predvolené zoznamy Sharepoint analýzou zdrojového kódu zo zoznamu. Tu sú hlavné HTML bloky potrebné prispôsobiť v ItemStyle:
<Šírka tabuľky = "100%" class = "ms-listviewtable" hranicu = 0 cellspacing = 0 cellpadding = 1 dir = "None">
<!–HLAVIČKA–>
<TR class = "ms-viewheadertr" VALIGN = HORE>
<Rozsah nowrap TH = "col" class = "ms-vh2"><div style = "width:100%;pozícia:relatívna;vľavo:0;hore:0;">
<Štýl tabuľky = "šírka:100%;" CtxNum = "1" Výška = "100%" cellspacing = 1 cellpadding = 0 class = "ms-unselectedtitle">
<TR>
<TD šírka = "100%" Class = "ms-vb" nowrap>
Texte du titer ici
</TD>
<TD style = "pozícia:absolútna;">
</TD>
</TR>
</TABUĽKA></DIV>
</TH>
<!–Opakujte pre všetky bunky hlavičky–>
</TR>
<!– Tabuľka údajov –>
<TR class = "">
<!–Údajový stĺpec, Pavla kód použiť ten prvý s hypertextovým prepojením –>
<TD Class = "ms-vb2">Údaje tu</TD>
<!–Prázdne stĺpce–>
<TD Class = "ms-vb2">
<rozpätie dir = žiadny></span><
/TD>
<!–Dátum stĺpca–>
<TD Class = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Alternatívny riadok – Použiť nové XSL premennej, ktorá sa vloží alternatívne triedy na základe aktuálneho riadka modulo 2–>
<TR class = "ms-striedavo">
…
</TR>
</TABUĽKA>
Thatz presne som hľadal...Ste rock man...Nech žije...Pre teba miesto..
<XSL:Vyberte položku Apply-Template = "." režim = "itemstyle">
<XSL:s-param meno = "CurPos" Vyberte = "$CurPosition" />
<XSL:s-param meno = "posledný" Vyberte = "$LastRow" />
<XSL:s-param meno = "StartNewGroup" Select="@__begingroup" />
</XSL:keď, kedy>
<XSL:keď test = "$StartNewGroup ="True"">
<TR>
<TD >
<XSL:name="OuterTemplate.GetGroupName call-template">
<XSL:s-param meno = "NázovSkupiny" Select="@*[meno()= $Group]"/>
<XSL:s-param meno = "GroupType" Vyberte = "$GroupType" />
</XSL:call-template>
</TD>
</TR>
</XSL:keď, kedy>
<XSL:inak>
</XSL:inak>
</XSL:Vyberte>
Ahoj Pavla,
Pri práci s xml/xsl a obsah dotazu webovej časti, Našli ste nejaké dobré spôsoby, ako formátovať vaše xslt? Snaží urobiť zmeny a koncepcia testu je dokazujúce právo bolesť v ** len pomocou textového editora…
Všetko najlepšie
(napr.. https://myweb.com/Marketing/images/icn-order.gif, )
Mali použiť objekt alebo obrázok do CommonViewFields poľa typu? (napr.. InternalColumnName, Obrázok)
Váš príspevok je presne to, čo som hľadal. Avšak, Nemôže dostať to do práce.
Mám doklady, ktoré sú uložené v rôznych doc. knižnice ale klasifikovať pomocou vlastnej triedy stĺpca (výber: 1 alebo 2. Chcem používať CQWP Ukázať tieto dokumenty na základe svojej triedy.
Bol som schopný pridať CQWP, exportovať do SPD, Konfigurácia itemStyle.xls Zobraziť vlastné půlsnímků v zobrazení zoznamu. Avšak, Som mohol úspešne neimplementuje čo ste tu popisovať.
Toto sú stĺpce, ktoré chcem zobraziť v mojom CQWP:
Typ súboru (Zobraziť ikonu)
Názov súboru
Dátum poslednej zmeny
Ktorý upravil
Vzal k sebe používateľ
Kontroluje komentáre
Momentálne mám výsledok vo formáte zoznamu. Ako môžem zmeniť formát talble.
vďaka.
Saji
Ospravedlňujeme sa za missspelling na moje meno neviete kde ” prišiel z.