Aug
11

การเลื่อนลำดับของรายการใน Maxsite

ต่อจากคราวที่แล้ว ที่ได้เสนอแนวคิดในการทำโมดูลที่ใช้สำหรับสร้างหน้าเพจบน Maxsite เห็นมีคนลองทำแล้ว แต่ติดตรงการเลื่อนลำดับของรายการที่สร้างขึ้นมา  ซึ่งคราวที่ผมได้ลองแก้ไข Maxsite ใหม่ๆ ผมเองก็งงเหมือนกัน บางที่เลื่อนไปแล้วค่า sort เป็น 0 ก็มี ซึ่งถ้ามีกรณีนี้เกิดขึ้น มันจะทำให้การทำงานของโปรแกรมเพี้ยนไปแน่นอน

และก็ต่อจากคราวที่แล้ว ผมได้นำเอาโมดูลนี้ไปพัฒนาต่อ ซับซ้อนกว่าเดิม เพราะจากเดิมผมทำแค่สร้างหน้าเพจขึ้นมาเฉยๆ ไม่มีหัวข้อหลัก หัวข้อย่อย แต่ตอนนี้มันยิ่งกว่านั้นอีก ก็เลยต้องปรับปรุงการเลื่อนลำดับรายการให้ดีๆ หน่อย แต่วันนี้ยังไม่ได้พูดถึง เอาเรื่องการเลื่อนลำดับมาอธิบายกันก่อนดีกว่า

1. ลองนึกถึงหน้าที่เราสร้างขึ้นนะ ว่ามันจะต้องเรียงโดย sort และ จากค่าน้อยไปมาก ฉนั้น ในขั้นตอนของการเพิ่มรายการใหม่ ผมจะหาค่า MAX(sort) ก่อน แล้วบวกค่าเข้าไปอีก 1 เพื่อให้เป็นค่า sort ของรายการที่เราจะเพิ่มใหม่ หากทำแบบนี้ ถึงแม้จะไม่มีการเลื่อนลำดับขึ้น-ลง รายการเหล่านั้นก็จะเรียงไปตามลำดับก่อน-หลัง อยู่แล้ว  แล้วเวลา query ข้อมูลก็ให้ ORDER BY sort  ไม่ต้อง DESC นะ

2. ในลูป while($arr[page] = $db->fetch($res)) ก่อนที่จะแสดงลิงค์รูปลูกศรให้คลิกไปเพื่อเลื่อนรายการขึ้น หรือ ลง จะมีการตรวจสอบค่า sort ปัจจุบัน เพื่อหาค่า sort ที่จะเกิดขึ้นหลังจากที่คลิกปุ่ม

** สังเกตดูว่า หากรายการนั้นเป็นรายการแรก เราจะไม่สามารถเลื่อนขึ้นได้อีก แต่ก็ยังมีลูกศรให้เราเลื่อนขึ้น ผมไม่ได้คิดนะว่าหากเราคลิกที่ปุ่มนั้น ค่า sort ในฐานข้อมูลจะมีการเปลี่ยนแปลงหรือไม่ ณ เวลานี้  มึนตึ้บ!!  ไปคิดเอาเอง

ในเมื่อ รายการแรกมันไม่ต้องเลื่อนขึ้น และ รายการสุดท้ายมันก็ไม่จำเป็นต้องเลื่อนลงอีก ดังนั้น ผมก็เอามันออกซะ เหมือนใน mambo วิธีการของผมก็จะต่างจาก Maxsite นิดนึงนะ

//กำหนดการเปลี่ยนลำดับขึ้น
if ($arr[page][sort] <= “1″)      // ถ้าค่า sort น้อยกว่าหรือเท่ากับ 1  (ที่จริงก็หมายถึงมันเท่ากับ 1 นะแหละ มันก็ไม่สามารถเลื่อนขึ้นได้อีก)
{
   $link_up = “  ”;    // จะไม่ให้แสดงปุ่มลูกศรเลื่อนขึ้น
}
else   // หรือถ้า sort มากกว่า 1  สามารถเลื่อนขึ้นได้
{
   $SETSORT_UP = intval($arr[page][sort])-1;   // ค่านี้คือ sort หลังจากที่เราคลิกปุ่มเลื่อนขึ้น
   $link_up = ‘<a href=”?name=admin&file=page&op=page_edit&action=sort&setsort=’.$SETSORT_UP.’&move=up&id=’.$arr[page][id].’” mce_href=”?name=admin&file=page&op=page_edit&action=sort&setsort=’.$SETSORT_UP.’&move=up&id=’.$arr[page][id].’” title=”เลื่อนขึ้น”><img src=”images/icon/arrow_up.gif” mce_src=”images/icon/arrow_up.gif”  border=”0″ alt=”เลื่อนขึ้น” /></a>’;   // สร้างลิงค์สำหรับเลื่อนขึ้น
}

//กำหนดการเปลี่ยนลำดับลง
// ขั้นแรกต้องหาค่า sort สูงสุดซะก่อน ด้วยวิธีการใดก็ได้  ส่วน $db->max_query ผมสร้างใหม่ ไม่มีใน Maxsite นะ
$max_sort = $db->max_query(TB_PAGE,”sort”,”");
 
if ($arr[page][sort] >= $max_sort)   // ถ้าค่า sort เป็นค่า sort สูงสุด
{
   $link_down = “  ”;    //  จะไม่มีปุ่มเลื่อนลง
}
    else   // หรือถ้าค่า sort น้อยกว่าค่า sort สูงสุด  แสดงว่าสามารถเลื่อนลงได้อีก
{
   // สร้างลิงค์สำหรับเลื่อนลง
   $SETSORT_DOWN = intval($arr[page][sort])+1;
   $link_down = ‘<a href=”?name=admin&file=page&op=page_edit&action=sort&setsort=’.$SETSORT_DOWN.’&move=down&id=’.$arr[page][id].’” mce_href=”?name=admin&file=page&op=page_edit&action=sort&setsort=’.$SETSORT_DOWN.’&move=down&id=’.$arr[page][id].’” title=”เลื่อนลง”><img src=”images/icon/arrow_down.gif” mce_src=”images/icon/arrow_down.gif”  border=”0″ alt=”เลื่อนลง” /></a>’;
}

จะต่างกับ Maxsite คือ ผมสร้างลิงค์เก็บในตัวแปร $link_up และ $link_down ตรงจุดที่แสดงปุ่มลูกศรเลื่อนขึ้น-ลง ก็ echo ตัวแปรนั้น ผลก็คือ รายการแรกจะมีเพียงลูกศรเลื่อนลง รายการสุดท้ายจะมีเพียงลูกศรเลื่อนขึ้น ส่วนรายการอื่นๆ ก็เหมือนเดิม

สังเกตในลิงค์นะครับ ตรงจุดที่ว่า setsort=’.$SETSORT_DOWN.’ เราส่งค่าค่านึงไป เดี๋ยวดูกันว่ามันสำคัญอย่างไร

3. หลังจากการคลิกปุ่มเลื่อนขึ้น-ลง ก็เหมือน Maxsite เดิมๆ ไม่ได้แก้นะ ใช้แบบนั้นได้เลย

คิดง่ายๆ การเลื่อนขึ้นหรือลง ก็คือการนำเอา รายการ 2 รายการมาสลับค่า sort กัน เช่น หากรายการปัจจุบันอยู่ลำดับที่ 3 (มันก็มีค่า sort เท่ากับ 3 ยังไงล่ะ) แล้วเราจะเลื่อนมันขึ้น แสดงว่า เราจะต้องให้มันสลับค่ากับรายการที่อยู่ลำดับที่ 2   …แน่นอนค่า setsort ที่ส่งมากับลิงค์จะต้องเท่ากับ 2  วิธีการก็คือ

   1) “UPDATE “.TB_PAGE.” SET sort = sort+1 WHERE sort = ‘”.$_GET[setsort].”‘ “  ก็คือ รายการไหนที่ sort=$_GET[setsort] ก็ให้บวก 1 เข้าไป ในกรณีตัวอย่าง $_GET[setsort] มีค่าเท่ากับ 2 ฉนั้น รายการที่มีค่า sort เท่ากับ 2 ก็จะต้องมีค่า sort เท่ากับ 3 หลังจากที่ทำการบวกแล้ว

   2) “UPDATE “.TB_PAGE.” SET sort = ‘”.$_GET[setsort].”‘ WHERE id = ‘”.$_GET[id].”‘ “  ก็คือ  ให้เปลี่ยนค่า sort ของรายการเป้าหมาย ให้กลายเป็นค่าเท่ากับ $_GET[setsort] ในกรณีตัวอย่าง รายการเป้าหมายเดิมมีค่า sort เท่ากับ 3 และ$_GET[setsort] มีค่าเท่ากับ 2  ค่า sort ของรายการเป้าหมายก็จะกลายเป็น 2

จะเห็นว่าหลังจากทำ 2 คำสั่งนี้แล้ว รายการ 2 รายการก็จะมีการสลับค่า sort กัน ทำให้รายการที่ 3 เลื่อนขึ้นไปอยู่ตำแหน่งที่ 2 และรายการที่เคยอยู่ลำดับที่ 2 จะเลื่อนลงมาอยู่ลำดับที่ 3

จบละคร้าาาาาาบ ….มึนตึ้บ!!

No Comments

Make A Comment

No comments yet.

Comments RSS Feed   TrackBack URL

Leave a comment

top