امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
نمایش زیر گزینه های هر یک والد
#1
سلام به همگی
من میخوام طبق ساختار جدول زیر تمام زیر گروه هارو نمایش بدم. دوتا جدول دارم که جدول اول گروه ها ساخته میشوند و در جدول دومی آیدی گروه زیر مجموعه و والد درج می شود.
اگر ساختار جدول به صورت زیر باشه چطوری باید بصورت زیر منو نمایش بدم ؟

در عکس شماره یک گروه ساخته میشه و در عکس دوم میشه گروهی را زیر گروه دیگری کردم. میخوام زیر گروه هارو با یک فاصله ای نمایش بدم تا کاربر بفهمه زیر گروه هست

http://s6.uplod.ir/i/00861/842l1y3zd0sw.jpg
http://s6.uplod.ir/i/00861/2a6i4m8ug20t.jpg
پاسخ
#2
سلام

راستش من متوجه سوالتون نشدم تا بتونم راهنمایی کنم.
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
#3
(2017/02/12، 07:51 PM)admin نوشته است: سلام

راستش من متوجه سوالتون نشدم تا بتونم راهنمایی کنم.

لطفا این عکس را مشاهده کنید:
http://www.upsara.com/images/gkg_group.jpg
در جوملا وقتی گروه کاربری بسازیم به این شکل نمایش میده. و حتی بعضی گروه های کاربری بعنوان زیر گروه هستند.

من در سایتی که میسازم از گروه کاربری استفاده میکنم. یک جدول دارم ( http://www.upsara.com/images/et6u_table.jpg ) که فیلدهای ( Id,name ) دارد. درون همون جدول چندین گروه مختلف ساختم. بعدش شبکه را زیر گروه کامپیوتر کردم ( جدول دوم برای زیر مجموعه کردن گروه ها ساخته شده http://www.upsara.com/images/683l_tab.jpg ).

نمیتونم گروه ها را مثل جوملا نمایش بدم تا زیر گروه ها مشخص بشن
پاسخ
#4
برای اینکه بتونید گروه و زیرگروه بسازی به نظرم میتونید از یک روش دیگه استفاده کنید.
یک جدول با نام group و فیلدهای با ساختار زیر درست کنید.
id
parent_id
name
با این روش میتونید نامحدود گروه و زیرگروه بسازید.
به طور مثال دو تا رکورد داخل این جدول درج کنید اولین رکورد رو parent_id اون رو 0 در نظر بگیرید و دومین رکورد رو parent_id اون رو 1 که Id رکورد قبلی هست درنظر بگیرید.
اینطوری میتونید نامحدود گروه و زیرگروه داشته باشید.
برای نمایش هم کافیه یه حلقه درست کنید اول رکوردهایی که parent_id اونها 0 رو نمایش بدید بعد در هر رکورد کوئری بزنید و رکوردهایی که parent_id اونها برابر با id رکورد فعلی

کد php:
<?php
defined
('BASEPATH') OR exit('No direct script access allowed');

class 
Welcome extends CI_Controller {

    public function 
index()
    {
        echo 
$this->treeview();
    }


    public function 
treeview($parent_id 0)
    {
        
$rows $this->db->get_where('groups', array('parent_id' => $parent_id));
        if( 
$rows->num_rows() == ) return '';
        
$output '<ul>';
        foreach(
$rows->result_array() as $row){
            
$output .= '<li>'.$row['name'];
            
$output .= $this->treeview($row['id']);
            
$output .= '</li>';
        }
        return 
$output;
    }



مثال بالا رو نگاه کنی یه فانکشن هست که میاد این کارو میکنه وخوبیه این فانکشن اینه که برای همه جا و هر گروه و زیرگروهی کار میکنه  Wink
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
 سپاس شده توسط a76205
#5
سلام
الان میتونم به تعداد نا محدود گروه و زیر گروه بسازم. بجای 1 جدول دو جدول هست که البته دست من نیست چون از یک کتابخانه دارم استفاده میکنم...
چون دو جدوله بلد نیستم بصورت مثالی که زدین درش بیارم
میشه دو عکس اخر باز کنید تا ساختار جدولو ببینید
پاسخ
#6
یه خروجی sql همراه با دیتا از دو جدول بگیرید
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
 سپاس شده توسط a76205
#7
بله خدمت شما:
جدول اول که برای تعریف گروه ها هست
کد:
-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Feb 14, 2017 at 09:24 PM
-- Server version: 5.6.17
-- PHP Version: 5.5.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!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 */;

--
-- Database: `CI`
--

-- --------------------------------------------------------

--
-- Table structure for table `aauth_groups`
--

CREATE TABLE IF NOT EXISTS `aauth_groups` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(100) DEFAULT NULL,
 `definition` text,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

--
-- Dumping data for table `aauth_groups`
--

INSERT INTO `aauth_groups` (`id`, `name`, `definition`) VALUES
(1, 'Admin', 'Super Admin Group'),
(2, 'Public', 'Public Access Group'),
(3, 'Default', 'Default Access Group'),
(4, 'نویسنده', ''),
(5, 'کامپیوتر', ''),
(6, 'صنف کامپیوتر', ''),
(7, ' برق', ''),
(8, 'عمران', ''),
(9, 'تیکت', ''),
(10, 'دپارتمان آموزش', ''),
(11, 'دپارتمان مالی', '');

/*!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 */;


جدول دوم برای زیر مجموعه کردن گروه :
کد:
-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Feb 14, 2017 at 09:32 PM
-- Server version: 5.6.17
-- PHP Version: 5.5.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!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 */;

--
-- Database: `CI`
--

-- --------------------------------------------------------

--
-- Table structure for table `aauth_group_to_group`
--

CREATE TABLE IF NOT EXISTS `aauth_group_to_group` (
 `group_id` int(11) unsigned NOT NULL,
 `subgroup_id` int(11) unsigned NOT NULL,
 PRIMARY KEY (`group_id`,`subgroup_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `aauth_group_to_group`
--

INSERT INTO `aauth_group_to_group` (`group_id`, `subgroup_id`) VALUES
(5, 6),
(7, 8),
(9, 10),
(9, 11);

/*!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 */;
پاسخ
#8
سلام
ممنون میشم اگه بررسی کنید Sad
پاسخ
#9
این کدها رو ببینید:
کد php:
   public function parent()
 
   {
 
       $sql "
        SELECT t1.* 
        FROM aauth_group t1
        WHERE NOT EXISTS (SELECT t2.* FROM aauth_group_to_group t2 WHERE subgroup_id = t1.id)
        /*INNER JOIN aauth_group_to_group t2 ON t2.group_id = t1.id*/
        "
;
 
       $query $this->db->query($sql);
 
       echo '<ul>';
 
       foreach($query->result_array() as $row){
 
           echo '<li>';
 
           echo $row['name'];
 
           echo $this->childs($row['id']);
 
           echo '</li>';
 
       }
 
       echo '</ul>';
 
   }


 
   public function childs($subgroup_id)
 
   {
 
       $sql "
        SELECT t1.*,t2.* FROM aauth_group t1
        INNER JOIN aauth_group_to_group t2 ON t2.subgroup_id = t1.id
        WHERE t2.group_id = 
$subgroup_id
        "
;
 
       $query $this->db->query($sql);
 
       if($query->num_rows() == 0) return '';
 
       
        echo 
'<ul>';
 
       foreach($query->result_array() as $row){
 
           echo '<li>';
 
           echo $row['name'];
 
           // echo $this->childs($row['subgroup_id']);
 
           echo '</li>';
 
       }
 
       echo '</ul>'  
    


خروجی با دیتایی که داده بودید به این شکل شد:
[تصویر:  XmPZA.png]
کد php:
<ul><li>Admin</li><li>Public</li><li>Default</li><li>نویسنده</li><li>کامپیوتر<ul><li>صنف کامپیوتر</li></ul></li><liبرق<ul><li>عمران</li></ul></li><li>تیکت<ul><li>دپارتمان آموزش</li><li>دپارتمان مالی</li></ul></li></ul

این کدها تا یک سطح زیرمجموعه رو جوابگوئه اما بیشتر نه.
برای بیشتر از یک سطح می بایست الگوریتم کار را تغییر داد.
لطفا قبل از ارسال هرگونه پست قوانین سایت را مطالعه کنید.
----
وب سایت میثم محمودی
پاسخ
 سپاس شده توسط a76205
#10
کد رو داخل کنترلر کپی کردم اما اجرا نمیشه.
راستی میشه در موردش توضیحاتی بدین ؟
پاسخ


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان