Přehled a cíle
Out of the box, MECH’ Webová část obsah dotazu (CQWP) jeho výsledky se zobrazí ve formátu seznamu, podobné výsledky hledání. Je také možné zobrazit výsledky ve formátu mřížky (tj. Formát tabulky HTML). Formáty tabulky jsou lepší, v některých případech. Popisují, jak dosáhnout tohoto efektu v tomto článku.
Obchodní scénář
Pracoval jsem s klientem na rollout MOSS rozlehlých. Navrhli jsme jejich taxonomie, tak, že projekty jsou první třídy občanů v hierarchii a mají své vlastní stránky nejvyšší úrovně. Vedoucí projektu udržovat seznam ojedinělého projektu souhrnné informace, například titul, rozpočet, předpokládaný termín dokončení, Zbývající rozpočet a další pole typ souhrnu. Podle "singleton" Mám na mysli vlastní seznam služby SharePoint zaručeno, že obsahují pouze jednu položku. Zjednodušujícím způsobem, Vypadá to jako to:
Technický přístup je stejný jak je uvedeno Tady (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP používá transformaci XSL generuje HTML v prohlížeči vykreslit.
Vždy jsem si představit výsledek před ponořením se do XSL, protože XSL je noční můra. Tady je můj požadovaného výsledku:
Generuje HTML jako výsledku:
|
<HTML>
<tělo>
<centrum>
<Tabulka hranice= 1>
<!-- Popisky –>
<TR Barva pozadí= modrá>
<TD><písmo Barva= bílá><b>Název projektu</b></písmo></TD>
<TD zarovnání= doprava><písmo Barva= bílá><b>Datum dokončení</b></písmo></TD>
<TD zarovnání= doprava><písmo Barva= bílá><b>Rozpočet</b></písmo></TD>
<TD zarovnání= doprava><písmo Barva= bílá><b>Skutečné výdaje</b></písmo></TD>
<TD><písmo Barva= bílá><b>Celkový stav</b></písmo></TD>
</TR>
<TR>
<TD>Re-drát počítačové místnosti.</TD>
<TD zarovnání= doprava>02/01/08</TD>
<TD zarovnání= doprava>22,500.00</TD>
<TD zarovnání= doprava>19,000.00</TD>
<TD>V průběhu</TD>
</TR>
<TR>
<TD>Poskytování serverů pro SQL Upgrade</TD>
<TD zarovnání= doprava>04/01/08</TD>
<TD zarovnání= doprava>7,500.00</TD>
<TD zarovnání= doprava>0.00</TD>
<TD>Plánováno</TD>
</TR>
</Tabulka>
</centrum>
</tělo>
</HTML>
|
Přístup
Postupujte podle těchto kroků k vytvoření mřížky:
- Určit součásti mřížky (řádky nebo sloupce).
- Definovat a vytvořit nezbytné místo sloupce.
- Vytvořit dílčí weby pro projekty a ojedinělým seznamů.
- Přidejte CQWP do webové stránky a nakonfigurujete ho k prohledávání pro seznamy.
- Upravit XML CQWP sbírat další sloupce.
- Úprava XSL aby vytvářela.
Budu se soustředit na číslo šest. Čísla jedna až čtyři jsou přímočará a něco, co už udělal každý uživatel CQWP. Číslo pět je Well-documented jiní včetně tento vyčerpávající screen-shot naloženého článek z webu MSDN Tady (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) a Heather Solomon's blog Tady (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Šrouby a matice
Zahájit a provádět kroky jedna až pět dle MSDN dokumentaci a Heather Solomon článek.
V tomto okamžiku, vaše CQWP jste přidali na stránku a máte své <CommonViewFields> v případě potřeby nakonfigurovat.
Po obvyklé kroky, Tyto průběžné výsledky:
1. Vytvořit typ obsahu, šablonou vlastního seznamu pro tento typ obsahu a dva weby. Zde je typ obsahu:
Tady je struktura webu:
2. Přidat CQWP po vytvoření mého projektu podřízené weby a ojedinělého projektu Souhrnné seznamy:
3. Přidat všechny další informace, chci prostřednictvím <CommonViewFields>:
<Vlastnost Jméno="CommonViewFields" Typ="řetězec">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</Vlastnost>
Všimněte si, že jsem musel držet všechna pole vlastností na jednom řádku, nebo to nebude fungovat (CQWP by mi, že dotaz nevrátil žádné položky).
4. V tomto okamžiku, jsme připraveni posunout se dále v článku MSDN a převrátit Heather Solomon článku. Její postup začíná u kroku #5 Chcete-li vytvořit vlastní / unghosted verze ItemStyle.xsl. Sleduji Heather poradenství, až po krocích 11 a získat tyto výsledky zprostředkujících:
4.1: Jméno mé šablony XSL následovně:
<XSL:Název šablony = "Grid" zápas = "řádek[@Style = 'Grid']" Mode = "itemstyle">
Jsem jí navrhl také mírně upravit <XSL:pro každý …> přidáním <BR /> značky, které poskytují čistší výpis:
<XSL:pro každý vybrat="@*">
P:<XSL:hodnota z vybrat="Jméno()" /><BR/>
</XSL:pro každý>
4.2: Upravit webovou část, Přejděte na vzhledu a vyberte mřížku"" styl:
Změnu a zde je výsledek:
Můžeme vidět z výše uvedeného, že pole chceme (Název projektu, výdaj, stav, atd) jsou k dispozici pro nás při jsme generuje HTML. Nejen, že, Ale vidíme, že jména, kterými jsme musí odkazovat na sloupce v XSL. Například, jsme odkaz stav projektu jako "Project_x005F_x0020_Name".
V tomto okamžiku, jsme odchylují od Heather blog a ramena těchto obrů, Přidat vlastní kulička.
ContentQueryMain.xsl
POZNÁMKA:: Při provádění změn jak ContentQueryMain.xsl tak i ItemStyle.xsl, je třeba zkontrolovat, že tyto soubory zpět dříve, než uvidíte vaše změny.
Pro účely mřížky výroba, MOSS používá dva různé soubory XSL produkovat výsledky, které vidíme z CQWP. Chcete-li generovat předchozí bit výstup, Upravili jsme ItemStyle.xsl. MOSS skutečně používá jiný soubor XSL, ContentQueryMain.xsl se ve spojení s ItemStyle.xsl generování jeho HTML. Jak jeho název napovídá, ContentQueryMain.xsl je hlavní"" Šablona stylů XSL, která řídí celkový tok překladu. Iteruje přes všechny nalezené položky a předává je jeden po druhém do šablony v ItemStyle.xsl. Upravíme ItemStyle.xsl generovat open <Tabulka> značka před vysílání první řádek dat a uzavření <Tabulka> značka po výstupu v posledním řádku. K dosažení tohoto, ContentQueryMain.xsl je upraven tak, aby dva parametry předat naši "mřížky" Šablona v ItemStyle.xsl, "poslední řádek" a "aktuální řádek". ItemStyle.xsl využívá je k podmíněně vydávat potřebné.
Heather Solomon technikou, Musíme najít ContentQueryMain.xsl. Nachází se na stejném místě jako ItemStyle.xsl. Tento snímek obrazovky by měla pomoci:
Musíme provést následující změny:
- Upravit šablonu ve formátu xsl, "CallItemTemplate" ve skutečnosti to vyvolá naši mřížky šablony v ItemStyle.xsl. Mineme dva parametry šablony tabulky tak, že bude mít data, je třeba podmínečně generovat otevírání a zavírání <Tabulka> značky.
- Upravit další kousek z ContentQueryMain.xsl, která volá "CallItemTemplate" předat FIRSTROW"" parametr tak že FIRSTROW může být přeneseno na naši mřížky šablony.
Vyhledejte šablonu s názvem "OuterTemplate.CallItemTemplate" identifikované řetězce:
<XSL:Šablona Jméno="OuterTemplate.CallItemTemplate">
Nahradit celou šablonu následovně:
|
<XSL:Šablona Jméno="OuterTemplate.CallItemTemplate">
<XSL:parametr Jméno="CurPosition" />
<!--
Přidejte FIRSTROW"" parametr.
Ji používáme pouze při průchodu styl položky v "Mřížka".
-->
<XSL:parametr Jméno="FIRSTROW" />
<XSL:zvolit>
<XSL:Kdy Testovat="@Style = 'NewsRollUpItem'">
<XSL:použít šablony vybrat="." mód="ItemStyle">
<XSL:s parametr Jméno="EditMode" vybrat="$cbq_iseditmode" />
</XSL:použít šablony>
</XSL:Kdy>
<XSL:Kdy Testovat="@Style = 'NewsBigItem'">
<XSL:použít šablony vybrat="." mód="ItemStyle">
<XSL:s parametr Jméno="CurPos" vybrat="$CurPosition" />
</XSL:použít šablony>
</XSL:Kdy>
<XSL:Kdy Testovat="@Style = 'NewsCategoryItem'">
<XSL:použít šablony vybrat="." mód="ItemStyle">
<XSL:s parametr Jméno="CurPos" vybrat="$CurPosition" />
</XSL:použít šablony>
</XSL:Kdy>
<!--
Aktuální pozici a lastrow předat itemstyle.xsl šablony tabulky.
ItemStyle.xsl, použije k emitování otevřít a zavřít <Tabulka> značky.
-->
<XSL:Kdy Testovat="@Style = 'Grid'">
<XSL:použít šablony vybrat="." mód="ItemStyle">
<XSL:s parametr Jméno="CurPos" vybrat="$CurPosition" />
<XSL:s parametr Jméno="Poslední" vybrat="$FIRSTROW" />
</XSL:použít šablony>
</XSL:Kdy>
<XSL:jinak>
<XSL:použít šablony vybrat="." mód="ItemStyle">
</XSL:použít šablony>
</XSL:jinak>
</XSL:zvolit>
</XSL:Šablona>
|
Komentáře popisují účel, změn.
Samozřejmě, "OuterTemplate.CallItemTemplate" se sám nazývá z jiné šablony. Vyhledejte tuto šablonu hledání pro tento textový řetězec:
<XSL:Šablona Jméno="OuterTemplate.Body">
Procházejte instrukce v OuterTemplate.Body a vložení parametru LastRow následovně (jako komentář v kurzívě):
<XSL:volání šablona Jméno="OuterTemplate.CallItemTemplate">
<XSL:s parametr Jméno="CurPosition" vybrat="$CurPosition" />
<!-- Vložení parametru LastRow. -->
<XSL:s parametr Jméno="FIRSTROW" vybrat="$FIRSTROW"/>
</XSL:volání šablona>
Po tom všem, to, Konečně máme věci správně nastaveno tak, aby naše ItemStyle.xsl může <Tabulka> značky na správném místě.
ItemStyle.Xsl
POZNÁMKA:: Znovu, po provedení změn tak, že vidíte vliv těchto změn se změnami ItemStyle.xsl.
Tady máme dva úkoly:
- Nahradit celý mřížky šablony. Můžete kopírovat/vložit zespodu.
- Přidat nějaké mumlání mimo definici šablony, která umožňuje "formatcurrency" Šablona pro práci. (Můžete říct, že mám slabý úchyt na XSL).
První, v horní části ItemStyle.xsl, Přidejte tento řádek:
<!-- Někteří hatmatilky, který jí umožní zobrazit USA. Měna. -->
<XSL:desetinný formát Jméno="zaměstnanci" číslice="D" />
<XSL:Šablona Jméno="Výchozí" shoda="*" mód="ItemStyle">
Poznámka, že jsem přidal to přímo před <XSL:Název šablony = "výchozí" …> definice.
Další, Vraťte se do naší tabulky Šablona. Celý mřížky šablony nahraďte následující kód. Důkladně je Komentováno, Neváhejte a napište mi, nebo zanechat komentář na mém blogu, pokud máte otázky, ale.
|
<XSL:Šablona Jméno="Mřížka" shoda="Řádek[@Style = 'Grid']" mód="ItemStyle">
<!--
ContentMain.xsl prochází CurPos a poslední.
Jsme využívali podmíněně vypouštět otevřít a zavřít <Tabulka> značky.
-->
<XSL:parametr Jméno="CurPos" />
<XSL:parametr Jméno="Poslední" />
<!-- Následující proměnné nezměněné od standardních ItemStyle.xsl -->
<XSL:Proměnná Jméno="SafeImageUrl">
<XSL:volání šablona Jméno="OuterTemplate.GetSafeStaticUrl">
<XSL:s parametr Jméno="UrlColumnName" vybrat=""ImageUrl""/>
</XSL:volání šablona>
</XSL:Proměnná>
<XSL:Proměnná Jméno="SafeLinkUrl">
<XSL:volání šablona Jméno="OuterTemplate.GetSafeLink">
<XSL:s parametr Jméno="UrlColumnName" vybrat=""LinkUrl""/>
</XSL:volání šablona>
</XSL:Proměnná>
<XSL:Proměnná Jméno="DisplayTitle">
<XSL:volání šablona Jméno="OuterTemplate.GetTitle">
<XSL:s parametr Jméno="Titul" vybrat="@Title"/>
<XSL:s parametr Jméno="UrlColumnName" vybrat=""LinkUrl""/>
</XSL:volání šablona>
</XSL:Proměnná>
<XSL:Proměnná Jméno="LinkTarget">
<XSL:Pokud Testovat="@OpenInNewWindow = 'True'" >_blank</XSL:Pokud>
</XSL:Proměnná>
<!--
Tady jsme definovat proměnnou, "tableStart". Tento článek obsahuje kód HTML, který používáme k definování otevření tabulky, stejně jako popisky sloupců. Všimněte si, že pokud CurPos = 1, To zahrnuje HTML v tagu CDATA.
Jinak, to bude prázdná.
Hodnota tableStart je vyzáří, pokaždé, když ItemStyle se nazývá přes ContentQueryMain.xsl.
-->
<XSL:Proměnná Jméno="tableStart">
<XSL:Pokud Testovat="$CurPos = 1">
<![CDATA[
<ohraničení tabulky = 1>
<TR bgcolor = "blue">
<TD><Barva písma = "bílý"><b>Název projektu</b></písmo></TD>
<TD align = "vpravo"><Barva písma = "bílý"><b>Datum dokončení</b></písmo></TD>
<TD align = "vpravo"><Barva písma = "bílý"><b>Rozpočet</b></písmo></TD>
<TD align = "vpravo"><Barva písma = "bílý"><b>Skutečné výdaje</b></písmo></TD>
<TD><Barva písma = "bílý"><b>Celkový stav</b></písmo></TD>
</TR>
]]>
</XSL:Pokud>
</XSL:Proměnná>
<!--
Jiné proměnné, tableEnd jednoduše definuje uzavírací tag tabulky.
Stejne jako tableStart, je to vždycky vyzáří. Právě proto, že jeho hodnota je přiřazena podmíněně založený na zda jsme už byl přijat na poslední řádek ContentQueryMain.xsl.
-->
<XSL:Proměnná Jméno="tableEnd">
<XSL:Pokud Testovat="$CurPos = $Last">
<![CDATA[ </Tabulka> ]]>
</XSL:Pokud>
</XSL:Proměnná>
<!--
Vždy posílat obsah tableStart. Pokud to není první řádek předány nám ContentQueryMain.xsl, pak víme, že její hodnota bude prázdná.
Zakázat výstup úniku, protože když tableStart to není prázdné, To zahrnuje skutečné HTML, který chceme být vykreslen v prohlížeči. Pokud neříkáme analyzátor XSL zakázat výstup úniku, to bude vytvářet věci jako"<Tabulka>" místo toho"<Tabulka>".
-->
<XSL:hodnota z vybrat="$tableStart" zakázat výstup útěk="Ano"/>
<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:hodnota z vybrat="@Project_x005F_x0020_Name"/>
</TD>
<TD zarovnání="doprava">
<XSL:hodnota z vybrat="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TD>
<TD zarovnání="doprava">
<XSL:volání šablona Jméno="FormatCurrency">
<XSL:s parametr Jméno="hodnota" vybrat="@Project_x005F_x0020_Budget"></XSL:s parametr>
</XSL:volání šablona>
</TD>
<TD zarovnání="doprava">
<XSL:volání šablona Jméno="FormatCurrency">
<XSL:s parametr Jméno="hodnota" vybrat="@Project_x005F_x0020_Expenses"> </XSL:s parametr>
</XSL:volání šablona>
</TD>
<TD>
<XSL:hodnota z vybrat="@Project_x005F_x0020_Status"/>
</TD>
<!--
Všechny tyto je zakomentován k objasnění věci.
Avšak, přivést ji zpět a tak to do <TD> Chcete-li vidět účinek.
-->
<!--
<div id = "linkitem" třída = "položka">
<XSL:Pokud zkušební = "řetězec délky($SafeImageUrl) != 0">
<div třída = "image oblast vlevo">
<href = "{$SafeLinkUrl}" cíl = "{$LinkTarget}">
<img třída = "image pevné šířky" src = "{$SafeImageUrl}" ALT = "{@ImageUrlAltText}"/>
</a>
</div>
</XSL:Pokud>
<div třída = "link položka">
<XSL:volání šablona Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href = "{$SafeLinkUrl}" cíl = "{$LinkTarget}" title = "{@LinkToolTip}">
<XSL:hodnota-vyberte = "$DisplayTitle" />
</a>
<div třída = "popis">
<XSL:hodnota z select="@Description" />
</div>
</div>
</div>
-->
</TR>
<!--
Vypouštějí uzavírací tag tabulky. Pokud nejsme v poslední řadě,
to bude prázdná.
-->
<XSL:hodnota z vybrat="$tableEnd" zakázat výstup útěk="Ano"/>
</XSL:Šablona>
<XSL:Šablona Jméno="FormatCurrency">
<XSL:parametr Jméno="hodnota" vybrat="0" />
<XSL:hodnota z vybrat='formát čísla($hodnota, "$DDD,DDD,DDD. DD", "zaměstnanci")' />
</XSL:Šablona>
|