Apžvalga ir tikslas
Out of the box, SAMANŲ’ Turinio užklausos žiniatinklio dalis (CQWP) rodo jo rezultatų sąrašą formatu, panašūs į paieškos rezultatus. Tai taip pat galima matyti rezultatus tinklelyje formatu (ty. HTML lentelės formatą). Tinklelio formatai yra geriau kai kuriais atvejais. Aprašyti, kaip pasiekti kad šis straipsnis.
Verslo scenarijus
Aš dirbau su klientu visos įmonės MOSS rida. Mes turime sukurti jų taksonomija taip, kad projektai pirmos klasės piliečiais hierarchijos ir turi savo aukščiausio lygio svetainės. Projektų vadovai išlaikyti Singletonas sąrašą projekto informacijos santrauka, pvz., pavadinimas, biudžeto, numatomas baigimo data, Likusi biudžeto ir kitų suvestinės tipo laukai. Iš "Singletonas" Aš tai pasirinktinį SharePoint sąrašą garantuoja, kad yra tik viena prekė. Gerokai, atrodo, kad tai:
Techniniu požiūriu yra beveik toks pat kaip aprašyta čia (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). Į CQWP naudoja XSL transformacija išmesti HTML naršyklė teikti.
Aš visada įsivaizduoti rezultatas prieš pasinerdami į XSL nes XSL yra košmaras. Čia yra mano norimo rezultato:
HTML kaip tai generuoja to:
|
<HTML>
<įstaiga>
<centras>
<lentelė sienos= 1>
<!-- Etiketės->
<TR bgcolor= blue>
<TD><šriftas spalva= balta><b>Projekto pavadinimas</b></šriftas></TD>
<TD suderinti= teisės><šriftas spalva= balta><b>Visą dieną</b></šriftas></TD>
<TD suderinti= teisės><šriftas spalva= balta><b>Biudžeto</b></šriftas></TD>
<TD suderinti= teisės><šriftas spalva= balta><b>Faktinių išlaidų</b></šriftas></TD>
<TD><šriftas spalva= balta><b>Bendras statusas</b></šriftas></TD>
</TR>
<TR>
<TD>Vėl vielos kompiuterių klasėje.</TD>
<TD suderinti= teisės>02/01/08</TD>
<TD suderinti= teisės>22,500.00</TD>
<TD suderinti= teisės>19,000.00</TD>
<TD>Vyksta</TD>
</TR>
<TR>
<TD>Nuostata serveriais SQL atnaujinti</TD>
<TD suderinti= teisės>04/01/08</TD>
<TD suderinti= teisės>7,500.00</TD>
<TD suderinti= teisės>0.00</TD>
<TD>Planuojama</TD>
</TR>
</lentelė>
</centras>
</įstaiga>
</HTML>
|
Požiūris
Atlikite šiuos veiksmus, norėdami sukurti tinklelį:
- Nustatyti sudedamąsias dalis tinklelis (eilutes/stulpelius).
- Apibrėžti ir sukurti reikia svetainės stulpeliai.
- Sukurti sub svetainių projektai ir pavienių sąrašų.
- Pridėti į CQWP tinklapį ir konfigūruoti ją ieškoti savo sąrašus.
- Pakeisti į CQWP XML surinkti papildomų stulpelių nustatymą.
- Modifikuoti XSL, kad būtų sukurti.
I 'm going to dėmesio numeris šeši. Vienas per keturis skaičius yra tiesiai į priekį ir ko bet CQWP viskas jau padaryta. Numeris penki buvo gerai dokumentuota iš kitų, įskaitant Šis išsamus ekrano fotografiją pakrauta straipsnis iš MSDN čia (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ir Heather Saliamono Dienoraštis čia (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Veržlės ir varžtai
Pradėti ir įgyvendinti veiksmus nuo 1 iki penkių MSDN dokumentus ir Heather Saliamono straipsnio.
Šiuo metu, pridėjote savo CQWP į puslapį, ir jūs turite savo <CommonViewFields> sukonfigūruotas prireikus.
Įprasta veiksmus, Man šie tarpiniai rezultatai:
1. Kurti turinio tipą, šablono pasirinktinį sąrašą to turinio tipo ir dvi svetaines. Čia yra turinio tipas:
Čia yra svetainės struktūra:
2. Pridėti į CQWP po sukurtas projekto antrines svetaines ir pavienių projekto santrauka sąrašus:
3. Pridėti visa informacija, kurios aš noriu per į <CommonViewFields>:
<nekilnojamojo turto vardas, pavadinimas="CommonViewFields" tipo="eilutė">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</nekilnojamojo turto>
Atkreipkite dėmesį, kad man teko išlaikyti visi ypatybių laukai viena linija arba jis neveikia (CQWP būtų pasakyti, kad užklausa grąžino elementų).
4. Šiuo metu, Mes pasiruošę pereiti nuo MSDN straipsnį ir apversti ant per Heather Saliamono straipsnį. Atlikite savo veiksmus pradedant netoli žingsnis #5 kurti individualią / unghosted versija ItemStyle.xsl. Aš po Heather patarimai, aukštyn per žingsnį 11 ir gauti šiuos tarpinius rezultatus:
4.1: Vardas mano XSL šabloną taip:
<XSL:šablono pavadinimas = "tinklelis" rungtynės = "eilutę[@Style = "Tinklelis"]" režimas = "itemstyle">
Aš taip pat šiek tiek modifikuoti jai pasiūlė <XSL:už kiekvieną …> pridėjus a <br /> Tag teikti švaresnis sąrašą:
<XSL:už kiekvieną Pasirinkite="@*">
P:<XSL:vertė Pasirinkite="vardas, pavadinimas()" /><br/>
</XSL:už kiekvieną>
4.2: Aš pakeisti puslapio dalis, Pasirinkite mano "tinklelis išvaizdą ir" stilius:
Pritaikytas ir Štai rezultatas:
Mes galime matyti iš pirmiau kad srityse mes norime (Projekto pavadinimas, sąskaita, statusas, ir tt) yra mums naudoti, kai mes skleisti HTML. Ne tik, kad, bet mes pamatyti pavadinimus, kuriais mes turi nurodyti tuos stulpelius į XSL. Pvz., Mes nuoroda projekto būseną kaip "Project_x005F_x0020_Name".
Šiuo metu, Mes nukrypti nuo Heather dienoraštį ir iš šių milžinų pečių, Pridedu savo šiek tiek.
ContentQueryMain.xsl
PASTABA: Keičiant tiek ContentQueryMain.xsl, tiek ItemStyle.xsl, reikia patikrinti tuos failus atgal į prieš jus pamatyti savo pasikeitimo poveikis.
Tinklo formavimo tikslais, SAMANŲ naudoja du skirtingus XSL failus pateikia rezultatus, matome iš a CQWP. Generuoti į ankstesnį šiek tiek produkcijos, Mes pakeisti ItemStyle.xsl. SAMANŲ iš tikrųjų naudoja kitą XSL failą, ContentQueryMain.xsl, kartu su ItemStyle.xsl kurti savo HTML. Kaip jos pavadinimas, ContentQueryMain.xsl yra "pagrindinė" XSL, kuris kontroliuoja apie bendrą srautą Vertimas. Tai kartojasi per visus rasti elementus ir eina juos po vieną į šablonus ItemStyle.xsl. Mes jums pakeisti ItemStyle.xsl kurti atvirą <lentelė> Tag prieš skleidžiantis pirmos eilutės duomenys ir uždarymas <lentelė> žymę po skleidžiančių paskutinę eilutę. Norėdami tai atlikti, ContentQueryMain.xsl iš dalies keičiami du parametrai perduoti mūsų "tinklelis" šablono ItemStyle.xsl, "paskutinę eilutę" ir "dabartinės eilutės". ItemStyle.xsl naudoja tai sąlyginai išmesti reikia Žymos.
Naudojant Heather Saliamono technika, mes rasti ContentQueryMain.xsl. Jis įsikūręs pačioje vietoje kaip ir ItemStyle.xsl. Šis ekrano nuotrauka turėtų padėti:
Mums reikia atlikti šiuos keitimus:
- Xsl šablono modifikavimas, "CallItemTemplate" kad iš tikrųjų remiasi mūsų tinklelio šablono ItemStyle.xsl. Mes bus perduoti du parametrai tinklelio šabloną, kad dar reikia sąlyginai generuoti atidaryti ir uždaryti duomenų <lentelė> Žymos.
- Pakeisti kitą tiek ContentQueryMain.xsl, kad "CallItemTemplate" ją perduoti "LastRow" parametras, kad LastRow gali būti perduodama į mūsų tinklo šablonas.
Rasti šabloną, pavadintą "OuterTemplate.CallItemTemplate" identifikuojami pagal eilutę:
<XSL:šablonas vardas, pavadinimas="OuterTemplate.CallItemTemplate">
Pakeisti visą šabloną taip:
|
<XSL:šablonas vardas, pavadinimas="OuterTemplate.CallItemTemplate">
<XSL:param vardas, pavadinimas="CurPosition" />
<!--
Pridėti "LastRow" parametras.
Mes tik jį naudoti, kai prekės stilius išlaikyti, yra "Tinklelis".
-->
<XSL:param vardas, pavadinimas="LastRow" />
<XSL:pasirinkti>
<XSL:kada bandymas="@Style = "NewsRollUpItem"">
<XSL:taikyti šablonus Pasirinkite="." režimas="itemstyle">
<XSL:su param vardas, pavadinimas="EditMode" Pasirinkite="$cbq_iseditmode" />
</XSL:taikyti šablonus>
</XSL:kada>
<XSL:kada bandymas="@Style = "NewsBigItem"">
<XSL:taikyti šablonus Pasirinkite="." režimas="itemstyle">
<XSL:su param vardas, pavadinimas="CurPos" Pasirinkite="$CurPosition" />
</XSL:taikyti šablonus>
</XSL:kada>
<XSL:kada bandymas="@Style = "NewsCategoryItem"">
<XSL:taikyti šablonus Pasirinkite="." režimas="itemstyle">
<XSL:su param vardas, pavadinimas="CurPos" Pasirinkite="$CurPosition" />
</XSL:taikyti šablonus>
</XSL:kada>
<!--
Dabartinę padėtį ir lastrow perduoti tinklo itemstyle.xsl šablonas.
ItemStyle.xsl naudos, skleidžia atviro ir uždarymo <lentelė> Žymos.
-->
<XSL:kada bandymas="@Style = "Tinklelis"">
<XSL:taikyti šablonus Pasirinkite="." režimas="itemstyle">
<XSL:su param vardas, pavadinimas="CurPos" Pasirinkite="$CurPosition" />
<XSL:su param vardas, pavadinimas="Paskutinis" Pasirinkite="$LastRow" />
</XSL:taikyti šablonus>
</XSL:kada>
<XSL:kitaip>
<XSL:taikyti šablonus Pasirinkite="." režimas="itemstyle">
</XSL:taikyti šablonus>
</XSL:kitaip>
</XSL:pasirinkti>
</XSL:šablonas>
|
Komentarus apibūdinti pakeitimų tikslas.
žinoma, "OuterTemplate.CallItemTemplate" pati iškvietė kitą šabloną. Raskite tą šabloną ieškodami šio teksto eilutė:
<XSL:šablonas vardas, pavadinimas="OuterTemplate.Body">
Slinkimas per OuterTemplate.Body instrukcijas ir įterpti parametrą LastRow taip (rodomas komentare, pasvirasis):
<XSL:Call-template vardas, pavadinimas="OuterTemplate.CallItemTemplate">
<XSL:su param vardas, pavadinimas="CurPosition" Pasirinkite="$CurPosition" />
<!-- Įterpti parametrą LastRow. -->
<XSL:su param vardas, pavadinimas="LastRow" Pasirinkite="$LastRow"/>
</XSL:Call-template>
Po visa tai, pagaliau buvo nustatyti tinkamai, kad mūsų ItemStyle.xsl galėtų duoti dalykų <lentelė> Žymos į reikiamą vietą.
ItemStyle.Xsl
PASTABA: Dar kartą, įsiregistruoti ItemStyle.xsl atlikę pakeitimus, kad matytumėte šių pokyčių poveikį.
Mes turime dvi užduotis čia:
- Pakeisti visą tinklo šablonas. Jūs galite kopijuoti ir įklijuoti iš apačios.
- Pridėti kai kurios mumbo jumbo šabloną apibrėžimą, leidžiantis "formatcurrency" šablonas veiktų. (Galite pasakyti, kad aš silpnas rankena XSL).
Pirmosios, viršuje, ItemStyle.xsl, pridėkite šią eilutę:
<!-- Kai kurie mumbo jumbo, kuris leistų parodyti JAV. valiuta. -->
<XSL:dešimtainis formatas vardas, pavadinimas="darbuotojai" skaitmuo="D" />
<XSL:šablonas vardas, pavadinimas="Numatytasis" rungtynės="*" režimas="itemstyle">
Pastaba kad dodałem jį tiesiogiai prieš ir <XSL:šablono pavadinimas = "Numatytasis" …> apibrėžimas.
Kitas, grįžti į mūsų tinklo šablonas. Pakeisti visą tinklo šablonas žemiau esantį kodą. Jis yra gerai pakomentavo, Tačiau nedvejodami rašykite man arba palikti komentarus savo dienoraštį, jei turite klausimų.
|
<XSL:šablonas vardas, pavadinimas="Tinklelis" rungtynės="Eilutės[@Style = "Tinklelis"]" režimas="itemstyle">
<!--
ContentMain.xsl eina CurPos, su paskutiniais.
Mes naudojame šias išlygomis skleidžia atviro ir uždarymo <lentelė> Žymos.
-->
<XSL:param vardas, pavadinimas="CurPos" />
<XSL:param vardas, pavadinimas="Paskutinis" />
<!-- Kintamieji yra nemodifikuotą nuo standartinių ItemStyle.xsl -->
<XSL:kintamasis vardas, pavadinimas="SafeImageUrl">
<XSL:Call-template vardas, pavadinimas="OuterTemplate.GetSafeStaticUrl">
<XSL:su param vardas, pavadinimas="UrlColumnName" Pasirinkite=""ImageUrl""/>
</XSL:Call-template>
</XSL:kintamasis>
<XSL:kintamasis vardas, pavadinimas="SafeLinkUrl">
<XSL:Call-template vardas, pavadinimas="OuterTemplate.GetSafeLink">
<XSL:su param vardas, pavadinimas="UrlColumnName" Pasirinkite=""LinkUrl""/>
</XSL:Call-template>
</XSL:kintamasis>
<XSL:kintamasis vardas, pavadinimas="DisplayTitle">
<XSL:Call-template vardas, pavadinimas="OuterTemplate.GetTitle">
<XSL:su param vardas, pavadinimas="Antraštinė dalis" Pasirinkite="@Title"/>
<XSL:su param vardas, pavadinimas="UrlColumnName" Pasirinkite=""LinkUrl""/>
</XSL:Call-template>
</XSL:kintamasis>
<XSL:kintamasis vardas, pavadinimas="LinkTarget">
<XSL:Jei bandymas="@OpenInNewWindow = "True"" >_blank</XSL:Jei>
</XSL:kintamasis>
<!--
Čia mes apibrėžti kintamąjį, "tableStart". Tai yra HTML, mes naudojame nustatyti lentelės taip pat stulpelio žymelės atidarymo. Atkreipkite dėmesį, kad jei CurPos = 1, ji apima HTML CDATA žymę.
Kitaip, jis bus tuščias.
TableStart vertė yra emited kiekvieną kartą, kai ItemStyle yra vadinamas via ContentQueryMain.xsl.
-->
<XSL:kintamasis vardas, pavadinimas="tableStart">
<XSL:Jei bandymas="$CurPos = 1">
<![CDATA[
<lentelės kraštinėje = 1>
<TR bgcolor = "blue">
<TD><Šrifto spalva = "balta"><b>Projekto pavadinimas</b></šriftas></TD>
<TD align = "right"><Šrifto spalva = "balta"><b>Visą dieną</b></šriftas></TD>
<TD align = "right"><Šrifto spalva = "balta"><b>Biudžeto</b></šriftas></TD>
<TD align = "right"><Šrifto spalva = "balta"><b>Faktinių išlaidų</b></šriftas></TD>
<TD><Šrifto spalva = "balta"><b>Bendras statusas</b></šriftas></TD>
</TR>
]]>
</XSL:Jei>
</XSL:kintamasis>
<!--
Kitam kintamajam, tableEnd tiesiog apibrėžia uždarymo lentelės žymė.
Kaip ir tableStart, tai visada emited. Tai kodėl jo vertė priskiriama tam tikromis sąlygomis grindžiama ar mes jau buvo priimtas paskutinę eilutę ContentQueryMain.xsl.
-->
<XSL:kintamasis vardas, pavadinimas="tableEnd">
<XSL:Jei bandymas="$CurPos = $Last">
<![CDATA[ </lentelė> ]]>
</XSL:Jei>
</XSL:kintamasis>
<!--
Visada išmeta tableStart turinys. Jei tai nėra pirmos eilutės praėjo mums ContentQueryMain.xsl, tada mes žinome, jos vertė yra tuščias.
Išjungti produkcijos pabėgti nes Kada tableStart tai ne tuščias, ji apima faktinį HTML, kad mes norime būti suteiktas naršyklė. Jei mes don't tell XSL analizatorius išjungti išvesties pabėgti, ji bus sukurti daiktai kaip"<lentelė>" Vietoj to "<lentelė>".
-->
<XSL:vertė Pasirinkite="$tableStart" išjungti-produkcija-pabėgti="taip"/>
<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:vertė Pasirinkite="@Project_x005F_x0020_Name"/>
</TD>
<TD suderinti="teisė">
<XSL:vertė Pasirinkite="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TD>
<TD suderinti="teisė">
<XSL:Call-template vardas, pavadinimas="FormatCurrency">
<XSL:su param vardas, pavadinimas="vertė" Pasirinkite="@Project_x005F_x0020_Budget"></XSL:su param>
</XSL:Call-template>
</TD>
<TD suderinti="teisė">
<XSL:Call-template vardas, pavadinimas="FormatCurrency">
<XSL:su param vardas, pavadinimas="vertė" Pasirinkite="@Project_x005F_x0020_Expenses"> </XSL:su param>
</XSL:Call-template>
</TD>
<TD>
<XSL:vertė Pasirinkite="@Project_x005F_x0020_Status"/>
</TD>
<!--
Visi šie yra komentaru siekiant paaiškinti, ką.
Tačiau, priima jį atgal ir kita į į <TD> Norėdami pamatyti jos poveikį.
-->
<!--
<div id = "linkitem" Class = "elementas">
<XSL:Jei bandymas = "eilutės ilgis($SafeImageUrl) != 0">
<div class = "vaizdas-plotas-kairieji">
<a href = "{$SafeLinkUrl}" TARGET = "{$LinkTarget}">
<IMG class = "vaizdas-fiksuoto pločio" src = "{$SafeImageUrl}" ALT = "{@ImageUrlAltText}"/>
</a>
</DIV>
</XSL:Jei>
<div class = "ryšys-prekės">
<XSL:Call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href = "{$SafeLinkUrl}" TARGET = "{$LinkTarget}" title = "{@LinkToolTip}">
<XSL:vertė-apie pasirinkite = "$DisXSLyTitle" />
</a>
<div class = "Aprašas">
<XSL:vertė-apie select="@Description" />
</DIV>
</DIV>
</DIV>
-->
</TR>
<!--
Skleisti uždarymo lentelės žymė. Jei mes ne apie paskutinę eilutę,
tai yra tuščias.
-->
<XSL:vertė Pasirinkite="$tableEnd" išjungti-produkcija-pabėgti="taip"/>
</XSL:šablonas>
<XSL:šablonas vardas, pavadinimas="FormatCurrency">
<XSL:param vardas, pavadinimas="vertė" Pasirinkite="0" />
<XSL:vertė Pasirinkite='formatas-numeris($vertė, "$DDD,DDD,DDD.DD", "personalas")' />
</XSL:šablonas>
|