מבט כולל על וחשיבה אובייקטיבית
מחוץ לקופסה, מוס’ Web Part של שאילתת תוכן (CQWP) מציג את התוצאות שלה בתבנית רשימה, דומה על תוצאות חיפוש. זה גם אפשרי להציג את התוצאות בתבנית רשת (כלומר. טבלת html). תבניות רשת טובים יותר בנסיבות מסוימות. אתאר כיצד להגיע לתוצאה זו במאמר זה.
תרחישים עסקיים
עבדתי עם לקוח על ההשקה מוס הארגון. עיצבנו את הטקסונומיה שלהם כך פרויקטים אזרחים מהשורה הראשונה בהירארכיה, יש האתר ברמה העליונה שלהם. מנהלי פרוייקטים לשמור על רשימה סינגלטון של מידע סיכום הפרויקט, כגון כותרת, תקציב, תאריך הסיום הצפוי, עלות תקציב ושדות אחרים סוג הסיכום. על ידי "סינגלטון" כלומר רשימת SharePoint מותאמות אישית מובטחת להכיל פריט אחד בלבד. בצורה פשטנית, זה נראה כך:
הגישה הטכנית דומים במידה רבה כפי שמתואר כאן (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP משתמשת שינוי XSL לפלוט HTML עבור הדפדפן לעיבוד.
אני תמיד לדמיין את התוצאה לפני הצלילה ה-XSL כי XSL היא סיוט. . הנה את התוצאה הרצויה:
HTML כמו זה יוצר תוצאה זו:
|
<html>
<הגוף>
<מרכז>
<טבלה גבול= 1>
<!-- תוויות –>
<. tr צבע רקע= כחול>
<td><גופן צבע= לבן><b>שם פרוייקט</b></גופן></td>
<td יישור= מימין><גופן צבע= לבן><b>לתאריך הושלמה</b></גופן></td>
<td יישור= מימין><גופן צבע= לבן><b>תקציב</b></גופן></td>
<td יישור= מימין><גופן צבע= לבן><b>הוצאות בפועל</b></גופן></td>
<td><גופן צבע= לבן><b>המצב הכללי</b></גופן></td>
</. tr>
<. tr>
<td>Re-wire חדר מחשבים.</td>
<td יישור= מימין>02/01/08</td>
<td יישור= מימין>22,500.00</td>
<td יישור= מימין>19,000.00</td>
<td>בביצוע</td>
</. tr>
<. tr>
<td>אספקת שרתים עבור שדרוג SQL</td>
<td יישור= מימין>04/01/08</td>
<td יישור= מימין>7,500.00</td>
<td יישור= מימין>0.00</td>
<td>מתוכנן</td>
</. tr>
</טבלה>
</מרכז>
</הגוף>
</html>
|
גישה
בצע את השלבים הבאים כדי ליצור את הרשת:
- לזהות את הרכיבים של רשת (שורות/עמודות).
- להגדיר וליצור עמודות אתר הדרושים.
- יצירת אתרי משנה עבור פרוייקטים ורשימות סינגלטון.
- הוסף את CQWP לדף אינטרנט והגדר אותו לחיפוש אחר הרשימות שלך.
- שנה של CQWP XML כדי לאסוף את עמודות נוספות.
- שנה את ה-XSL ליצירת טבלה.
. אני הולך להתרכז במספר שש. מספרי אחד עד ארבע הם ישר קדימה ומשהו כל משתמש CQWP כבר עשה. מספר חמש היה מתועדת היטב על-ידי אחרים כולל מאמר ממצה של לאדן צילום מסך מתוך MSDN כאן (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ובלוגים הת'ר שלמה כאן (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
עלון
להתחיל וליישם את שלבים אחת עד חמש לפי התיעוד MSDN ו מאמר הת'ר שלמה.
בנקודה זו, שהוספת לדף CQWP שלך ויש לך שלך <CommonViewFields> נקבעה לפי הצורך.
ביצוע השלבים הרגילים, ניתן לקבל תוצאות ביניים אלה:
1. יצירת סוג תוכן, רשימה מותאמת אישית templatized עבור סוג תוכן זה, שני אתרים. . הנה סוג התוכן:
הנה מבנה האתר:
2. הוסף את CQWP לאחר יצירת אתרי משנה של הפרוייקט ואת סינגלטון שלי רשימות סיכום של פרוייקטים:
3. להוסיף כל מידע נוסף אני רוצה דרך <CommonViewFields>:
<מאפיין שם="CommonViewFields" סוג="מחרוזת">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</מאפיין>
שים לב כי הייתי חייב לשמור על שדות המאפיינים שורה זו או שהיא לא תתאים (CQWP יספר לי כי השאילתה החזירה פריטים).
4. בנקודה זו, . אנחנו מוכנים לזוז מעבר במאמר MSDN ו על היפוך למאמר של הת'ר שלמה. בצע את השלבים שלה מתחיל ליד שלב #5 כדי ליצור מותאם אישית / גרסה unghosted של ItemStyle.xsl. עצתו של הת'ר, דרך שלב 11 ולקבל תוצאות ביניים אלה:
4.1: שם אזור תבנית XSL כדלקמן:
<xsl:שם התבנית = "ברשת" להתאים = "שורה[@Style = 'רשת']" מצב = "itemstyle">
ניתן לשנות אותה הציע גם מעט <xsl:עבור-כל …> על-ידי הוספה <br /> תג כדי לספק רישום כלי הניקוי:
<xsl:עבור-כל בחר="@*">
P:<xsl:הערך בחר="שם()" /><br/>
</xsl:עבור-כל>
4.2: ניתן לשנות את ה-web part, עבור אל המראה ובחר שלי ברשת"" סגנון:
להחיל את השינוי, הרי התוצאה:
נוכל לראות לעיל כי השדות אנחנו רוצים (שם פרוייקט, הוצאות, מצב, ועוד) זמינים עבורנו לשימוש כאשר אנחנו פולטים את ה-HTML. לא רק זה, אבל אנחנו רואים את השמות שבו. אנחנו ועליו להפנות את העמודים ב- ה-XSL. לדוגמה, אנו מפנים מצב הפרוייקט כ- "Project_x005F_x0020_Name".
בנקודה זו, אנו יוצאים מתוך הבלוג של הת'ר ומתוך כתפי ענקים אלה, ניתן להוסיף מעט משלי.
ContentQueryMain.xsl
הערה: בעת ביצוע שינויים שני ContentQueryMain.xsl וגם ItemStyle.xsl, עליך להכניס שחזרה קבצים אלה לפני לראות את השפעת השינויים שלך.
למטרות יצירת רשת, מוס משתמש שני קבצי XSL שונים כדי להפיק את התוצאות שאנחנו רואים מן CQWP. כדי ליצור את החלק הקודם של פלט, שינינו ItemStyle.xsl. מוס שבאמת משתמשת בקובץ XSL אחר, ContentQueryMain.xsl ל בשיתוף עם ItemStyle.xsl כדי ליצור את ה-HTML שלו. כפי ששמו מעיד עליו, ContentQueryMain.xsl הוא הראשי"" XSL השולט הזרם הכללי של תרגום. זה סובבת בין כל הפריטים שנמצאו ומעביר אותם אחד אחד כדי תבניות ב- ItemStyle.xsl. אנחנו לשנות ItemStyle.xsl כדי ליצור פתח <טבלה> תג לפני פליטת בשורה הראשונה של הנתונים וסגירת <טבלה> תג לאחר פליטת השורה האחרונה. כדי להשיג את זה, ContentQueryMain.xsl משתנה להעביר פרמטרים שני לרשת שלנו"" תבנית ב- ItemStyle.xsl, "השורה האחרונה" "השורה הנוכחית". ItemStyle.xsl משתמש בהם באופן מותנה לפלוט את התגים הדרושים.
בטכניקה הת'ר שלמה, אנחנו אתר ContentQueryMain.xsl. הוא ממוקם באותו מקום כמו ItemStyle.xsl. צילום מסך זה אמור לעזור:
אנחנו צריכים לבצע את השינויים הבאים:
- שינוי תבנית xsl, "CallItemTemplate" זה למעשה מפעיל תבנית הרשת שלנו ב- ItemStyle.xsl. . אנחנו נחלוף שני פרמטרים על תבנית רשת כך יהיו לו את הנתונים שצריך להתאוששות פתיחה וסגירה <טבלה> תגים.
- לשנות מעט אחר ContentQueryMain.xsl הקורא "CallItemTemplate" כדי להעביר אותה "LastRow" פרמטר כך LastRow כי ייתכן שניתן לגרום לדעיכתם לתבנית הרשת שלנו.
אתר את התבנית בשם "OuterTemplate.CallItemTemplate" מזוהה על-ידי המחרוזת:
<xsl:תבנית שם="OuterTemplate.CallItemTemplate">
החלף את התבנית כולה כדלקמן:
|
<xsl:תבנית שם="OuterTemplate.CallItemTemplate">
<xsl:param שם="CurPosition" />
<!--
הוספת "LastRow" הפרמטר.
נוכל להשתמש בו רק כאשר המעבר סגנון פריט "רשת".
-->
<xsl:param שם="LastRow" />
<xsl:בחר>
<xsl:כאשר מבחן="@ סגנון = 'NewsRollUpItem'">
<xsl:החלת תבניות בחר="." מצב="itemstyle">
<xsl:עם param שם="EditMode" בחר="$cbq_iseditmode" />
</xsl:החלת תבניות>
</xsl:כאשר>
<xsl:כאשר מבחן="@ סגנון = 'NewsBigItem'">
<xsl:החלת תבניות בחר="." מצב="itemstyle">
<xsl:עם param שם="CurPos" בחר="$CurPosition" />
</xsl:החלת תבניות>
</xsl:כאשר>
<xsl:כאשר מבחן="@ סגנון = 'NewsCategoryItem'">
<xsl:החלת תבניות בחר="." מצב="itemstyle">
<xsl:עם param שם="CurPos" בחר="$CurPosition" />
</xsl:החלת תבניות>
</xsl:כאשר>
<!--
המיקום הנוכחי של מעבר, lastrow לתבנית itemstyle.xsl ברשת.
ItemStyle.xsl ישתמש בו לפלוט פתיחה וסגירה <טבלה> תגים.
-->
<xsl:כאשר מבחן="@ סגנון = 'רשת'">
<xsl:החלת תבניות בחר="." מצב="itemstyle">
<xsl:עם param שם="CurPos" בחר="$CurPosition" />
<xsl:עם param שם="האחרון" בחר="$LastRow" />
</xsl:החלת תבניות>
</xsl:כאשר>
<xsl:אחרת>
<xsl:החלת תבניות בחר="." מצב="itemstyle">
</xsl:החלת תבניות>
</xsl:אחרת>
</xsl:בחר>
</xsl:תבנית>
|
ההערות מתארות את המטרה של השינויים.
בטח, "OuterTemplate.CallItemTemplate" עצמה נקראת תבנית אחרת. אתר את התבנית על-ידי חיפוש מחרוזת טקסט זו:
<xsl:תבנית שם="OuterTemplate.Body">
לגלול ההוראות OuterTemplate.Body וכדי להוסיף את הפרמטר LastRow כדלקמן (מוצג כתהליך של תגובה בכתב נטוי):
<xsl:תבנית קריאה שם="OuterTemplate.CallItemTemplate">
<xsl:עם param שם="CurPosition" בחר="$CurPosition" />
<!-- הוסף את הפרמטר LastRow. -->
<xsl:עם param שם="LastRow" בחר="$LastRow"/>
</xsl:תבנית קריאה>
אחרי כל זה, סוף סוף יש לנו דברים מוגדר כהלכה כך ItemStyle.xsl שלנו מסוגל לפלוט <טבלה> תגים בהמקום המתאים.
ItemStyle.Xsl
הערה: שוב, בדוק ב- ItemStyle.xsl לאחר ביצוע שינויים, כך שתראה את ההשפעה של שינויים אלה.
יש לנו שתי פעילויות כאן:
- להחליף את התבנית הרשת כולה. אתה יכול העתקה/הדבקה מלמטה.
- להוסיף כמה ג'מבו mumbo מחוץ להגדרת תבנית המאפשרת "formatcurrency" תבנית לעבודה. (באפשרותך לדעת שיש לי נקודת אחיזה רפים ב- XSL).
הראשונה, ליד החלק העליון של ItemStyle.xsl, הוסף את השורה:
<!-- כמה ג'מבו mumbo אשר מאפשרת לנו להציג את ארה. מטבע. -->
<xsl:תבנית עשרונית שם="סגל" ספרה="יח" />
<xsl:תבנית שם="ברירת מחדל" התאמה="*" מצב="itemstyle">
הערה כי הוספתי אותו ישירות לפני <xsl:שם התבנית = "ברירת מחדל" …> הגדרה.
הבא, לחזור לתבנית הרשת שלנו. להחליף את התבנית לרשת כולה עם הקוד שלהלן. זה ביסודיות, הוא הגיב, אך אל תהסס שלח לי דוא ל או להשאיר הערות על הבלוג שלי, אם יש לך שאלות.
|
<xsl:תבנית שם="רשת" התאמה="שורה[@ סגנון = 'רשת']" מצב="itemstyle">
<!--
ContentMain.xsl עובר CurPos ולבסוף.
אנו משתמשים אלה מותנה לפלוט פתיחה וסגירה <טבלה> תגים.
-->
<xsl:param שם="CurPos" />
<xsl:param שם="האחרון" />
<!-- המשתנים הבאים הם שלא שונתה מ ItemStyle.xsl רגיל -->
<xsl:משתנה שם="SafeImageUrl">
<xsl:תבנית קריאה שם="OuterTemplate.GetSafeStaticUrl">
<xsl:עם param שם="UrlColumnName" בחר="'ImageUrl'"/>
</xsl:תבנית קריאה>
</xsl:משתנה>
<xsl:משתנה שם="SafeLinkUrl">
<xsl:תבנית קריאה שם="OuterTemplate.GetSafeLink">
<xsl:עם param שם="UrlColumnName" בחר="'LinkUrl'"/>
</xsl:תבנית קריאה>
</xsl:משתנה>
<xsl:משתנה שם="DisplayTitle">
<xsl:תבנית קריאה שם="OuterTemplate.GetTitle">
<xsl:עם param שם="כותרת" בחר="@Title"/>
<xsl:עם param שם="UrlColumnName" בחר="'LinkUrl'"/>
</xsl:תבנית קריאה>
</xsl:משתנה>
<xsl:משתנה שם="LinkTxslet">
<xsl:אם מבחן="@OpenInNewWindow = "true"" >_ blank</xsl:אם>
</xsl:משתנה>
<!--
כאן אנו מגדירים משתנה, "tableStart". מכיל את ה-HTML שבהם אנו משתמשים כדי להגדיר את הפתיחה של הטבלה, כמו גם לצד תוויות העמודה. שים לב כי אם CurPos = 1, זה כולל את ה-HTML בתוך תג CDATA.
אחרת, זה יהיה ריק.
הערך של tableStart הוא emited בכל פעם ItemStyle נקראת על ידי ContentQueryMain.xsl.
-->
<xsl:משתנה שם="tableStart">
<xsl:אם מבחן="$CurPos = 1">
<![CDATA[
<גבול הטבלה = 1>
<צבע רקע tr = "כחול">
<td><צבע גופן = "לבן"><b>שם פרוייקט</b></גופן></td>
<td ליישר = "זכות"><צבע גופן = "לבן"><b>לתאריך הושלמה</b></גופן></td>
<td ליישר = "זכות"><צבע גופן = "לבן"><b>תקציב</b></גופן></td>
<td ליישר = "זכות"><צבע גופן = "לבן"><b>הוצאות בפועל</b></גופן></td>
<td><צבע גופן = "לבן"><b>המצב הכללי</b></גופן></td>
</. tr>
]]>
</xsl:אם>
</xsl:משתנה>
<!--
משתנה נוסף, tableEnd מגדיר בפשטות סגירת טבלה בתג.
כמו עם tableStart, . זה תמיד emited. זו הסיבה מדוע הערך שלו מוקצית באופן מותנה על פי אם כבר עברנו את השורה האחרונה על ידי ContentQueryMain.xsl.
-->
<xsl:משתנה שם="tableEnd">
<xsl:אם מבחן="$CurPos = $Last">
<![CDATA[ </טבלה> ]]>
</xsl:אם>
</xsl:משתנה>
<!--
תמיד פולטים את התוכן של tableStart. אם זו לא השורה הראשונה המועבר אלינו על ידי ContentQueryMain.xsl, אז אנחנו יודעים שאת הערך שלו יהיה ריק.
בטל את פלט לברוח מכאן, כי כאשר tableStart זה לא ריקות, הוא כולל HTML בפועל שאנו רוצים להיות מעובד על-ידי הדפדפן. אם לא נספר מנתח XSL כדי לבטל את הפלט בריחה, זה יפיק דברים כמו"<טבלה>" במקום של"<טבלה>".
-->
<xsl:הערך בחר="$tableStart" בטל-פלט-בריחה="כן"/>
<. 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:הערך בחר="@ Project_x005F_x0020_Name"/>
</td>
<td יישור="מימין">
<xsl:הערך בחר="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
</td>
<td יישור="מימין">
<xsl:תבנית קריאה שם="formatcurrency">
<xsl:עם param שם="ערך" בחר="@ Project_x005F_x0020_Budget"></xsl:עם param>
</xsl:תבנית קריאה>
</td>
<td יישור="מימין">
<xsl:תבנית קריאה שם="formatcurrency">
<xsl:עם param שם="ערך" בחר="@ Project_x005F_x0020_Expenses"> </xsl:עם param>
</xsl:תבנית קריאה>
</td>
<td>
<xsl:הערך בחר="@ Project_x005F_x0020_Status"/>
</td>
<!--
כל הפעולות הבאות כהערות להבהיר את פני הדברים.
עם זאת, להחזירן, ודחס אותו לתוך <td> כדי לראות את השפעתו.
-->
<!--
<div id = "linkitem" class = "פריט">
<xsl:אם בדיקת = "מחרוזת באורך($SafeImageUrl) != 0 ">
<div class = "תמונת-שטח-שמאל">
<href = "{$SafeLinkUrl}" היעד = "{$LinkTxslet}">
<img class = "תמונת-ברוחב קבוע" src = "{$SafeImageUrl}" alt = "{@ ImageUrlAltText}"/>
</של>
</div>
</xsl:אם>
<div class = "קישור-פריט">
<xsl:תבנית קריאה name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<href = "{$SafeLinkUrl}" היעד = "{$LinkTxslet}" כותרת = "{@ LinkToolTip}">
<xsl:הערך של בחר = "$ DisplayTitle" />
</של>
<div class = "תיאור">
<xsl:הערך של select="@Description" />
</div>
</div>
</div>
-->
</. tr>
<!--
לפלוט סגירת תג של טבלה. אם אנחנו לא נמצאים בשורה הראשונה,
זה יהיה ריק.
-->
<xsl:הערך בחר="$tableEnd" בטל-פלט-בריחה="כן"/>
</xsl:תבנית>
<xsl:תבנית שם="formatcurrency">
<xsl:param שם="ערך" בחר="0" />
<xsl:הערך בחר='עיצוב מספר($ערך, "$ DDD,DDD,DDD.DD", "צוות")' />
</xsl:תבנית>
|