Skip to main content

ปรับเปลี่ยนหน้าตา Feed ของ SharePoint

Submitted by ezybzy on

ด้วยความซน จึงเข้าไปคุ้ย /_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 ก่อน

สำหรับขั้นตอนการดัดแปลงตามลำดับมีดังนี้

  1. เพิ่มคีย์ใน appSettings ที่เหมาะสม เช่น FeedXSLNews โดยให้สร้างไฟล์ XSL ที่จะใช้งานไปวางใน /Style Library/Xsl Style Sheets ของแต่ละเว็บที่จะใช้งาน (นี่เป็นข้อจำกัดของ ContentByQueryWebPart) แล้วให้ตั้งค่าของคีย์นั้นเป็นที่อยู่ url ของไฟล์นั้น เช่น /Style Library/Xsl Style Sheets/foo.xsl
  2. ทำการคัดลอก Feed Url แล้วเปลี่ยนค่า xsl เป็นค่าที่เราต้องการเช่น xsl=News

เพียงแค่นี้หน้าตาการแสดงผล Feed ผ่านทางหน้าเว็บ หรือผ่านทาง RSS Viewer WebPart ก็จะเปลี่ยนไปเป็นแบบที่เราต้องการ

Tags