การเลื่อนลำดับของรายการใน 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 CommentNo comments yet.
Comments RSS Feed TrackBack URL