Genel bakış ve amaç
Kutunun dışında, YOSUN’ İçerik Sorgusu Web Bölümü (CQWP) sonuçları liste biçiminde görüntüler., Arama sonuçlarına benzer. Sonuçları kılavuz biçiminde görüntülemek mümkündür (Yani. HTML tablo biçiminde). Kılavuz biçimleri bazı durumlarda daha iyi.. Ben bu yazıda bu etkiyi elde etmek nasıl tarif.
İş senaryosu
Bir kuruluş çapında MOSS rollout bir müşteriyle çalıştım. Projeler sıradüzeni içindeki ilk sınıf vatandaş ve kullanıcıların kendi üst düzey site vardır öyle ki onların taksonomisini tasarladık. Proje yöneticileri proje özet bilgileri, aynı cinsten tek adet listesini korumak, gibi başlık, bütçe, beklenen tamamlanma tarihi, kalan bütçe ve diğer Özet türü alanları. "Singleton tarafından" Demek istediğim sadece bir öğe içermesi için garantili özel bir SharePoint listesi. Basitçe, Bu gibi görünüyor:
Teknik yaklaşım çok açıklananla aynıdır Burada (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP işlemek için tarayıcı için HTML yayılmasını sağlamak için bir XSL Dönüşümü kullanır.
Ben her zaman sonuç XSL bir kâbus çünkü XSL dalış önce öngörülüyor. İşte benim istenilen sonucu:
Bu sonucu bu HTML oluşturur:
|
<HTML>
<vücut>
<Merkezi>
<Tablo Kenarlık= 1>
<!-- Etiketleri...>
<tr bgcolormavi =>
<TD><yazı tipi RenkBeyaz =><b>Proje adı</b></yazı tipi></TD>
<TD hizalamasağ =><yazı tipi RenkBeyaz =><b>Tam bir Tarih</b></yazı tipi></TD>
<TD hizalamasağ =><yazı tipi RenkBeyaz =><b>Bütçe</b></yazı tipi></TD>
<TD hizalamasağ =><yazı tipi RenkBeyaz =><b>Gerçek gider</b></yazı tipi></TD>
<TD><yazı tipi RenkBeyaz =><b>Genel durum</b></yazı tipi></TD>
</tr>
<tr>
<TD>Bilgisayar odası yeniden tel.</TD>
<TD hizalamasağ =>02/01/08</TD>
<TD hizalamasağ =>22,500.00</TD>
<TD hizalamasağ =>19,000.00</TD>
<TD>Devam eden</TD>
</tr>
<tr>
<TD>Hüküm sunucuları SQL yükseltmek için</TD>
<TD hizalamasağ =>04/01/08</TD>
<TD hizalamasağ =>7,500.00</TD>
<TD hizalamasağ =>0.00</TD>
<TD>Planlanan</TD>
</tr>
</Tablo>
</Merkezi>
</vücut>
</HTML>
|
Yaklaşım
Kılavuz oluşturmak için aşağıdaki adımları izleyin:
- Izgara bileşenleri belirle (satır/sütun).
- Gerekli site sütunları oluşturun ve tanımlayın.
- Projeler ve aynı cinsten tek adet listeler için alt site oluşturma.
- CQWP bir web sayfasına ekleyebilir ve listeleri için arama için yapılandırın.
- Ek sütunları toplamak için CQWP'in XML değiştirme.
- Bir tablo oluşturmak için XSL değiştirme.
Altı numara üzerinde konsantre olmaya gidiyorum. Dörde numara düz ileri ve herhangi bir CQWP kullanıcı zaten yaptığı bir şey vardır. Beş numaralı başkaları bu ayrıntılı ekran-shot bin Ladin'in makale--dan MSDN de dahil olmak üzere tarafından iyi belgelenmiş oldu Burada (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ve Heather Solomon's blog Burada (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Somun ve civata
Başlar ve birden beşe MSDN belgeleri ve Heather Süleyman'ın makale başına adımları uygulamak.
Bu noktada, Senin CQWP sayfaya ekledik ve var senin <CommonViewFields> gerektiği gibi yapılandırılmış.
Her zamanki gibi adımları takip, Bu ara sonuçlar elde:
1. İçerik türü oluştur, şablonlaştırılmış özel bir liste içerik türü ve iki site için. İşte içerik türü:
İşte site yapısı:
2. Benim proje alt siteler ve aynı cinsten tek adet proje özet liste oluşturduktan sonra CQWP Ekle:
3. Via istediğim tüm ek bilgileri ekleyin <CommonViewFields>:
<özelliği adı="CommonViewFields" türü="dize">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</özelliği>
Bir satır veya tüm özellik alanları tutmak zorunda notu-cekti değil iş (CQWP sorgu öğe döndürülen söylerdin).
4. Bu noktada, MSDN makalesine taşımak hazır olduğumuzu ve flip üzerinde Heather Süleyman'ın makale. Adım başlayan onun adımları izleyin #5 özelleştirilmiş oluşturmak için / unghosted yorum-in ItemStyle.xsl. Heather'ın tavsiyelerine uymak, yukarı adım adım 11 ve bu ara sonuçlar elde:
4.1: Aşağıdaki gibi benim XSL şablon adı:
<XSL:Şablon adı "Kılavuzu =" maç "satır =[@Style = 'Tablo']" Mode = "ItemStyle">
Ayrıca biraz ona önerilen değiştirme <XSL:for-each …> ekleyerek bir <br /> temiz bir liste sağlamak için etiket:
<XSL:for-each seçin="@*">
P:<XSL:value-of seçin="adı()" /><br/>
</XSL:for-each>
4.2: Web bölümü'nü değiştirme, görünümüne gidin ve kılavuz"seçin" Stil:
Değişikliği uygulayın ve sonuç:
Biz yukarıda istediğimiz alanlar görebilirsiniz (Proje adı, gider, durumu, vb) bizim için ne zaman biz HTML yayarlar kullanmak kullanılabilir. Sadece bu değil, Ama biz hangi tarafından biz XSL bu sütunlar başvuru gerekir adlarını görmek. Örneğin, Biz proje durumu "Project_x005F_x0020_Name" referans.
Bu noktada, Heather'ın blog ve bu devlerin omuzları hareket, Kendi parçada.
ContentQueryMain.xsl
NOT: Hem ContentQueryMain.xsl hem de ItemStyle.xsl değişiklik yaparken, kontrol değişikliklerinizin etkisini görmeden önce bu dosyaları geri gerek.
Izgara yapma amaçlı, Biz bir CQWP görmek sonuçlar üretmek için iki farklı XSL dosyaları MOSS kullanır. Önceki bit çıkış oluşturmak için, ItemStyle.xsl modifiye. MOSS, aslında başka bir XSL dosyası kullanır, Kendi HTML oluşturmak için ItemStyle.xsl ile birlikte için ContentQueryMain.xsl. Adından da anlaşılacağı gibi, "Ana ContentQueryMain.xsl olduğunu" Çeviri genel akışını kontrol XSL. Bulunan öğeler arasında sırayla dolaşır ve ItemStyle.xsl içinde tek tek şablonlarına geçirir. ItemStyle.xsl açık oluşturmak için değiştirmeden <Tablo> ilk satır veri ve kapanış yayan önce etiketi <Tablo> son satırı yayan sonra etiketi. Bunu gerçekleştirmek için, Bizim "kılavuz için iki parametre iletmek için ContentQueryMain.xsl modifiye" ItemStyle.xsl şablonu, "son satırı" ve "geçerli satır". ItemStyle.xsl bunlar koşullu olarak gerekli Etiketler yayılmasını sağlamak için kullanır.
Heather Süleyman'ın tekniği kullanılarak, Biz ContentQueryMain.xsl bulun. Bu ItemStyle.xsl olarak aynı yerde bulunur. Bu ekran görüntüsü yardımcı olacaktır:
Aşağıdaki değişiklikleri yapmanız gerekir:
- Bir xsl şablonu değiştirme, "CallItemTemplate" Bu aslında bizim kılavuz şablonunda ItemStyle.xsl çağırır. Böylece koşullu olarak açılış ve kapanış oluşturmak için gerek duyduğu verileri olacaktır Biz iki parametre kılavuz şablon geçecek <Tablo> Etiketler.
- "CallItemTemplate çağırır ContentQueryMain.xsl başka bit değiştirmek" "LastRow geçmek için" Böylece o LastRow bizim kılavuz şablonunu aktarılabilir parametresi.
"OuterTemplate.CallItemTemplate adlı şablonu bulun" dizesinde tanımlanan:
<XSL:Şablon adı="OuterTemplate.CallItemTemplate">
Tüm şablon aşağıdaki gibi değiştirin:
|
<XSL:Şablon adı="OuterTemplate.CallItemTemplate">
<XSL:param adı="CurPosition" />
<!--
"LastRow Ekle" parametre.
Biz sadece öğe stili geçişte "Kılavuz" olduğunda kullanmak.
-->
<XSL:param adı="LastRow" />
<XSL:seçin>
<XSL:Ne zaman test="@Style 'NewsRollUpItem' =">
<XSL:uygulama şablonları seçin="." modu="ItemStyle">
<XSL:param ile adı="EditMode" seçin="$cbq_iseditmode" />
</XSL:uygulama şablonları>
</XSL:Ne zaman>
<XSL:Ne zaman test="@Style 'NewsBigItem' =">
<XSL:uygulama şablonları seçin="." modu="ItemStyle">
<XSL:param ile adı="CurPos" seçin="$CurPosition" />
</XSL:uygulama şablonları>
</XSL:Ne zaman>
<XSL:Ne zaman test="@Style 'NewsCategoryItem' =">
<XSL:uygulama şablonları seçin="." modu="ItemStyle">
<XSL:param ile adı="CurPos" seçin="$CurPosition" />
</XSL:uygulama şablonları>
</XSL:Ne zaman>
<!--
Geçerli konum ve lastrow kılavuz itemstyle.xsl þablona geçirmek.
ItemStyle.xsl bunu açığa çıkarmak için kullanacak ve kapanış <Tablo> Etiketler.
-->
<XSL:Ne zaman test="@Style = 'Tablo'">
<XSL:uygulama şablonları seçin="." modu="ItemStyle">
<XSL:param ile adı="CurPos" seçin="$CurPosition" />
<XSL:param ile adı="Son" seçin="$LastRow" />
</XSL:uygulama şablonları>
</XSL:Ne zaman>
<XSL:Aksi takdirde>
<XSL:uygulama şablonları seçin="." modu="ItemStyle">
</XSL:uygulama şablonları>
</XSL:Aksi takdirde>
</XSL:seçin>
</XSL:Şablon>
|
Yorum değişiklikleri amacını açıklayın..
Elbette, "OuterTemplate.CallItemTemplate" kendisi başka bir şablon adı neydi. Bu şablon için bu metin dizesi arayarak bulun:
<XSL:Şablon adı="OuterTemplate.Body">
OuterTemplate.Body bu yönergeleri kaydırmak ve LastRow parametre aşağıdaki gibi yerleştirin (yorum italik olarak gösterilen):
<XSL:Call-template adı="OuterTemplate.CallItemTemplate">
<XSL:param ile adı="CurPosition" seçin="$CurPosition" />
<!-- LastRow parametre Ekle. -->
<XSL:param ile adı="LastRow" seçin="$LastRow"/>
</XSL:Call-template>
Bütün bunlardan sonra, sonunda şeyler bizim ItemStyle.xsl yayarlar olabilir böylece düzgün kurmak var. <Tablo> Etiketler doğru yerde.
ItemStyle.Xsl
NOT: Tekrar, ItemStyle.xsl herhangi bir değişiklik yaptıktan sonra bu değişikliklerin etkisini görmek kontrol.
Burada iki görev var:
- Tüm kılavuz şablonunu değiştirmek. Sen kopya/aşağıdan hamur.
- "Formatcurrency sağlar şablon tanımının dışında bazı mırıldanmak jumbo Ekle" çalışmak için şablon. (XSL üzerinde ince bir kolu var söyleyebilirim).
İlk, ItemStyle.xsl üst kısmında, Bu satırı ekleyin:
<!-- ABD görüntülemek sağlar bazı mırıldanmak jumbo. para birimi. -->
<XSL:ondalık biçimi adı="personel" basamak="D" />
<XSL:Şablon adı="Varsayılan" maç="*" modu="ItemStyle">
Not doğrudan daha önce eklediğim <XSL:Şablon adı "varsayılan =" …> tanımı.
Sonraki, bizim kılavuz şablona geri dön. Tüm kılavuz şablonu aşağıdaki kod ile değiştirin. İyice yorumladı, Ama bana e-posta veya sorularınız varsa, blog sayfamda yorum çekinmeyin.
|
<XSL:Şablon adı="Kılavuz" maç="Satır[@Style = 'Tablo']" modu="ItemStyle">
<!--
CurPos ve son ContentMain.xsl geçer.
Bunlar koşullu olarak açığa çıkarmak için kullandığımız ve kapanış <Tablo> Etiketler.
-->
<XSL:param adı="CurPos" />
<XSL:param adı="Son" />
<!-- Aşağıdaki değişkenler standart ItemStyle.xsl değişmemiş -->
<XSL:değişken adı="SafeImageUrl">
<XSL:Call-template adı="OuterTemplate.GetSafeStaticUrl">
<XSL:param ile adı="UrlColumnName" seçin="'ImageUrl'"/>
</XSL:Call-template>
</XSL:değişken>
<XSL:değişken adı="SafeLinkUrl">
<XSL:Call-template adı="OuterTemplate.GetSafeLink">
<XSL:param ile adı="UrlColumnName" seçin="'LinkUrl'"/>
</XSL:Call-template>
</XSL:değişken>
<XSL:değişken adı="DisplayTitle">
<XSL:Call-template adı="OuterTemplate.GetTitle">
<XSL:param ile adı="Başlık" seçin="@Title"/>
<XSL:param ile adı="UrlColumnName" seçin="'LinkUrl'"/>
</XSL:Call-template>
</XSL:değişken>
<XSL:değişken adı="LinkTarget">
<XSL:Eğer test="@OpenInNewWindow 'True' =" >_blank</XSL:Eğer>
</XSL:değişken>
<!--
Buraya bir değişken tanımlamak, "tableStart". Bu açılış tablo hem de sütun etiketlerini tanımlamak için kullanın HTML içeriyor. Unutmayın CurPos = 1, bir CDATA etiketi içerisinde HTML içerir.
Aksi takdirde, boş olacaktır.
ItemStyle ContentQueryMain.xsl yolu ile adlandırılır her zaman tableStart emited değeridir.
-->
<XSL:değişken adı="tableStart">
<XSL:Eğer test="$CurPos = 1">
<![CDATA[
<tablo kenarlığı = 1>
<tr bgcolor = "blue">
<TD><yazı tipi rengi "beyaz" =><b>Proje adı</b></yazı tipi></TD>
<TD align = "sağ"><yazı tipi rengi "beyaz" =><b>Tam bir Tarih</b></yazı tipi></TD>
<TD align = "sağ"><yazı tipi rengi "beyaz" =><b>Bütçe</b></yazı tipi></TD>
<TD align = "sağ"><yazı tipi rengi "beyaz" =><b>Gerçek gider</b></yazı tipi></TD>
<TD><yazı tipi rengi "beyaz" =><b>Genel durum</b></yazı tipi></TD>
</tr>
]]>
</XSL:Eğer>
</XSL:değişken>
<!--
Başka bir değişken, tableEnd sadece kapanış tanımlar tablo etiketi.
TableStart olduğu gibi, her zaman emited olduğunu. Bu yüzden değerini koşullu olarak bağlı olup son satırı ContentQueryMain.xsl tarafından geçtik atanır.
-->
<XSL:değişken adı="tableEnd">
<XSL:Eğer test="$CurPos $Last =">
<![CDATA[ </Tablo> ]]>
</XSL:Eğer>
</XSL:değişken>
<!--
Her zaman tableStart içeriğini yayarlar. Bu bize ContentQueryMain.xsl tarafından geçirilen ilk satır değilse, o zaman biliyoruz değeri boş olacaktır.
Çünkü çıkış kaçan devre dışı bırakmak ne zaman tableStart değil boş, tarayıcı tarafından işlenip istediğiniz gerçek HTML içerir. Biz anlatmazsan, devre dışı bırakmak için XSL ayrıştırıcısı kaçan çıkış, Bu gibi şeyler oluşturur"<Tablo>" yerine "<Tablo>".
-->
<XSL:value-of seçin="$tableStart" sakatlar çıkış kaçan="Evet"/>
<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:value-of seçin="@Project_x005F_x0020_Name"/>
</TD>
<TD hizalama="sağ">
<XSL:value-of seçin="@Project_x005F_x0020_End_x005F_x0020_Date"/>
</TD>
<TD hizalama="sağ">
<XSL:Call-template adı="formatCurrency">
<XSL:param ile adı="değer" seçin="@Project_x005F_x0020_Budget"></XSL:param ile>
</XSL:Call-template>
</TD>
<TD hizalama="sağ">
<XSL:Call-template adı="formatCurrency">
<XSL:param ile adı="değer" seçin="@Project_x005F_x0020_Expenses"> </XSL:param ile>
</XSL:Call-template>
</TD>
<TD>
<XSL:value-of seçin="@Project_x005F_x0020_Status"/>
</TD>
<!--
Tüm aşağıdaki yorumladı dışarı şeyleri açıklamak için.
Ancak, geri getirmek ve malzeme o içine bir <TD> etkisini görmek için.
-->
<!--
<div kimliği "linkitem =" sınıf "öğe" =>
<XSL:Eğer test "dize uzunluğu =($SafeImageUrl) != 0">
<div class = "resim alanı sol">
<bir href = "{$SafeLinkUrl}" hedef = "{$LinkTarget}">
<img sınıf "görüntü-sabit genişlikli =" src = "{$SafeImageUrl}" alt = "{@ImageUrlAltText}"/>
</bir>
</div>
</XSL:Eğer>
<div class = "bağlantı-madde">
<XSL:Call-template Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<bir href = "{$SafeLinkUrl}" hedef = "{$LinkTarget}" Title = "{@LinkToolTip}">
<XSL:Seçme değer-in "$DisXSLyTitle" = />
</bir>
<div class = "açıklama">
<XSL:değer-in select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Kapanış yayarlar masa etiketi. Son satırda ise değil,
Bu-ecek var olmak boş.
-->
<XSL:value-of seçin="$tableEnd" sakatlar çıkış kaçan="Evet"/>
</XSL:Şablon>
<XSL:Şablon adı="formatCurrency">
<XSL:param adı="değer" seçin="0" />
<XSL:value-of seçin='Format-number($değer, "$DDD,DDD,DDD.DD", "personel")' />
</XSL:Şablon>
|