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" Izberite="@Project_x005F_x0020_Budget"></XSL:s param>
</XSL:Call-template>
</TD>
<TD Poravnaj="pravico">
<XSL:Call-template ime="formatcurrency">
<XSL:s param ime="vrednost" Izberite="@Project_x005F_x0020_Expenses"> </XSL:s param>
</XSL:Call-template>
</TD>
<TD>
<XSL:vrednost za Izberite="@Project_x005F_x0020_Status"/>
</TD>
<!--
Vse to je komentirana za razjasnitev stvari.
Vendar, prinese nazaj in stvari v a <TD> videti njegov učinek.
-->
<!--
<div id = "linkitem" razred = "točke">
<XSL:Če test = "dolžina niza($SafeImageUrl) != 0 ">
<razred del = "slike-površina-levo">
<a href = "{$SafeLinkUrl}" Target = "{$LinkTarget}">
<img class = "image-nespremenljivo širino" src = "{$SafeImageUrl}" ALT = "{@ImageUrlAltText}"/>
</a>
</div>
</XSL:Če>
<razred del = "link-postavka">
<XSL:Call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href = "{$SafeLinkUrl}" Target = "{$LinkTarget}" naslov = "{@LinkToolTip}">
<XSL:vrednost-izberite "$DisXSLyTitle" = />
</a>
<razred del = "opis">
<XSL:vrednost od select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Oddajajo zapiranje tabela tag. Če ne bomo v zadnji vrsti,
To bo prazna.
-->
<XSL:vrednost za Izberite="$tableEnd" onesposobiti-proizvodnja uhaja="da"/>
</XSL:predlogo>
<XSL:predlogo ime="formatcurrency">
<XSL:param ime="vrednost" Izberite="0" />
<XSL:vrednost za Izberite='oblika-število($vrednost, "$DDD,DDD,DDD.DD", "osebje")' />
</XSL:predlogo>
|