Gambaran dan Objektif
Keluar dari kotak, MOSS’ Kandungan Pertanyaan Web Bahagian (CQWP) memaparkan keputusan dalam format senarai, serupa dengan hasil carian. Hal ini juga mungkin untuk memaparkan hasil dalam grid format (Dgn kata lain. Format jadual HTML). Format grid adalah lebih baik dalam keadaan sesetengah. Saya menerangkan bagaimana untuk mencapai kesan yang dalam artikel ini.
Senario Perniagaan
Saya telah bekerja dengan klien mengenai pelaksanaan MOSS menyeluruh untuk. Kami telah direka taksonomi mereka supaya projek-projek adalah warga negara kelas pertama dalam hierarki dalam dan mempunyai tapak aras tertinggi mereka sendiri. Pengurus Projek mengekalkan senarai singleton maklumat ringkasan projek, seperti tajuk, bajet, Tarikh dijangka siap, Baki belanjawan dan lain-lain bidang ringkasan jenis. Oleh "singleton" Senarai SharePoint tersuai dijamin mengandungi hanya satu perkara yang saya maksudkan. Dengan mudah, ia kelihatan seperti ini:
Pendekatan teknikal adalah lebih kurang sama seperti yang dinyatakan di sini (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP yang menggunakan untuk mengubah XSL untuk mengeluarkan HTML untuk pelayar untuk memberi.
Saya sentiasa membayangkan hasil sebelum menganalisa XSL tersebut kerana XSL mimpi ngeri. Berikut adalah keputusan yang diingini saya:
HTML seperti ini menjana hasil yang:
|
<html>
<badan>
<pusat>
<jadual sempadan= 1>
<!-- Label ->
<tr bgcolor= Biru>
<td><font warna= Putih><b>Nama Projek</b></font></td>
<td menyelaraskan= Betul><font warna= Putih><b>Tarikh melengkapkan</b></font></td>
<td menyelaraskan= Betul><font warna= Putih><b>Bajet</b></font></td>
<td menyelaraskan= Betul><font warna= Putih><b>Perbelanjaan sebenar</b></font></td>
<td><font warna= Putih><b>Keseluruhan Status</b></font></td>
</tr>
<tr>
<td>Re-wayar bilik komputer.</td>
<td menyelaraskan= Betul>02/01/08</td>
<td menyelaraskan= Betul>22,500.00</td>
<td menyelaraskan= Betul>19,000.00</td>
<td>Dalam Kemajuan</td>
</tr>
<tr>
<td>Pelayan SQL Peruntukan Naik Taraf</td>
<td menyelaraskan= Betul>04/01/08</td>
<td menyelaraskan= Betul>7,500.00</td>
<td menyelaraskan= Betul>0.00</td>
<td>Dirancang</td>
</tr>
</jadual>
</pusat>
</badan>
</html>
|
Pendekatan
Ikuti langkah-langkah untuk mewujudkan grid:
- Mengenalpasti komponen grid (baris / lajur).
- Menentukan dan mewujudkan ruangan tapak perlu.
- Mencipta laman sub bagi projek-projek dan senarai tunggal.
- Tambah CQWP untuk laman web dan mengkonfigurasi ia untuk mencari senarai anda.
- Ubahsuai XML CQWP untuk mengumpulkan ruangan tambahan.
- Ubah suai XSL untuk menjana jadual.
Saya akan menumpukan perhatian kepada nombor enam. Nombor satu melalui empat adalah lurus ke hadapan dan sesuatu yang telah melakukan mana-mana pengguna CQWP. Nombor lima telah didokumenkan oleh orang lain termasuk menyeluruh tembakan skrin penuh sarat artikel ini daripada MSDN di sini (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) dan blog Heather Sulaiman di sini (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
Kacang Dan Bolt
Mulakan dan melaksanakan langkah-langkah yang salah melalui lima sebagai satu dokumentasi MSDN dan artikel Heather Sulaiman.
Pada ketika ini, anda telah menambah CQWP anda ke laman dan anda mempunyai anda <CommonViewFields> dikonfigurasi sebagai perlu.
Berikutan langkah-langkah yang biasa, Saya mendapat keputusan ini perantaraan:
1. Membuat jenis kandungan, templatized senarai tersuai untuk jenis kandungan itu dan dua tapak. Inilah jenis kandungan:
Berikut adalah struktur tapak:
2. Tambah CQWP selepas mewujudkan subsites projek saya dan tunggal senarai ringkasan projek:
3. Tambah semua maklumat tambahan yang saya mahu melalui <CommonViewFields>:
<harta Nama="CommonViewFields" Jenis="rentetan">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</harta>
Perhatikan bahawa saya terpaksa terus semua bidang hartanah dalam satu baris atau ia tidak akan bekerja (CQWP akan memberitahu saya bahawa pertanyaan itu kembali ada perkara).
4. Pada ketika ini, Kami sudah bersedia untuk bergerak melampaui artikel MSDN dan flip di atas untuk artikel Heather Solomon. Ikuti langkah-langkah beliau yang bermula berhampiran langkah #5 untuk mewujudkan disesuaikan / versi unghosted ItemStyle.xsl. Saya ikut nasihat Heather's, up melalui langkah 11 dan mendapatkan keputusan ini perantaraan:
4.1: Nama template XSL saya seperti berikut:
<Pemacu:nama templat = "Grid" sepadan dengan = "berturut-turut[@Style = 'Grid']" mod = "itemstyle">
Saya juga sedikit mengubah beliau mencadangkan <Pemacu:untuk setiap …> dengan menambah <br /> tag untuk menyediakan senarai yang lebih bersih:
<Pemacu:untuk setiap pilih="@ *">
P:<Pemacu:nilai-of pilih="Nama()" /><br/>
</Pemacu:untuk setiap>
4.2: Saya mengubah suai sebahagian web, pergi ke penampilan dan pilih saya "Grid" gaya:
Melaksanakan perubahan dan di sini adalah hasil:
Kita boleh lihat dari atas bahawa bidang yang kita mahu (Nama projek, perbelanjaan, status, dan sebagainya.) disediakan untuk kita gunakan apabila kita mengeluarkan HTML. Bukan itu sahaja, tetapi kita melihat nama-nama yang kami perlu rujukan kolum tersebut dalam XSL dalam. Sebagai contoh, kami rujukan Status projek sebagai "Project_x005F_x0020_Name".
Pada ketika ini, kami bertolak dari blog Heather dan dari bahu gergasi ini, Saya menambah sedikit saya sendiri sedikit.
ContentQueryMain.xsl
NOTA: Apabila membuat perubahan kepada kedua-dua ContentQueryMain.xsl serta ItemStyle.xsl, anda perlu menyemak fail-fail kembali sebelum anda melihat kesan perubahan.
Bagi tujuan membuat grid, MOSS menggunakan dua fail XSL yang berbeza untuk menghasilkan keputusan yang kita lihat dari CQWP yang. Untuk menjana bit sebelumnya output, kami kali ItemStyle.xsl. MOSS sebenarnya menggunakan fail XSL yang lain, ContentQueryMain.xsl untuk bersama-sama dengan ItemStyle.xsl untuk menghasilkan HTML yang. Seperti namanya, ContentQueryMain.xsl adalah "utama" XSL yang mengawal aliran keseluruhan penterjemahan. Ia iterates melalui semua barang-barang yang dijumpai dan Pas mereka satu per satu untuk template di ItemStyle.xsl. Kami akan ubah suai ItemStyle.xsl untuk menjana terbuka <jadual> tag sebelum mengeluarkan baris pertama data dan penutup <jadual> Tag selepas mengeluarkan baris terakhir. Untuk mencapai matlamat ini, ContentQueryMain.xsl kali meluluskan dua parameter untuk kami "grid" template dalam ItemStyle.xsl, "baris terakhir" dan "semasa baris". ItemStyle.xsl menggunakan ini untuk mengeluarkan tag perlu bersyarat.
Menggunakan teknik Heather Sulaiman, kita mencari ContentQueryMain.xsl. Ia terletak di tempat yang sama sebagai ItemStyle.xsl. Pukulan skrin ini akan membantu:
Kita perlu membuat perubahan berikut:
- Ubahsuai template XSL, "CallItemTemplate" yang benar-benar menggunakan template Grid kami di ItemStyle.xsl. Kita akan melewati dua parameter untuk Grid template supaya ia akan mempunyai data yang diperlukan untuk menjana dengan membuka dan menutup <jadual> tags.
- Ubah suai sedikit lain ContentQueryMain.xsl yang menyeru "CallItemTemplate" meluluskan "LastRow" parameter supaya LastRow boleh disampaikan kepada template Grid kami.
Mencari template yang dinamakan "OuterTemplate.CallItemTemplate" dikenal pasti oleh tali:
<Pemacu:template Nama="OuterTemplate.CallItemTemplate">
Menggantikan template keseluruhan seperti berikut:
|
<Pemacu:template Nama="OuterTemplate.CallItemTemplate">
<Pemacu:param Nama="CurPosition" />
<!--
Tambah "LastRow" parameter.
Kami hanya menggunakannya apabila item gaya Pas dalam "Grid".
-->
<Pemacu:param Nama="LastRow" />
<Pemacu:memilih>
<Pemacu:apabila ujian="@ Gaya = 'NewsRollUpItem'">
<Pemacu:terpakai-template pilih="." mod="itemstyle">
<Pemacu:dengan-param Nama="EditMode" pilih="$cbq_iseditmode" />
</Pemacu:terpakai-template>
</Pemacu:apabila>
<Pemacu:apabila ujian="@ Gaya = 'NewsBigItem'">
<Pemacu:terpakai-template pilih="." mod="itemstyle">
<Pemacu:dengan-param Nama="CurPos" pilih="$CurPosition" />
</Pemacu:terpakai-template>
</Pemacu:apabila>
<Pemacu:apabila ujian="@ Gaya = 'NewsCategoryItem'">
<Pemacu:terpakai-template pilih="." mod="itemstyle">
<Pemacu:dengan-param Nama="CurPos" pilih="$CurPosition" />
</Pemacu:terpakai-template>
</Pemacu:apabila>
<!--
Pas kedudukan semasa dan lastrow kepada template itemstyle.xsl Grid.
ItemStyle.xsl akan menggunakannya untuk mengeluarkan terbuka dan tutup <jadual> tags.
-->
<Pemacu:apabila ujian="@ Gaya = 'Grid'">
<Pemacu:terpakai-template pilih="." mod="itemstyle">
<Pemacu:dengan-param Nama="CurPos" pilih="$CurPosition" />
<Pemacu:dengan-param Nama="Last" pilih="$LastRow" />
</Pemacu:terpakai-template>
</Pemacu:apabila>
<Pemacu:sebaliknya>
<Pemacu:terpakai-template pilih="." mod="itemstyle">
</Pemacu:terpakai-template>
</Pemacu:sebaliknya>
</Pemacu:memilih>
</Pemacu:template>
|
Komen-komen yang menerangkan maksud perubahan.
Kursus, "OuterTemplate.CallItemTemplate" dirinya dipanggil dari template lain. Mencari templat tersebut dengan mencari rentetan teks ini:
<Pemacu:template Nama="OuterTemplate.Body">
Tatal melalui manual OuterTemplate.Body dan masukkan parameter LastRow seperti berikut (ditunjukkan sebagai komen dalam italik):
<Pemacu:panggilan template Nama="OuterTemplate.CallItemTemplate">
<Pemacu:dengan-param Nama="CurPosition" pilih="$CurPosition" />
<!-- Memasukkan parameter LastRow yang. -->
<Pemacu:dengan-param Nama="LastRow" pilih="$LastRow"/>
</Pemacu:panggilan template>
Selepas semua ini, kami akhirnya telah perkara ditubuhkan dengan betul supaya ItemStyle.xsl kita boleh mengeluarkan <jadual> tags di tempat yang betul.
ItemStyle.Xsl
NOTA: Lagi, mendaftar masuk ItemStyle.xsl selepas membuat apa-apa perubahan supaya anda melihat kesan perubahan-perubahan.
Kami mempunyai dua tugas di sini:
- Menggantikan seluruh template Grid. Anda boleh copy/paste dari bawah.
- Tambah beberapa mumbo jumbo di luar definisi template yang membolehkan "formatcurrency" template untuk bekerja. (Anda boleh memberitahu bahawa saya mempunyai mengendalikan lemah pada Pemacu).
Pertama, berhampiran bahagian atas ItemStyle.xsl, tambah baris ini:
<!-- Beberapa jumbo kosong yang membolehkan kita untuk memaparkan U.S. mata wang. -->
<Pemacu:perpuluhan-format Nama="kakitangan" digit="D" />
<Pemacu:template Nama="Default" perlawanan="*" mod="itemstyle">
Perhatikan bahawa saya berkata ia secara langsung sebelum <Pemacu:nama templat = "lalai" …> definisi.
Seterusnya, kembali ke template Grid kami. Menggantikan seluruh template Grid dengan kod di bawah. Ia adalah benar-benar mengulas, tetapi tidak teragak-agak untuk e-mel saya atau meninggalkan komen di blog saya jika anda mempunyai soalan.
|
<Pemacu:template Nama="Grid" perlawanan="Berturut-turut[@ Gaya = 'Grid']" mod="itemstyle">
<!--
ContentMain.xsl pas CurPos dan terakhir.
Kami menggunakan ini untuk mengeluarkan bersyarat terbuka dan tutup <jadual> tags.
-->
<Pemacu:param Nama="CurPos" />
<Pemacu:param Nama="Last" />
<!-- Pembolehubah berikut diubahsuai dari ItemStyle.xsl standard -->
<Pemacu:berubah-ubah Nama="SafeImageUrl">
<Pemacu:panggilan template Nama="OuterTemplate.GetSafeStaticUrl">
<Pemacu:dengan-param Nama="UrlColumnName" pilih="'ImageUrl'"/>
</Pemacu:panggilan template>
</Pemacu:berubah-ubah>
<Pemacu:berubah-ubah Nama="SafeLinkUrl">
<Pemacu:panggilan template Nama="OuterTemplate.GetSafeLink">
<Pemacu:dengan-param Nama="UrlColumnName" pilih="'LinkUrl'"/>
</Pemacu:panggilan template>
</Pemacu:berubah-ubah>
<Pemacu:berubah-ubah Nama="Displaytitle">
<Pemacu:panggilan template Nama="OuterTemplate.GetTitle">
<Pemacu:dengan-param Nama="Title" pilih="@ Title"/>
<Pemacu:dengan-param Nama="UrlColumnName" pilih="'LinkUrl'"/>
</Pemacu:panggilan template>
</Pemacu:berubah-ubah>
<Pemacu:berubah-ubah Nama="LinkTarget">
<Pemacu:jika ujian="@ OpenInNewWindow = 'Sebenar'" >_blank</Pemacu:jika>
</Pemacu:berubah-ubah>
<!--
Di sini kita menentukan ubah, "tableStart". Ini mengandungi HTML
. Perhatikan bahawa jika CurPos = 1, ia termasuk HTML dalam tag CDATA.
Jika tidak, ia akan menjadi kosong.
Nilai tableStart adalah emited setiap ItemStyle masa dipanggil melalui
.
-->
<Pemacu:berubah-ubah Nama="tableStart">
<Pemacu:jika ujian="$CurPos = 1">
<![CDATA[
<sempadan meja = 1>
<TR bgcolor = "biru">
<td><warna font = "putih"><b>Nama Projek</b></font></td>
<TD menyelaraskan = "kanan"><warna font = "putih"><b>Tarikh melengkapkan</b></font></td>
<TD menyelaraskan = "kanan"><warna font = "putih"><b>Bajet</b></font></td>
<TD menyelaraskan = "kanan"><warna font = "putih"><b>Perbelanjaan sebenar</b></font></td>
<td><warna font = "putih"><b>Keseluruhan Status</b></font></td>
</tr>
]]>
</Pemacu:jika>
</Pemacu:berubah-ubah>
<!--
Berubah lagi, tableEnd hanya mentakrifkan tag jadual penutupan.
Seperti tableStart, ia sentiasa emited. Inilah sebabnya mengapa nilainya
.
-->
<Pemacu:berubah-ubah Nama="tableEnd">
<Pemacu:jika ujian="$CurPos = $ Last">
<![CDATA[ </jadual> ]]>
</Pemacu:jika>
</Pemacu:berubah-ubah>
<!--
Sentiasa mengeluarkan kandungan tableStart. Jika ini bukan yang pertama
, maka kita tahu nilai
.
Melumpuhkan output melarikan diri kerana apabila tableStart ia tidak kosong, ia
. Jika
, ini akan menghasilkan barangan seperti"<jadual>" bukannya daripada"<jadual>".
-->
<Pemacu:nilai-of pilih="$tableStart" melumpuhkan-output-melarikan diri="ya"/>
<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>
<Pemacu:nilai-of pilih="@ Project_x005F_x0020_Name"/>
</td>
<td menyelaraskan="betul">
<Pemacu:nilai-of pilih="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td menyelaraskan="betul">
<Pemacu:panggilan template Nama="formatcurrency">
<Pemacu:dengan-param Nama="nilai" pilih="@ Project_x005F_x0020_Budget"></Pemacu:dengan-param>
</Pemacu:panggilan template>
</td>
<td menyelaraskan="betul">
<Pemacu:panggilan template Nama="formatcurrency">
<Pemacu:dengan-param Nama="nilai" pilih="@ Project_x005F_x0020_Expenses"> </Pemacu:dengan-param>
</Pemacu:panggilan template>
</td>
<td>
<Pemacu:nilai-of pilih="@ Project_x005F_x0020_Status"/>
</td>
<!--
Semua yang berikut adalah komen keluar untuk menjelaskan perkara-perkara.
Walau bagaimanapun, membawa kembali dan barang-barang ke dalam <td> untuk melihat yang
.
-->
<!--
<DIV id = "linkitem" Class = "perkara">
<Pemacu:Jika ujian = "tali panjang($SafeImageUrl) != 0">
<DIV class = "imej kawasan-kiri">
<a href = "{$SafeLinkUrl}" target = "{$LinkTarget}">
<IMG class = "imej-fixed-width" SRC = "{$SafeImageUrl}" Alt = "{@ ImageUrlAltText}"/>
</1>
</div>
</Pemacu:jika>
<DIV class = "pautan-barang">
<Pemacu:panggilan template Name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href = "{$SafeLinkUrl}" target = "{$LinkTarget}" Tajuk = "{@ LinkToolTip}">
<Pemacu:nilai daripada pilih = "$DisplayTitle" />
</1>
<DIV class = "Perihalan">
<Pemacu:nilai bagi select="@Description" />
</div>
</div>
</div>
-->
</tr>
<!--
Mengeluarkan tag jadual penutupan. Jika kita tidak berada di barisan lepas,
ini akan menjadi kosong.
-->
<Pemacu:nilai-of pilih="$tableEnd" melumpuhkan-output-melarikan diri="ya"/>
</Pemacu:template>
<Pemacu:template Nama="formatcurrency">
<Pemacu:param Nama="nilai" pilih="0" />
<Pemacu:nilai-of pilih='format-nombor($nilai, "$DDD,Ddd,DDD. DD", "kakitangan")' />
</Pemacu:template>
|