Pregled in cilj
Iz škatle, MOSS’ Spletni gradnik poizvedbe vsebine (CQWP) rezultate prikaže v obliki seznama, podobne rezultate iskanja. Prav tako je mogoče za prikaz rezultatov v obliki mreže (i.e. Oblika HTML tabele). Mreža oblike so boljši v nekaterih okoliščinah. Opišem, kako doseči ta učinek tega člena.
Poslovni scenarij
Sem delal s stranko na širitev MOSS je lotitev-širok. Smo izdelali svoje taksonomije, da projekti so prvi razred državljani v hierarhiji in imajo lastno spletno stran najvišje ravni. Vodje projektov, vzdrževanje posameznega seznam informacije o povzetku projekta, kot naslov, proračun, rok pričakovanega dokončanja, preostalih proračun in druga polja vrsta povzetka. S "nespecifični" Mislim, po meri seznam SharePoint zagotovljeno, da vsebuje le en element. Poenostavljeno, Izgleda, da to:
Tehnični pristop je zelo podobno, kot je opisano tukaj (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). Na CQWP uporablja za pretvorbo XSL oddajati HTML za brskalnik, da postane.
Vedno sem Isplanirati rezultat pred potapljanje v XSL, ker XSL je nočna mora. Tukaj je moj želenega rezultata:
HTML, kot je ta ustvarja ta rezultat:
<HTML> <telo> <Center> <Tabela obroba= 1> <!-- Oznake--> <tr BGColor= modra> <TD><Pisava barva= bela><b>Ime projekta</b></Pisava></TD> <TD Poravnaj= desno><Pisava barva= bela><b>Celotni datum</b></Pisava></TD> <TD Poravnaj= desno><Pisava barva= bela><b>Proračun</b></Pisava></TD> <TD Poravnaj= desno><Pisava barva= bela><b>Dejanske stroške</b></Pisava></TD> <TD><Pisava barva= bela><b>Splošno stanje</b></Pisava></TD> </tr> <tr> <TD>Re-wire računalniški učilnici.</TD> <TD Poravnaj= desno>02/01/08</TD> <TD Poravnaj= desno>22,500.00</TD> <TD Poravnaj= desno>19,000.00</TD> <TD>V teku</TD> </tr> <tr> <TD>Določba strežnikov za SQL nadgradite</TD> <TD Poravnaj= desno>04/01/08</TD> <TD Poravnaj= desno>7,500.00</TD> <TD Poravnaj= desno>0.00</TD> <TD>Načrtovanih</TD> </tr> </Tabela> </Center> </telo> </HTML> |
Pristop
Sledite tem korakom za ustvarjanje mreže:
- Opredeliti elemente v mreži (vrstice/stolpce).
- Določite in ustvarite stolpce potrebno mesta.
- Ustvarjanje podstrani za projekte in nespecifični sezname.
- Dodajte na CQWP spletni strani in nastavite na iskanje vaše sezname.
- Spremeni v CQWP XML zbrati up dodatne stolpce.
- Spreminjanje XSL za ustvarjanje tabele.
Bom osredotočila na šestem. Števila od ena do štiri so naravnost naprej in nekaj, kar vsak CQWP uporabnik je že naredil. Število pet je bilo dobro dokumentiran, drugi, vključno z izčrpno zaslon strel obremenjeno članek iz MSDN tukaj (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) in Heather Solomon's blog tukaj (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Matice in sorniki
Začetek in izvajanje korake eno do pet kot na MSDN dokumentacijo in Heather Solomon's članek.
Na tej točki, ste dodali vaš CQWP stran in imate vaš <CommonViewFields> konfiguriran kot je potrebno.
Običajni koraki, Dobim teh vmesnih rezultatov:
1. Ustvarite vrsto vsebine, seznam iz predloge po meri za to vrsto vsebine in dveh mestih. Tukaj je vrsta vsebine:
Tukaj je stran struktura:
2. Dodajanje v CQWP čez tvor svoj projekt podmesta in nespecifični seznamov Povzetek projekta:
3. Dodaj vse dodatne informacije želim preko na <CommonViewFields>:
<Lastnost ime="CommonViewFields" vrsta="niz">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</Lastnost>
Upoštevajte, da sem moral obdržati vse lastnosti polja na eno vrstico ali ne bi delo (CQWP bi mi povedal, da poizvedba je vrnila nobenih elementov).
4. Na tej točki, smo pripravljeni, da presežemo članek MSDN in flip na nad Heather Solomon's članek. Sledite svoj korakov začne blizu korak #5 ustvariti prilagojene / unghosted različica ItemStyle.xsl. Sledim Heather's nasveti, navzgor po korak 11 in dobili teh vmesnih rezultatov:
4.1: Ime moje predloge XSL, kot sledi:
<XSL:ime predloge = "mreža" ujemajo = "vrstico[@Style = "Omrežje"]" mode = "itemstyle">
Tudi rahlo spremeniti, da jo predlagal <XSL:za vsako …> z dodajanjem a <br /> Tag zagotoviti čistejši kotacijo:
<XSL:za vsako Izberite="@*"> P:<XSL:vrednost za Izberite="ime()" /><br/> </XSL:za vsako>
4.2: Spreminjam spletnega gradnika, pojdite na videz in izberite svoj omrežje"" slog:
Uporabite nastavitve, in tukaj je rezultat:
Lahko vidimo iz zgoraj da polja želimo (Ime projekta, stroške, status, itd) so na voljo za nas za uporabo, ko smo oddajajo HTML. Ne samo, da, ampak smo videli imena, s katerimi smo morajo reference stolpce v XSL. Na primer, smo reference projekt Status kot "Project_x005F_x0020_Name".
Na tej točki, bomo odstopati od Heather's blog in ramenih teh velikanov, Dodam moje malo.
ContentQueryMain.xsl
OPOMBA: Ko spreminjate tako ContentQueryMain.xsl kot tudi ItemStyle.xsl, morate preveriti te datoteke nazaj v, preden boste videli učinek spremembe.
Za namene mrežo za izdelavo, MOSS uporablja dve različni XSL datoteke, da rezultate vidimo iz a CQWP. Za ustvarjanje prejšnje bit proizvodnje, mi spremeni ItemStyle.xsl. MAH dejansko uporablja drugo datoteko XSL, ContentQueryMain.xsl, da v povezavi z ItemStyle.xsl ustvariti svoj HTML. Kot že ime pove, ContentQueryMain.xsl je glavni"" XSL, ki krmili celoten prevod. Poudarjeno skozi vseh predmetov in prehaja jih enega po enega na predlog v ItemStyle.xsl. Mi boste spremeniti ItemStyle.xsl za ustvarjanje na prostem <Tabela> oznako pred oddaja prvi vrstici podatkov in zapiranje <Tabela> oznaka po oddajajo zadnji vrstici. Da bi to dosegli, ContentQueryMain.xsl je spremenil prenesti dva parametra naše omrežje"" predlogo v ItemStyle.xsl, "zadnji vrstici" in "trenutne vrstice". ItemStyle.xsl uporablja to pogojno oddajati potrebne oznake.
Heather Solomon tehniki, bomo poiskati ContentQueryMain.xsl. Nahaja se na istem mestu kot ItemStyle.xsl. Ta zaslon strel bi moral pomagati:
Moramo narediti te spremembe:
- Spremenite predlogo xsl, "CallItemTemplate" ki dejansko sklicuje naše Grid predloga v ItemStyle.xsl. Bo peljemo dva parametra za Grid predloga, tako da ima podatke, da za pogojno ustvarjanje, odpiranje in zapiranje <Tabela> Tags.
- Spremeniti še en košček od ContentQueryMain.xsl, ki zahteva "CallItemTemplate" prenesti to "LastRow" parameter, tako da LastRow lahko prenesejo naše Grid predloga.
Poiščite predlogo, imenovano "OuterTemplate.CallItemTemplate" opredelila niz:
<XSL:predlogo ime="OuterTemplate.CallItemTemplate">
Zamenjati celotno predlogo takole:
<XSL:predlogo ime="OuterTemplate.CallItemTemplate"> <XSL:param ime="CurPosition" /> <!-- Dodaj "LastRow" Parameter. Mi samo uporabo, ko je element style prelaz v "Mrežo". --> <XSL:param ime="LastRow" /> <XSL:Izberite> <XSL:ko test="@Style = "NewsRollUpItem""> <XSL:uporabljajo predloge Izberite="." način="itemstyle"> <XSL:s param ime="EditMode" Izberite="$cbq_iseditmode" /> </XSL:uporabljajo predloge> </XSL:ko> <XSL:ko test="@Style = "NewsBigItem""> <XSL:uporabljajo predloge Izberite="." način="itemstyle"> <XSL:s param ime="CurPos" Izberite="$CurPosition" /> </XSL:uporabljajo predloge> </XSL:ko> <XSL:ko test="@Style = "NewsCategoryItem""> <XSL:uporabljajo predloge Izberite="." način="itemstyle"> <XSL:s param ime="CurPos" Izberite="$CurPosition" /> </XSL:uporabljajo predloge> </XSL:ko> <!-- Pass trenutni položaj in lastrow v mrežo itemstyle.xsl predlogo. ItemStyle.xsl ki bo uporabil oddajati odprte in zapiranje <Tabela> Tags. --> <XSL:ko test="@Style = "Mrežo""> <XSL:uporabljajo predloge Izberite="." način="itemstyle"> <XSL:s param ime="CurPos" Izberite="$CurPosition" /> <XSL:s param ime="Nazadnje" Izberite="$LastRow" /> </XSL:uporabljajo predloge> </XSL:ko> <XSL:drugače> <XSL:uporabljajo predloge Izberite="." način="itemstyle"> </XSL:uporabljajo predloge> </XSL:drugače> </XSL:Izberite> </XSL:predlogo> |
Komentarje opišite namen spremembe.
seveda, "OuterTemplate.CallItemTemplate" se sama imenuje iz druge predloge. To predlogo poiščite z iskanjem besedilni niz:
<XSL:predlogo ime="OuterTemplate.Body">
Pomikanje po navodilih v OuterTemplate.Body in vstavite naslednji LastRow parameter (prikazano kot komentar v poševnem tisku):
<XSL:Call-template ime="OuterTemplate.CallItemTemplate"> <XSL:s param ime="CurPosition" Izberite="$CurPosition" /> <!-- Vstavi LastRow parameter. --> <XSL:s param ime="LastRow" Izberite="$LastRow"/> </XSL:Call-template>
Po vsem tem, končno imamo stvari pravilno nastavljen tako, da lahko oddaja naše ItemStyle.xsl <Tabela> Tags na pravem mestu.
ItemStyle.Xsl
OPOMBA: Znova, Preverite v ItemStyle.xsl po spreminjati tako, da si ogledate učinek teh sprememb.
Tukaj imamo dve nalogi:
- Zamenjati celotno mrežo predloge. Vi moči ulitek/pasta od spodaj.
- Dodamo nekaj Lari-fari zunaj definicijo predloge, ki omogoča "formatcurrency" predloge za delo. (Vam lahko povem, da imam neizrazito ročaj na XSL).
Prvi, na vrhu ItemStyle.xsl, Dodaj to vrstico:
<!-- Nekaj Lari-fari, ki nam omogoča, da prikažete ZDA. valuta. --> <XSL:decimalni obliki ime="osebje" mestno="D" /> <XSL:predlogo ime="Privzeto" tekmo="*" način="itemstyle">
Upoštevajte, da sem dodal neposredno pred na <XSL:ime predloge = "privzeta" …> opredelitev.
Naslednji, nazaj poseči po naše Grid predloga. Zamenjati celotno mrežo predloge s spodnjo kodo. To je temeljito razložiti, ampak ne oklevajte, da email mi ali pustite komentar na mojem blogu, če imate vprašanja.
<XSL:predlogo ime="Mreža" tekmo="Vrstica[@Style = "Mrežo"]" način="itemstyle"> <!-- ContentMain.xsl prelazov CurPos in nazadnje. Te uporabljamo pogojno oddajati odprte in zapiranje <Tabela> Tags. --> <XSL:param ime="CurPos" /> <XSL:param ime="Nazadnje" /> <!-- Naslednje spremenljivke so nespremenjen od standardnih ItemStyle.xsl --> <XSL:spremenljivka ime="SafeImageUrl"> <XSL:Call-template ime="OuterTemplate.GetSafeStaticUrl"> <XSL:s param ime="UrlColumnName" Izberite=""Podoba""/> </XSL:Call-template> </XSL:spremenljivka> <XSL:spremenljivka ime="SafeLinkUrl"> <XSL:Call-template ime="OuterTemplate.GetSafeLink"> <XSL:s param ime="UrlColumnName" Izberite=""LinkUrl""/> </XSL:Call-template> </XSL:spremenljivka> <XSL:spremenljivka ime="DisplayTitle"> <XSL:Call-template ime="OuterTemplate.GetTitle"> <XSL:s param ime="Naslov" Izberite="@Title"/> <XSL:s param ime="UrlColumnName" Izberite=""LinkUrl""/> </XSL:Call-template> </XSL:spremenljivka> <XSL:spremenljivka ime="LinkTarget"> <XSL:Če test="@OpenInNewWindow = "True"" >_blank</XSL:Če> </XSL:spremenljivka> <!-- Tukaj definiramo spremenljivke, "tableStart". Ta vsebuje HTML, ki jih uporabljamo za opredelitev odpiranje tabele, kot tudi oznake stolpcev. Upoštevajte, da če CurPos = 1, To vključuje HTML oznako CDATA. Drugače, je prazen. TableStart vrednost emited vsakič, ko ItemStyle se imenuje preko ContentQueryMain.xsl. --> <XSL:spremenljivka ime="tableStart"> <XSL:Če test="$CurPos = 1"> <![CDATA[ <obroba tabele = 1> <tr bgcolor = "blue"> <TD><Barva pisave = "bela"><b>Ime projekta</b></Pisava></TD> <TD align = "desno"><Barva pisave = "bela"><b>Celotni datum</b></Pisava></TD> <TD align = "desno"><Barva pisave = "bela"><b>Proračun</b></Pisava></TD> <TD align = "desno"><Barva pisave = "bela"><b>Dejanske stroške</b></Pisava></TD> <TD><Barva pisave = "bela"><b>Splošno stanje</b></Pisava></TD> </tr> ]]> </XSL:Če> </XSL:spremenljivka> <!-- Druga spremenljivka, tableEnd preprosto določa zapiranje tabela oznako. Kot pri tableStart, je vedno emited. Zato je njegova vrednost je dodeljen pogojno na podlagi ali smo jih sprejela zadnji vrstici ContentQueryMain.xsl. --> <XSL:spremenljivka ime="tableEnd"> <XSL:Če test="$CurPos = $Last"> <![CDATA[ </Tabela> ]]> </XSL:Če> </XSL:spremenljivka> <!-- Vedno oddajati vsebina tableStart. Če to ni prva vrstica nas sprejel ContentQueryMain.xsl, potem vemo, da bo njegova vrednost prazna. Onesposobiti izhod uhaja, ker ko tableStart ni prazno, To vključuje dejansko HTML, da želimo biti opravljene s strani brskalnika. Če ne povemo XSL razčlenjevalca, da onemogočite izhod uhaja, To bo ustvarilo stvari, kot"<Tabela>" namesto o"<Tabela>". --> <XSL:vrednost za Izberite="$tableStart" onesposobiti-proizvodnja uhaja="da"/> <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:vrednost za Izberite="@Project_x005F_x0020_Name"/> </TD> <TD Poravnaj="pravico"> <XSL:vrednost za Izberite="@Project_x005F_x0020_End_x005F_x0020_Date"/> </TD> <TD Poravnaj="pravico"> <XSL:Call-template ime="formatcurrency"> <XSL:s param ime="vrednost" |
To je bil neverjetno uporaben. hvala!
Aah… bilo, ker drugače imenovan svoj slog seznama in ne zavedajo, da je ContentQueryMain.xsl to ček zakaj "stil":
<XSL:Ko test="@Style='NameOfMyStyle" ">
S tem preimenovati to obdelan. 🙂
Skoraj zastonj: I uspelo izhod v </Tabela> oznaka na koncu pravilno, vendar manjka začetna oznaka. Zdi se, test = "$CurPos = 1" ne vrne true. Ampak zakaj?
Veliki Post. Paul, sem naredil vse zgoraj stvari. Imam vprašanje, kako lahko dosegli vsoto "celotne dejanske stroąke" ali vsota vrednosti dveh stolpcih.
Ste naredili vse delo pri ustvarjanju meri ContentQueryMain in ItemStyle xsl datoteke? Zato, prosim, je, da ne želite skrbeti svoj prilagojene sloge prepisana z obliži ali nadgradnje. Ali poznate primere? Poskusil sem kar identična kopija v ContentQueryMain.xsl ter uploading to novo po meri kopijo knjižnice slogov. Ko polaganje sklic na datoteko xsl v lastnosti MainXslLink je .webpart, Dobim 401 ne dovoli. Datoteka xsl po meri je objavljeno različico in vsakdo ima branje dostop do.
fantastično mesto hvala! So bili bori s tem zdaj v zadnjih nekaj dneh.
živjo, to was pošteno uslužen knjiženja. Imam vse delovne, in tudi izvajati Mike Brown je sprememba tako skupine
Rezultati v tabeli z karkoli izberem kot parameter Združi po na CQWB lastnosti.
Naredil sem naslov povezavo tudi, tako deluje lepo. Imam še en problem, Čeprav. Sem združevanje rezultatov po imenu spletnega mesta. Znotraj tabele, skupin jih lepo, in izgleda super, vendar je še vedno tiskanje ven vse skupine
imena(v mojem primeru imena mest) nad tabelo. Ali kdo ve, kako se znebiti teh?
hvala,
Greg
Lep članek. Mi je uspelo dati svoj tabela videz privzeto SharePointove sezname z analizo izvorne kode seznama. Tu so glavni HTML bloki potrebni primerni v ItemStyle:
<Širina tabele = "100 %" razred = "ms-listviewtable" obroba = 0 cellspacing = 0 cellpadding = 1 dir = "Nič">
<!–GLAVA–>
<Razred TR = "ms-viewheadertr" VALIGN = TOP>
<Obseg nowrap TH = "col" razred = "ms-vh2"><div style = "širina:100%;položaj:relativne;levo:0;Top:0;">
<Slog tabele = "širina:100%;" CtxNum = "1" višina = "100 %" cellspacing = 1 cellpadding = 0 class = "ms-unselectedtitle">
<TR>
<TD širino = "100 %" Razred = "ms-vb" nowrap>
Texte du titer ici
</TD>
<TD style = "položaj:absolutno;">
</TD>
</TR>
</TABELA></div>
</TH>
<!–Ponovite za vse glave celice–>
</TR>
<!– Podatki v tabeli –>
<Razred TR = "">
<!–Podatkov stolpca, uporabite Paul's kodo za prvo s hiperpovezavo –>
<TD Class = "ms-vb2">Podatki tukaj</TD>
<!–Prazen stolpec–>
<TD Class = "ms-vb2">
<span dir = nič></razpon><
/TD>
<!–Datum stolpec–>
<TD Class = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Nadomestna vrstica – Uporabite novo XSL spremenljivka, ki vstavi nadomestni razred glede na trenutne vrstice modulo 2–>
<Razred TR = »ms-izmenični«>
…
</TR>
</TABELA>
To ravno iskal...Vi skala človek...Naj živi...Ljubim za post..
<XSL:Izberite uporabi predloge = "." mode = "itemstyle">
<XSL:s param ime = "CurPos" Izberite = "$CurPosition" />
<XSL:s param ime = "zadnje" Izberite = "$LastRow" />
<XSL:s param ime = "StartNewGroup" Select="@__begingroup" />
</XSL:ko>
<XSL:Kdaj test = "$StartNewGroup ="True"">
<tr>
<TD >
<XSL:name="OuterTemplate.GetGroupName Call-template">
<XSL:s param ime = "GroupName" Select="@*[ime()= $Group]"/>
<XSL:s param ime = "GroupType" Izberite "$GroupType" = />
</XSL:Call-template>
</TD>
</tr>
</XSL:ko>
<XSL:drugače>
</XSL:drugače>
</XSL:Izberite>
Zdravo Paul,
Pri delu s spletnim gradnikom za poizvedbo xml/xsl in vsebine, ste našli vse dobre načine, da format vaš xslt? Poskuša spreminjati in preskus modela so se izkazali prav bolečina v na a ** samo z urejevalnikom besedila…
Vse najboljše
(npr.. https://myweb.com/Marketing/images/icn-order.gif, )
Uporabiti sliko ali sliko v polje Vrsta CommonViewFields? (npr.. InternalColumnName, Podoba)
Vaš post je točno to, kar je iskal. Vendar, Jaz vekanje zaslužiti to obdelovati.
Imam dokumente, ki so shranjene v različnih doc. knjižnice, vendar so z uporabo kolone po meri razreda (izbira: 1 ali 2. Želim uporabljati CQWP za prikaz teh dokumentov na osnovi njihovega razreda.
Sem mogel prišteti v CQWP, izvoz v EPD, Konfigurirajte itemStyle.xls razkazati fileds po meri v pogledu seznama. vendar, Lahko uspešno izvaja, kar ste opisali tukaj.
To so stolpci, želim pokazati v svoj CQWP:
Vrsta datoteke (razkazati ikona)
Naslov datoteke
Datum zadnje spremembe
Spremenil, ki
Rezerviran za
Preveri v pripombah
Jaz splošno življati rezultat v obliki seznama. Kako spremenim to obliko talble.
hvala.
Rajko
Žal mi je za missspelling na moje ime, ne vem kje je ” prišel iz.