Pregled i cilj
Out of the box, MOSS’ Upit Sadržaj web-dio (CQWP) prikazuje svoje rezultate u obliku popisa, similar to search results. It is also possible to display the results in a grid format (i.e. HTML obliku tablice). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Poslovni Scenarij
I have worked with a client on an enterprise-wide MOSS rollout. We have designed their taxonomy such that projects are first class citizens in the hierarchy and have their own top level site. Project managers maintain a singleton list of project summary information, poput naslova, budžet, Očekuje se datum završetka, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, to izgleda ovako:
Tehnički pristup je isti kao što je opisano ovdje (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). The CQWP uses an XSL transform to emit HTML for the browser to render.
I always envision the result before diving into the XSL because XSL is a nightmare. Here’s my desired result:
HTML kao što to stvara taj rezultat:
|
<html>
<tijelo>
<centar>
<stol granica= 1>
<!-- Etikete ->
<tr bgcolor= Blue>
<td><su boja= Bijeli><b>Naziv projekta</b></su></td>
<td svrstati= Desno><su boja= Bijeli><b>Cijela Datum</b></su></td>
<td svrstati= Desno><su boja= Bijeli><b>Budžet</b></su></td>
<td svrstati= Desno><su boja= Bijeli><b>Stvarni rashodi</b></su></td>
<td><su boja= Bijeli><b>Cjelokupna Status</b></su></td>
</tr>
<tr>
<td>Re-wire računalo soba.</td>
<td svrstati= Desno>02/01/08</td>
<td svrstati= Desno>22,500.00</td>
<td svrstati= Desno>19,000.00</td>
<td>U tijeku</td>
</tr>
<tr>
<td>Pružanje poslužitelji za SQL Upgrade</td>
<td svrstati= Desno>04/01/08</td>
<td svrstati= Desno>7,500.00</td>
<td svrstati= Desno>0.00</td>
<td>Planiran</td>
</tr>
</stol>
</centar>
</tijelo>
</html>
|
Pristup
Slijedite ove korake kako bi stvorili mrežu:
- Identificirajte komponente mreže (redaka / stupaca).
- Definirati i izraditi potrebne stupce stranice.
- Napravite pod-stranice za projekte i jednoplodnih listama.
- Dodaj u CQWP na web stranici i konfigurirati ga potražiti na popisima.
- Izmjena CQWP je XML skupiti dodatne stupce.
- Izmjena XSL generirati tablicu.
I’m going to concentrate on number six. Numbers one through four are straight-forward and something that any CQWP user has already done. Number five has been well-documented by others including this exhaustive screen-shot laden article from MSDN ovdje (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) Heather i Salomon blog ovdje (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Matice i vijci
Počnite i provesti korake od jedan do pet po MSDN dokumentacije i Heather Solomona članak.
U ovom trenutku, ste dodali svoj CQWP na stranici i imate <CommonViewFields> konfigurirati prema potrebi.
Nakon uobičajene korake, Ja se ove prijelazne rezultate:
1. Stvaranje vrste sadržaja, a templatized custom list for that content type and two sites. Here is the content type:
Ovdje je site struktura:
2. Dodajte CQWP nakon stvaranja podmjesta moj projekt i Singleton sažetak projekta popise:
3. Dodajte sve dodatne informacije putem želim <CommonViewFields>:
<svojstvo ime="CommonViewFields" tip="niz">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</svojstvo>
Imajte na umu da sam morao zadržati sve imovinsko polja u jednom retku ili neće raditi (CQWP će mi reći da je upit vratio artikala).
4. U ovom trenutku, we’re ready to move beyond the MSDN article and flip on over to Heather Solomon’s article. Follow her steps starting near step #5 stvoriti prilagođeno / unghosted version of ItemStyle.xsl. I follow Heather’s advice, se kroz korak 11 i dobiti ove prijelazne rezultate:
4.1: Ime mi je XSL predložak kako slijedi:
<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Također sam nešto mijenjati joj predložili <XSL:za-svakog …> dodavanjem <br /> označiti osigurati čišći oglas:
<XSL:za-svakog odabrati="@ *">
P:<XSL:vrijednost od odabrati="ime()" /><br/>
</XSL:za-svakog>
4.2: Ja izmijeniti dio web, go to appearance and select my "Grid" stil:
Primijenite promjenu, a ovdje je rezultat:
Možemo vidjeti iz gore da polja želimo (Ime projekta, rashod, status, itd.) are available for us to use when we emit the HTML. Not only that, but we see the names by which we must reference those columns in the XSL. Na primjer, we reference Project Status as "Project_x005F_x0020_Name".
U ovom trenutku, krećemo iz Heather blog i na ramenima tih divova, Dodam svoje malo.
ContentQueryMain.xsl
NAPOMENA: Prilikom promjene na obje ContentQueryMain.xsl kao ItemStyle.xsl, trebate provjeriti te datoteke vratiti prije nego što vidjeti učinak vaših promjena.
Za grid odluka svrhe, MOSS uses two different XSL files to produce the results we see from a CQWP. To generate the previous bit of output, we modified ItemStyle.xsl. MOSS actually uses another XSL file, ContentQueryMain.xsl to in conjunction with ItemStyle.xsl to generate its HTML. As its name implies, ContentQueryMain.xsl is the "main" XSL that controls the overall flow of translation. It iterates through all the found items and passes them one by one to templates in ItemStyle.xsl. We’ll modify ItemStyle.xsl to generate the open <stol> tag prije emitiranjem prvi redak podataka i zatvaranja <stol> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" Predložak u ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Koristeći tehniku Heather Salamonovo, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Moramo napraviti sljedeće promjene:
- Izmjena XSL predložak, "CallItemTemplate" that actually invokes our Grid template in ItemStyle.xsl. We will pass two parameters to the Grid template so that it will have the data it needs to conditionally generate opening and closing <stol> tags.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" parametar, tako da LastRow može se prenijeti na naše Grid predložak.
Locate the template named "OuterTemplate.CallItemTemplate" prepoznaje se po nizu:
<XSL:predložak ime="OuterTemplate.CallItemTemplate">
Vratite cijeli predloška kako slijedi:
|
<XSL:predložak ime="OuterTemplate.CallItemTemplate">
<XSL:zaustaviti ime="CurPosition" />
<!--
Add the "LastRow" parametar.
We only use it when the item style pass in is "Grid".
-->
<XSL:zaustaviti ime="LastRow" />
<XSL:izabrati>
<XSL:kada test="@ Style = 'NewsRollUpItem'">
<XSL:primjenjuju-predloške odabrati="." način="itemstyle">
<XSL:s param- ime="Modus" odabrati="$cbq_iseditmode" />
</XSL:primjenjuju-predloške>
</XSL:kada>
<XSL:kada test="@ Style = 'NewsBigItem'">
<XSL:primjenjuju-predloške odabrati="." način="itemstyle">
<XSL:s param- ime="CurPos" odabrati="$CurPosition" />
</XSL:primjenjuju-predloške>
</XSL:kada>
<XSL:kada test="@ Style = 'NewsCategoryItem'">
<XSL:primjenjuju-predloške odabrati="." način="itemstyle">
<XSL:s param- ime="CurPos" odabrati="$CurPosition" />
</XSL:primjenjuju-predloške>
</XSL:kada>
<!--
Pass trenutnu poziciju i lastrow na predlošku Grid itemstyle.xsl.
ItemStyle.xsl će koristiti da se emitiraju otvorena i zatvaranje <stol> tags.
-->
<XSL:kada test="@ Style = "Grid"">
<XSL:primjenjuju-predloške odabrati="." način="itemstyle">
<XSL:s param- ime="CurPos" odabrati="$CurPosition" />
<XSL:s param- ime="Zadnji" odabrati="$LastRow" />
</XSL:primjenjuju-predloške>
</XSL:kada>
<XSL:inače>
<XSL:primjenjuju-predloške odabrati="." način="itemstyle">
</XSL:primjenjuju-predloške>
</XSL:inače>
</XSL:izabrati>
</XSL:predložak>
|
Komentari opisati svrhu promjene.
Naravno, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<XSL:predložak ime="OuterTemplate.Body">
Prođite kroz upute u OuterTemplate.Body i ubacite LastRow parametar na sljedeći (prikazano kao komentar u kurzivu):
<XSL:poziv-predložak ime="OuterTemplate.CallItemTemplate">
<XSL:s param- ime="CurPosition" odabrati="$CurPosition" />
<!-- Umetnite LastRow parametar. -->
<XSL:s param- ime="LastRow" odabrati="$LastRow"/>
</XSL:poziv-predložak>
Nakon svega ovoga, konačno smo postavili stvari ispravno, tako da je naša ItemStyle.xsl može emitirati <stol> oznake na pravom mjestu.
ItemStyle.Xsl
NAPOMENA: Opet, prijava ItemStyle.xsl nakon donošenja bilo kakve promjene, tako da možete vidjeti učinak tih promjena.
Imamo dva zadatka ovdje:
- Replace the entire Grid template. You can copy/paste from below.
- Add some mumbo jumbo outside the template definition that enables "formatcurrency" template to work. (Možete reći da imam slab ručku na XSL).
Prvi, pri vrhu ItemStyle.xsl, dodajte ovu liniju:
<!-- Neki mumbo jumbo koja nam omogućuje da se prikazati dopuštenje vlade. valuta. -->
<XSL:decimal-format ime="osoblje" cifra="D" />
<XSL:predložak ime="Default" odgovarati="*" način="itemstyle">
Imajte na umu da sam ga dodao je neposredno pred <XSL:template name="Default" …> definicija.
Sljedeći, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, , ali nemojte se ustručavati da me e-mail ili ostavite komentare na mom blogu, ako imate pitanja.
|
<XSL:predložak ime="Rešetka" odgovarati="Red[@ Style = "Grid"]" način="itemstyle">
<!--
ContentMain.xsl prolazi CurPos i Zadnja.
Mi koristiti za uvjetno emitiraju otvorena i zatvaranje <stol> tags.
-->
<XSL:zaustaviti ime="CurPos" />
<XSL:zaustaviti ime="Zadnji" />
<!-- Sljedeće varijable su neizmijenjeni od standardnog ItemStyle.xsl -->
<XSL:varijabla ime="SafeImageUrl">
<XSL:poziv-predložak ime="OuterTemplate.GetSafeStaticUrl">
<XSL:s param- ime="UrlColumnName" odabrati="'ImageUrl'"/>
</XSL:poziv-predložak>
</XSL:varijabla>
<XSL:varijabla ime="SafeLinkUrl">
<XSL:poziv-predložak ime="OuterTemplate.GetSafeLink">
<XSL:s param- ime="UrlColumnName" odabrati="'LinkUrl'"/>
</XSL:poziv-predložak>
</XSL:varijabla>
<XSL:varijabla ime="DisplayTitle">
<XSL:poziv-predložak ime="OuterTemplate.GetTitle">
<XSL:s param- ime="Naslov" odabrati="@ Naslov"/>
<XSL:s param- ime="UrlColumnName" odabrati="'LinkUrl'"/>
</XSL:poziv-predložak>
</XSL:varijabla>
<XSL:varijabla ime="LinkTarget">
<XSL:ako test="@ OpenInNewWindow = 'True'" >_blank</XSL:ako>
</XSL:varijabla>
<!--
Ovdje smo definirali varijablu, "tableStart". Sadrži HTML
. Imajte na umu da ako CurPos = 1, to uključuje i HTML u cdata oznaku.
Inače, to će biti prazna.
Vrijednost tableStart je emited svaki put ItemStyle se zove putem
.
-->
<XSL:varijabla ime="tableStart">
<XSL:ako test="$CurPos = 1">
<![CDATA[
<Tablica border = 1>
<tr bgcolor="blue">
<td><font color="white"><b>Naziv projekta</b></su></td>
<td align="right"><font color="white"><b>Cijela Datum</b></su></td>
<td align="right"><font color="white"><b>Budžet</b></su></td>
<td align="right"><font color="white"><b>Stvarni rashodi</b></su></td>
<td><font color="white"><b>Cjelokupna Status</b></su></td>
</tr>
]]>
</XSL:ako>
</XSL:varijabla>
<!--
Druga varijabla, tableEnd jednostavno definira oznaku zatvaranja stol.
Kao i kod tableStart, uvijek je emited. To je razlog zašto je njegova vrijednost
.
-->
<XSL:varijabla ime="tableEnd">
<XSL:ako test="$CURPOS = $ Zadnji">
<![CDATA[ </stol> ]]>
</XSL:ako>
</XSL:varijabla>
<!--
Uvijek emitiraju sadržaj tableStart. Ako to nije prvi
, onda znamo svoju vrijednost
.
Bez izlaz bježi jer kad tableStart nije prazan, to
. Ako
, it will generate
stuff like "&Bilo;stol>" instead of "<stol>".
-->
<XSL:vrijednost od odabrati="$tableStart" disable-output-bijegu="da"/>
<tr>
<!--
P:Project_x005F_x0020_Name
:Project_x005F_x0020_End_x005F_x0020_Date
:Project_x005F_x0020_Budget
:Project_x005F_x0020_Expenses
:Project_x005F_x0020_Status
-->
<td>
<XSL:vrijednost od odabrati="@ Project_x005F_x0020_Name"/>
</td>
<td svrstati="pravo">
<XSL:vrijednost od odabrati="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td svrstati="pravo">
<XSL:poziv-predložak ime="formatCurrency">
<XSL:s param- ime="vrijednost" odabrati="@ Project_x005F_x0020_Budget"></XSL:s param->
</XSL:poziv-predložak>
</td>
<td svrstati="pravo">
<XSL:poziv-predložak ime="formatCurrency">
<XSL:s param- ime="vrijednost" odabrati="@ Project_x005F_x0020_Expenses"> </XSL:s param->
</XSL:poziv-predložak>
</td>
<td>
<XSL:vrijednost od odabrati="@ Project_x005F_x0020_Status"/>
</td>
<!--
Sve od navedenog je komentirao kako bi pojasniti stvari.
Međutim, ga vratiti i stvari u <td> vidjeti njegovu
.
-->
<!--
<div id="linkitem" class="item">
<XSL:if test="string-length($SafeImageUrl) != 0">
<div class="image-area-left">
<a href="{$SafeLinkUrl}" target="{$LinkTarget}">
<img class="image-fixed-width" src="{$SafeImageUrl}" alt="{@ ImageUrlAltText}"/>
</a>
</div>
</XSL:ako>
<div class="link-item">
<XSL:poziv-predložak name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@ LinkToolTip}">
<XSL:value-of select="$DisplayTitle"/>
</a>
<div class="description">
<XSL:value-of select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Šalji oznaku tablice zatvaranja. Ako nismo u zadnjem redu,
to će biti prazan.
-->
<XSL:vrijednost od odabrati="$tableEnd" disable-output-bijegu="da"/>
</XSL:predložak>
<XSL:predložak ime="formatCurrency">
<XSL:zaustaviti ime="vrijednost" odabrati="0" />
<XSL:vrijednost od odabrati='Oblik-broj($vrijednost, "$DDD,DDD,DDD.DD", "staff")' />
</XSL:predložak>
|