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" |
Bu inanılmaz faydalı oldu. Teşekkür ederiz!
Aah… Çünkü benim liste stili farklı adlandırılmış ve ContentQueryMain.xsl için "Stil" denetler farkında değildi yapıldı.:
<XSL:Ne zaman test="@Style='NameOfMyStyle'">
Bu yeniden işe yaradı. 🙂
Neredeyse benim için çalıştı: Çıkış yönetmek </Tablo> etiket sona doğru, Ama başlangıç etiketi eksik. Görünüşe göre test = "$CurPos = 1" gerçek döndürmüyor. Ama neden?
Büyük posta. Yukarıdaki herşeyi yaptım Paul. Bir sorgu var, nasıl-ebilmek ı başarmak "toplam fiili masraflar toplamı" ya da iki sütun değerinin toplamı.
Özel ContentQueryMain ve ItemStyle xsl dosyaları oluşturma ile herhangi bir iş yaptın mı? Sormamın nedeni, herhangi bir yama veya yükseltmeleri ile üzerine benim özel stiller hakkında endişelendirmek istemiyorum olduğunu. Örnekler var mı? Ive'güvenilir ContentQueryMain.xsl özdeş bir kopyasını yapmak ve yeni bir özel kopyasını stil kitaplığı karşıya yükleniyor.. Ne zaman bu xsl dosyasına başvuru .webpart 's MainXslLink özelliğinde koyarak, I almak 401 yetkili değil. Özel xsl dosyası yayımlanmış sürümü ve herkes okuma erişimi vardır.
Fantastic sonrası teşekkür! Şimdi bu son birkaç gün için mücadele.
Merhaba, Bu gerçekten yararlı bir gönderme yapıldı.. I-si olmak o tüm çalışma, ve böylece bu gruplar da uygulanan Mike Brown'ın Değiştir
sonuçları ne olursa olsun tarafından tablo içinde grup tarafından parametresi olarak CQWB'ın Özellikleri Seç.
Ayrıca bir bağlantı başlık yaptı., çok güzel çalışıyor. Hala bir sorunum var., Yine de. Site adına göre sonuçlar gruplandırma. Tablonun içinde, Bu onları güzel gruplar, ve harika görünüyor, Ama hala baskı dışarı tüm grubu
adları(Benim durumumda site adları) Tablonun üst kısmındaki. Şunları yapmayı bilen var mı?
Teşekkürler,
Greg
Güzel eşya. Benim tablo liste kaynak kodunu analiz ederek varsayılan Sharepoint listeleri görünümünü vermek başardı.. İşte ItemStyle içinde sığdırmak için gerekli temel HTML blokları:
<Tablo genişliği = "0" Class = "ms-listviewtable" sınır 0 cellspacing = 0 CELLPADDING = 1 dir = = "Hiçbiri">
<!–BAŞLIK–>
<TR class = "ms-viewheadertr" DHİZALAMA YUKARIDA =>
<TH kaydırma kapsamı "col =" Class = "ms-vh2"><div style = "Genişlik:100%;pozisyon:göreli;sol:0;Sayfanın Üstü:0;">
<TABLO stili "width =:100%;" CtxNum = "1" Yükseklik = "0" CellSpacing = 1 CELLPADDING = 0 class = "ms-unselectedtitle">
<TR>
<TD width = "0" Class = "ms-vb" kaydırma>
Texte du titre ICI
</TD>
<TD style = "konumu:mutlak;">
</TD>
</TR>
</TABLO></div>
</İNCİ>
<!–Tüm üstbilgi hücresi için yineleyin.–>
</TR>
<!– Tablo verileri –>
<TR class = "">
<!–Veri sütunu, bir köprü ile Paul kodu kullanın –>
<TD Class = "ms-vb2">Burada veri</TD>
<!–Boş sütun–>
<TD Class = "ms-vb2">
<dir span = hiçbiri></yayılma><
/TD>
<!–Tarih sütun–>
<TD Class = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***Diğer satır – 2 Modül etkin satırı temel alan diğer sınıf ekler yeni bir XSL değişken kullanma–>
<TR class = "ms-alternatif">
…
</TR>
</TABLO>
62Thatz tam olarak aradığım...Sen sallamak adam...Çok yaşa...Sonrası için seviyorum..
<XSL:uygulama şablonları seçin = "." Mode = "ItemStyle">
<XSL:param ile adı "CurPos =" seçin "$CurPosition =" />
<XSL:param ile adı "son =" seçin "$LastRow =" />
<XSL:param ile adı "StartNewGroup =" Select="@__begingroup" />
</XSL:Ne zaman>
<XSL:Ne zaman test = "$StartNewGroup 'True' =">
<tr>
<TD >
<XSL:Call-template name="OuterTemplate.GetGroupName">
<XSL:param ile adı "GrupAdı =" Select="@*[adı()$Group =]"/>
<XSL:param ile adı "GroupType =" seçmek "$GroupType" = />
</XSL:Call-template>
</TD>
</tr>
</XSL:Ne zaman>
<XSL:Aksi takdirde>
</XSL:Aksi takdirde>
</XSL:seçin>
Merhaba Paul,
Xml ve xsl ve içerik sorgusu web bölümü ile çalışırken, Senin xslt biçimlendirmek için herhangi bir iyi yolu buldun mu? Değişiklik yapmak ve tasarım test etmeye doğru ağrı kanıtlayan bir ** sadece bir metin editörü kullanarak…
Tüm iyi
(e.g. https://myweb.com/Marketing/images/icn-order.gif, )
Resim veya görüntü CommonViewFields alan türünü kullanmalıyım? (e.g. InternalColumnName, Görüntü)
Senin tam olarak ne ı was seyir için bir mesajdır. Ancak, I cant almak o iş için.
I-si olmak içinde çeşitli doc depolanan belgeleri. Ama gizli bir özel sınıf sütun kullanarak kütüphaneleri (seçim: 1 veya 2. CQWP kendi sınıfını esas bu belgeleri göstermek için kullanmak istediğiniz.
CQWP eklemek başardı, SPD'ye verme, özel alanları liste görünümünde göstermek için itemStyle.xls yapılandırma. Ancak, Ben başarılı bir şekilde ne burada tarif uygulamak olabilir değil.
Bunlar benim CQWP göstermek istediğiniz sütunlar.:
Dosya türü (simgesini göstermek için)
Dosya başlığı
Son değiştirilme tarihi
Kim tarafından modifiye
Kullanıma
Yorum kontrol
Ben şu anda var sonuç-e doğru liste biçiminde. Talble biçimine nasıl değiştirebilirim.
Teşekkürler.
Yılmaz
Maalesef emin değilim benim adını missspelling için nereye ” geldi.