ساخت منوی دینامیک با php و mysql ؟

sharktech

کاربر فعال
من می خوام یک منوی دینامیک بسازم, اما هر چی فکر کردم نتونستم راه حل رو پیدا کنم.

می خوام هم منو و هم زیر منوها رو توی db ذخیره کنم.

نمونه اون چیزی که می خوام اینجاست :

http://cssmenumaker.com/builder/menu_info.php?menu=057

کسی هست قبلا این کارو کرده باشه, یا بتونه کمکم کنه ؟

مرسی
 

Mohammadreza

Well-Known Member
2 تا table بساز براي مثال ( cat و zcat )
توي zcat يه catid بزار كه ارتباطش بده با cat !
به همين راحتي !
فيلد ها رو هم به شكل زير براشون بساز :

cat = id,catname
zcat = id,zcatname,catid
 

sharktech

کاربر فعال
ممنون.

میشه با مثال بگی ؟ آخه مخم هنگ کردهو بالا نمیاد.

در ضمن با این روش میشه 3 تا یا بیشتر زیر مجموعه ساخت ؟
 

Mohammadreza

Well-Known Member
نه ديگه با اين روش ميشه يك دسته با يه زير دسته درست كرد !
من اينارو داخل ديتا بيس گفتم انجام بدي ! مثال نداره كه !
از طريق phpmyadmin مي توني بسازي
 

sharktech

کاربر فعال
ممنون.

اما من توی کد php گیر کردم نه نحوه ساختن db !!!

نظر دیگه ای ندارین ؟
 

Mohammadreza

Well-Known Member
چون اين سوال خيلي پيش مياد
بعد از امتحاناتم اگه يادم موند و خدا ياري كرد ، با اجازه اساتيد يه پست آموزشش رو مي زنم كه به تعداد دلخواه بشه زير دسته اضافه كرد !
حالا فعلا اينو داشته باش
اين آدرس كه گذاشتي رو برات يه جوري با php مي نويسم كه از ديتا بيس فرضي كه تو پست اولم گفتم بخونتشون !

PHP:
<div class="menu">
<ul>
	<li><a href="#" >Home</a></li>
	<?php  
	$query = mysql_query('select * from cat;');
	$num = mysql_num_rows($query);
	for($i=0;$i<$num;$i++)
	{
		$row = mysql_fetch_array($query);
		echo '<li><a href="?cat='.$row['id'].'" id="current">'.$row['catname'].'</a>'."/n";
		$q_zcat = mysql_query('select * zcat where catid='.$row['id'].';');
		$num_zcat = mysql_num_rows($q_zcat);
		if($num_zcat != 0)
		{
			for($ii=0;$ii<$num_zcat;$ii++)
			{
				$row_zcat = mysql_fetch_array($q_zcat);
				echo '<ul><li><a href="?zcat='.$row_zcat['id'].'">'.$row_zcat['zcatname'].'</a></li></ul>'."/n";
			}
		}
		echo '</li>';
	}
	?>
</ul>
</div>

موفق باشي !
برم پاي درسم ، فعلا
 

Mr.Steres

Active Member
یک تیبل می سازی با مشخصات زیر :

ای دی ، نیم ، فادر

بعدش یک کوئری می نویسی که اگر فادر اش برابر null بود اون می شه سر منو و اگر دارای ای دی سر منو بود که می شه زیر منو ! به همین راحتی ...
 

sharktech

کاربر فعال
یا کدت کار نکرد یا من نتونستم, زیر منو رو نمیاره.

استاد عزیز برای شما آسونه, نه برای ما بچه php کارها :lol:

این مخ لعنتی هم که یاری نمیکنه, البته روش کار رو گرفتما, اما ...

مرسی
 

Mohammadreza

Well-Known Member
مطمئنا يه جايي اشتباه كردي !
يا ديتا بيست رو درست نساختي ، يا ...
بگو دقيقا چيكار كردي تا بگم مشكلت كجاست !
 
آخرین ویرایش:

sajadmaz

Member
شما یک تیبل بساز
PHP:
CREATE TABLE IF NOT EXISTS `psm_product` (
  `productid` int(10) NOT NULL AUTO_INCREMENT,
  `parentproductid` int(10) NOT NULL,
  `name` varchar(255) COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`productid`),
  UNIQUE KEY `productid` (`productid`),
  KEY `productid_2` (`productid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;


یک function مینویسید دارای یک argument که همون آی دی هستش بعد یک کوئری که SELECT * FROM table WHERE parentproductid = $id

fetch میکنی میریزی داخل حلقه وتوی حلقه دوباره همون فانکشن را صدا میزنی اساس کلی کار همینجوریه حالت نمایشش به خودتون بستگی داره

موفق باشین
 

sajadmaz

Member
شما یک تیبل بساز
PHP:
CREATE TABLE IF NOT EXISTS `psm_product` (
  `productid` int(10) NOT NULL AUTO_INCREMENT,
  `parentproductid` int(10) NOT NULL,
  `name` varchar(255) COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`productid`),
  UNIQUE KEY `productid` (`productid`),
  KEY `productid_2` (`productid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;


یک function مینویسید دارای یک argument که همون آی دی هستش بعد یک کوئری که SELECT * FROM table WHERE parentproductid = $id

fetch میکنی میریزی داخل حلقه وتوی حلقه دوباره همون فانکشن را صدا میزنی اساس کلی کار همینجوریه حالت نمایشش به خودتون بستگی داره

موفق باشین
 

Mr.Steres

Active Member
نیازی به این کاری های پیچیده نیست ! اینجاست که بحث برنامه نویسی بهینه وسط میاد ... کار شما با یک جدول 3 فیلدی راه میفته ... فقط فکر می خواد :shock:


صفحه نمایش :

PHP:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title></title>
        <link rel="stylesheet" href="menu_style.css" type="text/css" />
    </head>
    <body>
        <br/>
        <br/>
        <div class="menu">
            <ul>
                <?php

                mysql_connect("localhost","root","");
                mysql_select_db("menuse");

                $get = mysql_query("select * from items where father is NULL");
                while ($row = mysql_fetch_assoc($get)) {
                    echo '<li><a href="#" >' . $row['name'] .'</a>' ;
                    $id = $row['id'] ;
                    $check = mysql_query("select * from items where father = '$id'");
                    if ( mysql_num_rows($check) ) {
                        echo '<ul>' ;
                        while ( $row2 = mysql_fetch_assoc($check) ) {
                            echo '<li><a href="#">' . $row2['name'] . '</a></li>' ;
                        }
                        echo '</ul>' ;
                    } else {
                        echo '</li>' ;
                    }
                }
                ?>
            </ul>
        </div>

    </body>
</html>

SQl :

PHP:
-- MySQL dump 10.13  Distrib 5.1.34, for Win32 (ia32)
--
-- Host: localhost    Database: menuse
-- ------------------------------------------------------
-- Server version	5.1.34-community

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `menuse`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `menuse` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `menuse`;

--
-- Table structure for table `items`
--

DROP TABLE IF EXISTS `items`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `items` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `father` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `items`
--

LOCK TABLES `items` WRITE;
/*!40000 ALTER TABLE `items` DISABLE KEYS */;
INSERT INTO `items` VALUES (1,'Home',NULL),(2,'Contact',NULL),(3,'Subjects',NULL),(4,'Mobile',3),(5,'PC',3);
/*!40000 ALTER TABLE `items` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2010-01-11 20:52:54
 

پیوست ها

  • menuse.zip
    6.6 کیلوبایت · بازدیدها: 25

sajadmaz

Member
ببخشید کجای این کار پیچده است ؟ یک تیبل با 3 تا فیلد ؟ یا یک فانکشن تو در تو ؟
 

Masoud1365

مدیر انجمن
برای این کار یک تیبل 3 فیلدی نیازه و بهینه تره فقط برای کوئری گرفتن نباید از فانکشن های تو در تو استفاده کرد ! باید از left join در query استفاده کرد.

موفق باشید
 

sharktech

کاربر فعال
ممنون استاد عزیز, خیلی کمک کردی, خدا خیرت بده ننه :rose:

راستی رابط کاربریشو چطوری طراحی کنم که هم ادیت کردن و اضافه کردن منو راحت باشه و هم کاربر پسند باشه ؟

ممنون میشم دوستان نظر بدن, مرسی
 

جدیدترین ارسال ها

بالا