Pangkalahatang-ideya at Layunin
Sa labas ng kahon sa, Lumot’ Bahagi ng nilalaman Query Web (CQWP) nagpapakita ng mga resulta nito sa isang listahan ng format, similar to search results. It is also possible to display the results in a grid format (i.e. HTML talahanayan format). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
Negosyo Sitwasyon
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, tulad ng pamagat, badyet, inaasahang pagkumpleto petsa, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, ito ganito ang hitsura:
Ang teknikal na diskarte ay magkano ang parehong tulad ng inilarawan dito (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 tulad nito bumubuo na resulta:
<html> <katawan> <sentro> <talahanayan hangganan= 1> <!-- Mga etiketa -> <tr bgcolor= Asul> <td><ay kulay= Puti><b>Project Pangalan</b></ay></td> <td ihanay= Kanan><ay kulay= Puti><b>Kumpletuhin Petsa</b></ay></td> <td ihanay= Kanan><ay kulay= Puti><b>Badyet</b></ay></td> <td ihanay= Kanan><ay kulay= Puti><b>Aktwal na Gastos</b></ay></td> <td><ay kulay= Puti><b>Pangkalahatang Katayuan</b></ay></td> </tr> <tr> <td>Re-wire ng computer room.</td> <td ihanay= Kanan>02/01/08</td> <td ihanay= Kanan>22,500.00</td> <td ihanay= Kanan>19,000.00</td> <td>Isinasagawa</td> </tr> <tr> <td>Pagkakaloob ng mga server para sa SQL upgrade</td> <td ihanay= Kanan>04/01/08</td> <td ihanay= Kanan>7,500.00</td> <td ihanay= Kanan>0.00</td> <td>Pinlano</td> </tr> </talahanayan> </sentro> </katawan> </html> |
Lapit
Sundin ang mga hakbang upang lumikha ng grid:
- Kilalanin ang mga bahagi ng grid (hilera / haligi).
- Tukuyin at gumawa ng kinakailangang mga haligi ng site.
- Lumikha ng mga sub site para sa mga proyekto at walang pareho listahan.
- Idagdag ang CQWP sa isang pahina ng web at i-configure ito upang maghanap para sa iyong mga listahan.
- Baguhin ang XML sa CQWP upang lumikom ng karagdagang mga haligi.
- Baguhin ang XSL upang makabuo ng isang talahanayan.
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 dito (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) at Heather Solomon blog dito (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Mani At Bolts
Simulan at ipatupad ang mga hakbang na isa hanggang limang bilang bawat ang MSDN babasahin at artikulo ng Heather Solomon.
Sa puntong ito, naidagdag mo ang ang iyong CQWP sa pahina at mayroon kang iyong <CommonViewFields> isinaayos kung kinakailangan.
Ng pagsunod sa mga karaniwan na hakbang, Nakukuha ko mga intermediate resulta na ito:
1. Lumikha ng isang uri ng nilalaman, a templatized custom list for that content type and two sites. Here is the content type:
Narito ang site na istraktura:
2. Idagdag ang CQWP matapos ang paglikha ng aking mga mga subsite proyekto at walang pareho mga listahan ng buod ng proyekto:
3. Magdagdag ng lahat ng mga karagdagang impormasyon na gusto ko sa pamamagitan ng <CommonViewFields>:
<ari-arian pangalan="CommonViewFields" uri="pisi">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</ari-arian>
Tandaan na ako ay upang panatilihin ang lahat ng mga patlang ng ari-arian sa isang linya o hindi ito ay gumagana (CQWP ay sabihin sa akin na query ay hindi nagbalik ng mga item).
4. Sa puntong ito, 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 upang lumikha ng isang pasadyang / unghosted version of ItemStyle.xsl. I follow Heather’s advice, up sa pamamagitan ng hakbang 11 at makakuha ng mga mga intermediate resulta na ito:
4.1: Pangalanan ang aking XSL template tulad ng mga sumusunod:
<xsl:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
Din ako bahagyang baguhin ang kanyang iminungkahing <xsl:para sa-bawat …> sa pamamagitan ng pagdaragdag ng isang <br /> i-tag upang magbigay ng isang mas malinis na listahan:
<xsl:para sa-bawat piliin="@ *"> P:<xsl:halaga-ng piliin="pangalan()" /><br/> </xsl:para sa-bawat>
4.2: Ko baguhin ang web bahagi, go to appearance and select my "Grid" estilo:
Ilapat ang pagbabago at dito ay ang resulta:
Maaari naming makita mula sa itaas na ang mga patlang na gusto namin (Project pangalan, gastos, katayuan, at iba pa) 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. Halimbawa, we reference Project Status as "Project_x005F_x0020_Name".
Sa puntong ito, umalis kami mula sa blog Heather sa at mula sa mga balikat ng mga higante, Idagdag ko ang aking sariling kaunti.
ContentQueryMain.xsl
Tandaan: Kapag nagsasagawa ng mga pagbabago sa ang parehong ContentQueryMain.xsl pati na rin ItemStyle.xsl, kailangan mong suriin ang mga file pabalik sa bago mo makita ang mga epekto ng iyong mga pagbabago.
Para sa mga layunin sa paggawa ng grid-, 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 <talahanayan> tag bago nagpapalabas ang unang hanay ng data at ang pagsasara <talahanayan> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" template sa ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
Paggamit ng pamamaraan Heather Solomon, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
Kailangan naming gawin ang mga sumusunod na pagbabago:
- Baguhin ang isang xsl template, "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 <talahanayan> mga tag.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" parameter upang LastRow ay maaaring maipasa sa aming Grid template.
Locate the template named "OuterTemplate.CallItemTemplate" kinilala sa pamamagitan ng string ng:
<xsl:template pangalan="OuterTemplate.CallItemTemplate">
Palitan ang buong template tulad ng mga sumusunod:
<xsl:template pangalan="OuterTemplate.CallItemTemplate"> <xsl:itigil pangalan="CurPosition" /> <!-- Add the "LastRow" parametro. We only use it when the item style pass in is "Grid". --> <xsl:itigil pangalan="LastRow" /> <xsl:piliin> <xsl:kapag pagsubok="@ Estilo = sa 'NewsRollUpItem'"> <xsl:Ilapat ang-template piliin="." paraan="itemstyle"> <xsl:may-param pangalan="EditMode" piliin="$cbq_iseditmode" /> </xsl:Ilapat ang-template> </xsl:kapag> <xsl:kapag pagsubok="@ Estilo = sa 'NewsBigItem'"> <xsl:Ilapat ang-template piliin="." paraan="itemstyle"> <xsl:may-param pangalan="CurPos" piliin="$CurPosition" /> </xsl:Ilapat ang-template> </xsl:kapag> <xsl:kapag pagsubok="@ Estilo = sa 'NewsCategoryItem'"> <xsl:Ilapat ang-template piliin="." paraan="itemstyle"> <xsl:may-param pangalan="CurPos" piliin="$CurPosition" /> </xsl:Ilapat ang-template> </xsl:kapag> <!-- Pass ang kasalukuyang posisyon at lastrow sa ang Grid itemstyle.xsl ng template. Gagamitin ng ItemStyle.xsl na upang humalimuyak ang bukas at pagsasara <talahanayan> mga tag. --> <xsl:kapag pagsubok="@ Estilo = 'Grid' na"> <xsl:Ilapat ang-template piliin="." paraan="itemstyle"> <xsl:may-param pangalan="CurPos" piliin="$CurPosition" /> <xsl:may-param pangalan="Huli" piliin="$LastRow" /> </xsl:Ilapat ang-template> </xsl:kapag> <xsl:kung hindi> <xsl:Ilapat ang-template piliin="." paraan="itemstyle"> </xsl:Ilapat ang-template> </xsl:kung hindi> </xsl:piliin> </xsl:template> |
Ang mga komento ay ilarawan ang layunin ng mga pagbabago.
Talaga, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<xsl:template pangalan="OuterTemplate.Body">
Mag-scroll sa pamamagitan ng mga tagubilin sa OuterTemplate.Body at ipasok ang LastRow parameter na tulad ng sumusunod (ipinapakita bilang isang puna sa italics):
<xsl:call-template pangalan="OuterTemplate.CallItemTemplate"> <xsl:may-param pangalan="CurPosition" piliin="$CurPosition" /> <!-- Ipasok ang LastRow parameter. --> <xsl:may-param pangalan="LastRow" piliin="$LastRow"/> </xsl:call-template>
Matapos ang lahat ng ito, namin sa wakas ng mga bagay-set up nang maayos sa gayon na ang aming ItemStyle.xsl maaaring magbigay <talahanayan> mga tag sa tamang lugar.
ItemStyle.Xsl
Tandaan: Muli, suriin sa ItemStyle.xsl pagkatapos ng paggawa ng anumang mga pagbabago upang makita mo ang epekto ng mga pagbabago.
Mayroon kaming dalawang mga gawain dito:
- 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. (Maaari mong sabihin na mayroon akong isang manipis na hawakan sa XSL).
Una, malapit sa tuktok ng ItemStyle.xsl, idagdag ang linyang ito:
<!-- Ang ilang mga mumbo elepante na nagbibigay-daan sa amin upang ipakita U.S. pera. --> <xsl:decimal-format pangalan="mga tauhan" tambilang="D" /> <xsl:template pangalan="Default" tumugma="*" paraan="itemstyle">
Tandaan na ang idinagdag ko ito nang direkta bago ang <xsl:template name="Default" …> depinisyon.
Susunod, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, ngunit huwag mag-atubiling mag-email sa akin o mag-iwan ng mga komento sa aking blog kung mayroon kang mga katanungan.
<xsl:template pangalan="Parilya" tumugma="Hilera[@ Estilo = 'Grid' na]" paraan="itemstyle"> <!-- ContentMain.xsl pumasa CurPos at huling. Ginagamit namin ito sa nang may pasubali humalimuyak ang bukas at pagsasara <talahanayan> mga tag. --> <xsl:itigil pangalan="CurPos" /> <xsl:itigil pangalan="Huli" /> <!-- Ang mga sumusunod na mga variable ay na unmodified mula sa standard ItemStyle.xsl --> <xsl:nagbabago pangalan="SafeImageUrl"> <xsl:call-template pangalan="OuterTemplate.GetSafeStaticUrl"> <xsl:may-param pangalan="UrlColumnName" piliin="'ImageUrl'"/> </xsl:call-template> </xsl:nagbabago> <xsl:nagbabago pangalan="SafeLinkUrl"> <xsl:call-template pangalan="OuterTemplate.GetSafeLink"> <xsl:may-param pangalan="UrlColumnName" piliin="'LinkUrl'"/> </xsl:call-template> </xsl:nagbabago> <xsl:nagbabago pangalan="DisplayTitle"> <xsl:call-template pangalan="OuterTemplate.GetTitle"> <xsl:may-param pangalan="Pamagat" piliin="@ Pamagat"/> <xsl:may-param pangalan="UrlColumnName" piliin="'LinkUrl'"/> </xsl:call-template> </xsl:nagbabago> <xsl:nagbabago pangalan="LinkTarget"> <xsl:kung pagsubok="@ OpenInNewWindow = 'tunay'" >_blank</xsl:kung> </xsl:nagbabago> <!-- Dito namin tukuyin ang isang variable, "tableStart". Ito ay naglalaman ng HTML . Tandaan na kung CurPos = 1, ito kasama ang HTML sa isang tag CDATA. Kung hindi, ito ay walang laman. Ang halaga ng tableStart ay emited bawat oras ItemStyle ay tinatawag na sa pamamagitan ng . --> <xsl:nagbabago pangalan="tableStart"> <xsl:kung pagsubok="$CurPos = 1"> <![CDATA[ <talahanayan border = 1> <tr bgcolor="blue"> <td><font color="white"><b>Project Pangalan</b></ay></td> <td align="right"><font color="white"><b>Kumpletuhin Petsa</b></ay></td> <td align="right"><font color="white"><b>Badyet</b></ay></td> <td align="right"><font color="white"><b>Aktwal na Gastos</b></ay></td> <td><font color="white"><b>Pangkalahatang Katayuan</b></ay></td> </tr> ]]> </xsl:kung> </xsl:nagbabago> <!-- Isa pang variable, tumutukoy tableEnd lamang ang pagsasara ng tag ng talahanayan. Tulad ng sa tableStart, ito ay palaging emited. Ito ay kung bakit ang ang halaga nito ay . --> <xsl:nagbabago pangalan="tableEnd"> <xsl:kung pagsubok="$CurPos = $ Huling"> <![CDATA[ </talahanayan> ]]> </xsl:kung> </xsl:nagbabago> <!-- Laging humalimuyak ang mga nilalaman ng tableStart. Kung hindi ito ang unang , pagkatapos namin alam ang halaga nito . Huwag paganahin ang output escaping dahil kapag tableStart ito ay hindi blangko, ito . Kung , it will generate stuff like "<talahanayan>" instead of "<talahanayan>". --> <xsl:halaga-ng piliin="$tableStart" huwag paganahin-output-escaping="oo"/> <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:halaga-ng piliin="@ Project_x005F_x0020_Name"/> </td> <td ihanay="karapatan"> <xsl:halaga-ng piliin="@ Project_x005F_x0020_End_x005F_x0020_Date"/> </td> <td ihanay="karapatan"> <xsl:call-template pangalan="formatCurrency"> <xsl:may-param pangalan="halaga" |
Na ito ay hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang. Salamat!
Aah… it was because I named my List Style differently and didn’t realise that in the ContentQueryMain.xsl it checks for the "style":
<xsl:when test="@Style=’NameOfMyStyle’">
Sa na pangalanan ito nagtrabaho. 🙂
Halos nagtrabaho ito para sa akin: Na aking pinamamahalaan output ang </talahanayan> tapusin tag tama, ngunit ang panimulang tag ay nawawala. It seems the test="$CurPos = 1" ay hindi nagbabalik ng tunay. Ngunit bakit?
Mahusay na Post. Paul i na tapos na ang lahat ng ang itaas na mga bagay. Mayroon akong isang query, how can I achive the sum of "TOTAL ACTUAL Expences" o kabuuan ng ang halaga ng dalawang haligi.
Mong gawin ang anumang trabaho sa paglikha ng ng ng pasadyang ContentQueryMain at ItemStyle xsl file? Ang dahilan na humingi ko na hindi ko nais na mag-alala tungkol sa aking mga pasadyang estilo pagiging mapapatungan sa anumang mga patch o upgrade. Mayroon ba kayong mga halimbawa? Sinubukan ko na ang paggawa ng isang kaparehong kopya ng ng ang ContentQueryMain.xsl at upload na bagong pasadyang kopya sa Library Estilo. Kapag paglagay ng sanggunian sa xsl ang file na ito sa MainXslLink ari-arian. Webpart ng, Nakukuha ko 401 hindi pinahintulutan. Ang pasadyang xsl file ay isang publish na bersyon at lahat ay basahin ang access dito.
hindi kapani-paniwala post salamat! Ay battling na ito ngayon para sa huling ilang mga araw.
Hi, ito ay isang talagang nakakatulong sa pag-post. Ko ang lahat ng ito gumagana, at din ipinatupad Mike Brown pagbabago kaya grupo
ang mga resulta sa loob ng talahanayan sa pamamagitan ng anumang pinili ko bilang Group sa pamamagitan ng parameter sa katangian ang CQWB.
Ginawa ko ang pamagat ng isang link din, kaya ito gumagana mabuti. Mayroon pa akong isang problema, kahit na. Ako pagpangkat ang mga resulta sa pamamagitan ng pangalan ng site. Sa loob ng talahanayan, ito group na sila mabuti, at mukhang mahusay, ngunit pa rin ito ay pag-print out ang lahat ng mga grupo
pangalan(sa aking kaso site ang mga pangalan) sa itaas ng talahanayan. Ay kahit sino malaman kung paano mapupuksa sa mga ito?
Salamat,
Greg
Nice artikulo. Ko pinamamahalaang upang bigyan ang aking mga talahanayan ang hitsura ng mga Listahan ng Sharepoint ng default sa pamamagitan ng pagsusuri ng source code ng listahan. Narito ang mga pangunahing HTML na mga bloke na kinakailangan upang magkasya sa ItemStyle:
<TABLE width="100%" class="ms-listviewtable" border=0 cellspacing=0 cellpadding=1 dir="None">
<!–Header–>
<TR class="ms-viewheadertr" VALIGN = TOP>
<TH nowrap scope="col" class="ms-vh2"><div style="width:100%;posisyon:kamag-anak;pakaliwa:0;tuktok:0;">
<TABLE style="width:100%;" CtxNum="1" height="100%" cellspacing=1 cellpadding=0 class="ms-unselectedtitle">
<TR>
<TD width="100%" Class="ms-vb" nowrap>
Pamagat teksto Dito
</TD>
<TD style="position:lubos;">
</TD>
</TR>
</Talahanayan></div>
</Ika>
<!–Ulitin para sa lahat ng mga cell header–>
</TR>
<!– Talahanayan ng data –>
<TR class="">
<!–Data haligi, gamitin ang Paul ng code para sa ang unang isa sa mga hyperlink –>
<TD Class="ms-vb2">Data dito</TD>
<!–Walang laman ang haligi–>
<TD Class="ms-vb2">
<span dir = Wala></maikling panahon><
/TD>
<!–Petsa ng haligi–>
<TD Class="ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Kahaliling hilera – Gumamit ng isang bagong variable ng XSL na ipasok ang kahaliling uri batay sa kasalukuyang hilera modulo 2–>
<TR class="ms-alternating">
…
</TR>
</Talahanayan>
Thatz tiyak ako ay naghahanap para sa ... Rock mong tao ... Long mabuhay ... Gusto mo para sa post..
<xsl:apply-templates select="." mode="itemstyle">
<xsl:with-param name="CurPos" select="$CurPosition" />
<xsl:with-param name="Last" select="$LastRow" />
<xsl:with-param name="StartNewGroup" select="@__begingroup" />
</xsl:kapag>
<xsl:when test="$StartNewGroup = ‘True’">
<tr>
<td >
<xsl:call-template name="OuterTemplate.GetGroupName">
<xsl:with-param name="GroupName" select="@*[pangalan()= $ Group]"/>
<xsl:with-param name="GroupType" select="$GroupType"/>
</xsl:call-template>
</td>
</tr>
</xsl:kapag>
<xsl:kung hindi>
</xsl:kung hindi>
</xsl:piliin>
Hi Paul,
Kapag nagtatrabaho sa xml / xsl at bahagi ng web ng query sa nilalaman, mayroon kang natagpuan ng anumang mabuting paraan upang i-format ang iyong xslt? Sinusubukang upang gumawa ng mga pagbabago at subukan ang disenyo ay proving isang karapatan masakit sa ang isang ** lamang gamit ang isang text editor…
Ang lahat ng mga pinakamahusay na
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Dapat ko bang gamitin ang Image o Picture sa Uri ng Patlang ng CommonViewFields? (e.g. InternalColumnName, Imahen)
Your post is exactly what I was looking for. Gayunman, I can’t get it to work.
I have documents that are stored in various doc. libraries but classified using a custom class column (choice: 1 o 2. I want to use CQWP to show these documents based on thier class.
I was able to add the CQWP, export it to SPD, configure the itemStyle.xls to show custom fileds in list view. gayunman, I could not successfully implement what you describe here.
These are the columns I want to show in my CQWP:
File Type (to show icon)
File Title
Date Last Modified
Modified By Who
Checked Out To
Checked In Comments
I currently have the result in a list format. How do I change it to a talble format.
Salamat.
Saji
Paumanhin para sa missspelling sa aking pangalan ay hindi sigurado kung saan ang ” ay nagmula sa.