Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > ตัวอย่าง tree menu จาก ฐานข้อมูล คือพอจะเข้าใจหลักการ แต่ไม่รู้จะวางอะไรยังไงดี



 

ตัวอย่าง tree menu จาก ฐานข้อมูล คือพอจะเข้าใจหลักการ แต่ไม่รู้จะวางอะไรยังไงดี

 



Topic : 071076

Guest




คิดว่าเป็นคำถามที่หลายๆ คนถามแล้วมีการตอบแล้ว แต่เรายังหาตัวอย่างที่อ่านแล้วเข้าใจ ยังไม่เจอเลย


เรามีตาราง สองตาราง เช่น
ตาราง catagory

cat_id
cat_name
....


ตาราง product
pro_id
cat_id
pro_name
.....


เราต้องการดึง cat_name จาก catagory มาโชว์เป็นเมนู จากนั้น ภายใต้เมนู cat_name ก็ไปดึงข้อมูล pro_name มาโชว์ คือใน หนึ่ง cat_name ก็อาจจะมี pro_name ไม่เท่ากัน

คิดว่าใช้ css ทำ ก็ได้ แต่ตอนนี้ดึง cat_name มาโชว์แล้วแต่ไม่เข้าใจว่าจะดึง pro_name ออกมาโชว์ยังไง

<?
require("connect/connect.php");
?>
<?
$sql_catagoryproduct = "select * from catagoryproducts order by cpro_id asc";
//$sql_catagoryproduct ="Select * from catagoryproducts INNER JOIN productgroup ON catagoryproducts.cpro_id=productgroup.cpro_id";
$dbquery_catagoryproduct = mysql_query($sql_catagoryproduct);
$num_rows_videoname = mysql_num_rows($dbquery_catagoryproduct);

?>
<div id="div-head-tree-menu">: Tree Menu :</div>

<div id="div-tree-menu">
<ul id="tree-menu"><?

while ($resutCatShow= mysql_fetch_array($dbquery_catagoryproduct))
{ ?>
<li><a href="#"><span>+</span><?=$resutCatShow["cpro_name"];?></a>
<ul id="menu-lv1">
<li>&#8250; <a href="#">sub-menu-1-1</a></li> ตรง เมนูช่วงนี้จะดึงข้อมูลจากตาราง product ออกมาโชว์ยังไงให้มันต้องตาม cat_id
<li>&#8250; <a href="#">sub-menu-1-2</a></li> ตรง เมนูช่วงนี้จะดึงข้อมูลจากตาราง product ออกมาโชว์ยังไงให้มันต้องตาม
<li>&#8250; <a href="#">sub-menu-1-3</a></li> ตรง เมนูช่วงนี้จะดึงข้อมูลจากตาราง product ออกมาโชว์ยังไงให้มันต้องตาม
<li>&#8250; <a href="#">sub-menu-1-4</a></li> ตรง เมนูช่วงนี้จะดึงข้อมูลจากตาราง product ออกมาโชว์ยังไงให้มันต้องตาม
</ul>
</li>

<? }?>/ul>
</li>
</ul>
</div>

คือ จะทำยังไงให้ไปดึงข้อมูลจากตาราง product มา loop ให้ถูกกับ catagory เหมือนกับ เมนู แล้วก็ซับเมนู พอคลิกที่ซับเมนูก็จะโชว์ข้อมูลของ ซับเมนูตัวตัวนั้น

คือเรารู้ว่าต้องไป select ที่ตาราง product แล้วก็ loop pro_name ออกมาโดยใช้ cat_id อ้าง คือ รู้หลักการแต่ใช้งานไม่เป็น รบกวนหน่อยนะค่ะ ขอบคุณนะค่ะ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-12-28 13:06:04 By : มือใหม่หัดขับ View : 2606 Reply : 7
 

 

No. 1

Guest


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






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-28 13:09:04 By : มือใหม่หัดขับ
 


 

No. 2



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ที่ผมใช้อยู่ครับ มีตัวอย่างการใช้เมนูจากฐานข้อมูลด้วย จะใช้ sub menu เท่าไหร่ก็ได้

http://www.gosu.pl/MyGosuMenu/


ประวัติการแก้ไข
2011-12-28 13:31:19
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-28 13:30:34 By : Songkram
 

 

No. 3

Guest


คือตอนนี้ทำ แบบ gosuMenu ได้แล้วค่ะ แต่ปัญหาคือ เราดึงทั้ง เมนู กับ ซับเมนู มาจากฐานข้อมูล ตอนนี้เราดึง เมนูจากตาราง catagory มาได้แล้ว แต่ไม่เข้าใจตรง ที่จะดึง ซับเมนูจากตาราง product โดยใช้ cat_id ซึ่งเป็น FK ในตาราง product ยังไง คือ ตอนนี้เราดึง ซับเมนูไม่ได้ เพราะเราไม่เข้าใจอะ รบกวนผู้รู้ช่วยอธิบายหน่อยนะค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-28 14:32:23 By : มือใหม่หัดขับ
 


 

No. 4



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้าเป็นสคริปจากจาก Gosu จะมีหลักการก็คือ เราต้องคิวรี่ข้อมูลออกมาให้อยู่ในรูปของตาราง โดยเน้น 3 ฟิลดิ์ คือ id, name, id_par เพราะฉะนั้นจะมีกี่ตารางก็แล้วแต่ จะต้องคิวรี่ออกมาให้ได้ 3 ฟิลดิ์แล้วก็ตั้งชื่อตามนี้ เพราะฉะนั้นถ้าในกรณีเจ้าของกระทู้ต้องใช้ UNION JOIN เข้ามาช่วยเชื่อมต่อตาราง ให้สังเกตุดูตรงฟิลดิ์ id_par เพราะมันคือเลขเมนูหลักและ Sub menu ทั้งหมดนั่นเอง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-28 16:40:56 By : Songkram
 


 

No. 5



โพสกระทู้ ( 189 )
บทความ ( 0 )



สถานะออฟไลน์


ขอดูโค๊ดหน่อยครับ กำลังติดปัญหานี้อยู่พอดี



งง ตรงที่จะเชื่อมต่อ ข้อมูล กับ ด้าต้าเบส


ประวัติการแก้ไข
2011-12-28 16:59:18
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-28 16:52:10 By : okboou
 


 

No. 6



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ขออภัยนะครับ พอดีตอนนี้อยู่บ้านแล้ว ถ้าอย่างไร พรุ่งนี้จะเอาตัวอย่างมาให้ดูนะครับ (อาจจะแก้ปัญหากันได้แล้วก็ได้ ^^)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-28 19:05:32 By : Songkram
 


 

No. 7



โพสกระทู้ ( 314 )
บทความ ( 0 )



สถานะออฟไลน์


ตามสัญญาครับ ..... ผมอาจจะอธิบายได้ไม่ดีเท่าไหร่ มันเป็น code ที่ผมทำไว้นานแล้ว ผ่านการแก้ไขมาพอสมควร ที่ผมจะเอามาเป็นตัวอย่างนี้เป็น code ที่ผมดัดแปลงนิดหน่อยจาก gosuMenu เพราะต้องการแสดงเมนูจาก database mysql เพื่อให้สามารถตวจสอบการเข้าถึงข้อมูลของแต่ละ user ได้สะดวกยิ่งขึ้น ความจริงผมแก้ไฟล์อื่นด้วยที่เกี่ยวข้อง ข้างล่างนี้จะนำเสนอเฉพาะไฟล์ที่เป็นไฟล์แสดงผล tree นะครับ ลองเอาไปเทียบดูกับตัวอย่างที่เขาให้มาได้เลย

Code (PHP)
session_start();
include('inc/dbclass/connect.php');  //ส่วนของการ connection ขึ้นอยู่กับของแต่ละคน (ยังไงก็ได้)

function tree_html($id = null)
{	
	$ret = '';
	if (null == $id) $q_id = 'id_par IS NULL';
	else $q_id = 'id_par = '.(int)$id;
	
	if ($_SESSION['depid'] <> '4') {  // บันทัดนี้ผมเพิ่มเข้ามาเพื่อใช้ในการตรวจสอบในกรณีพิเศษครับ อันนี้แค่ตัวอย่างนะครับ (ถ้าไม่ใช้ก็ตัดทิ้งได้)
		$q_id .= ' AND adm = "N"';
	}

$result = mysql_query('SELECT * FROM menu WHERE status = "Y" AND '.$q_id.' ORDER BY level'); // บันทัดนี้คือการคิวรี่ ปกติในตัวอย่างจะมี 3 ฟิลดิ์คือ id, name, id_par เท่านั้น แต่ผมเพิ่มการตรวจสอบสถานะและการจัดเรียงตาม level เอาไว้ด้วยเลยเป็นประมาณนี้ครับ เพราะฉะนั้นคิวรี่ของเดิมจะแตกต่างจากผมนะครับ
	
	$childs = array(); //ตั้งค่าตัวแปรเพื่อรับค่า โดยกำหนดให้เป็น array

	while ($row = mysql_fetch_assoc($result)) { // ต่อเนื่องจากบันทัดบนครับ loop เอาค่าที่คิวรี่ใส่ไว้ใน array
		$childs[] = $row;
	}


//ข้างล่างนี้เป็นส่วนสำคัญครับ คือการ loop เพื่อเอาค่าทั้งหมดมาจัดเรียงใส่ไว้ในตัวแปร $ret ก่อนที่จะนำไปใช้กับจาวา
//สังเกตุตรง tag a นะครับ เพราะมันคือ event ที่เราจะให้แต่ละเมนูคลิกแล้วทำอะไรบ้าง ซึ่งผมใช้ฟิลดิ์เก็บข้อมูลการคลิกของแต่ละเมนูแยกกัน
//เพราะฉะนั้น แต่ละเมนูจะมีการเรียกใช้ฟังก์ชั่นแตกต่างกันอย่างอิสระ ข้อดีก็คือถ้าเราทำระบบหลังบ้านก็สามารถ insert ข้อมูลฟังก์ชั่นลงฐานข้อมูลไปเลย
//จะเพิ่ม ลบ แก้ไข อย่างไรก็สะดวกครับ
    foreach ($childs as $row)
    {
        $row['name'] = str_replace(array("'", '"'), '', $row[name]);
        $row['name'] = htmlspecialchars($row['name']);

        $nest = tree_html($row[id]);
        if ($nest) {
            $ret .= '<div class="folder '.trim($row[iconclass]).'" id="tree-'.$row[id].'">';         
			$ret .= '<a href="Javascript:'.$row[script].'">'.$row[name].'</a>';			
			$ret .= $nest;
            $ret .= '</div>';
        } else {
            $ret .= '<div class="doc '.trim($row[iconclass]).'" id="tree-'.$row[id].'">';
            $ret .= '<a href="Javascript:'.$row[script].'" >'.$row[name].'</a>';
            $ret .= '</div>';
        }
    }
    return $ret;
}
?>

//ข้างล่างนี้คือที่จะเอาข้อมูลมาแสดงให้เป็นเมนู tree 
<div class="DynamicTree">
	<div class="top">Index</div>
	<div class="wrap" id="tree">
		<?php echo tree_html();?>
	</div>
</div>

//ข้างล่างนี้ก็เป็นสคริปจาวาตามตัวอย่างครับ ตั้งค่าได้ตามชอบเลย

<script type="text/javascript">
var tree = new DynamicTree("tree");
    tree.foldersAsLinks = true;
	tree.foldersAsLinks2 = true;
    tree.enableSetActive = true;
	tree.path = 'img/icons/';
    tree.icons = {
        	"help" : "img/Xiao Icon/51.png", // ส่วนนี้ก็เป็นการกำหนดให้เมนูบางเมนูมีไอคอนตามที่เรากำหนด (free style)
	"home" : "img/Xiao Icon/61.png",
	"homeOpen" : "img/Xiao Icon/63.png",
	"exit" : "img/lock.gif",
	"log" : "img/log.png",
	"write" : "img/Xiao Icon/60.png",
	"announce" : "img/002_26.png",
	"adm" : "img/Xiao Icon/37.png",
	"admOpen" : "img/Xiao Icon/38.png",
	"admusr" : "img/user_edit.png",
	"fload" : "img/Xiao Icon/22.png",
	"stat" : "img/Xiao Icon/53.png"
    };
	tree.init();
	tree.openTo("tree-19"); // ส่วนนี้คือการกำหนดให้เมนูหลักบางเมนู expand ออกมาตั้งแต่การเปิดครั้งแรกเลย
	tree.openTo("tree-1");
	tree.openTo("tree-2");
	tree.openTo("tree-21");
</script>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-29 08:52:58 By : Songkram
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ตัวอย่าง tree menu จาก ฐานข้อมูล คือพอจะเข้าใจหลักการ แต่ไม่รู้จะวางอะไรยังไงดี
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่