ด้วยความซน จึงเข้าไปคุ้ย /_layouts/feed.aspx
เพื่อดูว่ามันทำงานอย่างไรก็พบกับเรื่องประหลาดใจที่ว่าเบื้องหลังไฟล์นี้คือการเรียกใช้งาน ContentByQueryWebPart
ดื้อ ๆ เลยโดยมีการให้ Parameter ต่าง ๆ ที่มันต้องการผ่านทาง Query String หนึ่งในพารามิเตอร์ที่เราสนใจคือ xsl=1
ทำไมต้องเป็น 1
ล่ะ?
เรามาดูรูปแบบของ Feed Url โดยทั่วไปก่อน
http://foo/bar/_layouts/feed.aspx?xsl=1&web={absoutePathWebUrl}&page={pageguid}&wp={wpguid}&pageurl={absolutePathRelativePageUrl}
พอเปิดดู Code ด้านในก็ถึงบางอ้อว่า จริง ๆ แล้วมันไปสัมพันธ์กับค่าใน web.config
นั่นคือ
<add key="FeedXsl1" value="/Style Library/Xsl Style Sheets/Rss.xsl" />
สัมพันธ์กันอย่างไร? ใน # Microsoft::SharePoint::Publishing::Internal::CodeBehind::FeedPage.OnLoad(e : EventArgs)
ได้ระบุไว้ช่วงหนึ่งว่า
string text = base.Request.QueryString["xsl"]; string defaultMainXsl = ConfigurationManager.AppSettings["FeedXsl" + text]; ContentByQueryWebPart contentByQueryWebPart = new ContentByQueryWebPart(defaultMainXsl, string.Empty, string.Empty);
บรรทัดสุดท้ายเป็นการระบุ MainXsl
ของ ContentByQueryWebPart
ซึ่งเราไม่ได้สนใจ แต่มาดูกันว่า defaultMainXsl
มันถูกสร้างมาอย่างไร ก็ตามที่เห็นครับ มันอ่านค่าจาก web.config
ส่วนของ appSettings
โดยดูคีย์ชื่อ FeedXsl
… ซึ่งก็คือค่าบน Query String ของ xsl
นั่นเอง
ตรงนี้จะเป็น string หรือตัวเลขก็ไม่ผิดกติกาใด ๆ ทั้งสิ้น ปัญหามีแค่ว่า Feed Url นั้นถูกล็อคมาให้ xsl=1
ดังนั้นหากเราจะดัดแปลงการแสดงผล ต้องจำไว้ว่าเราจะใช้ Feed Url แบบเดิม ๆ ไม่ได้ ต้องมีการเปลี่ยนค่าของ xsl ก่อน
สำหรับขั้นตอนการดัดแปลงตามลำดับมีดังนี้
- เพิ่มคีย์ใน appSettings ที่เหมาะสม เช่น
FeedXSL
News
โดยให้สร้างไฟล์ XSL ที่จะใช้งานไปวางใน/Style Library/Xsl Style Sheets
ของแต่ละเว็บที่จะใช้งาน (นี่เป็นข้อจำกัดของ ContentByQueryWebPart) แล้วให้ตั้งค่าของคีย์นั้นเป็นที่อยู่ url ของไฟล์นั้น เช่น/Style Library/Xsl Style Sheets
/foo.xsl
- ทำการคัดลอก Feed Url แล้วเปลี่ยนค่า
xsl
เป็นค่าที่เราต้องการเช่นxsl=
News
เพียงแค่นี้หน้าตาการแสดงผล Feed ผ่านทางหน้าเว็บ หรือผ่านทาง RSS Viewer WebPart ก็จะเปลี่ยนไปเป็นแบบที่เราต้องการ