Как реализовать jQuery асинхронное древовидное представление в PHP? - PullRequest
2 голосов
/ 01 февраля 2010

Я хочу интегрировать асинхронное древовидное представление в PHP. Теперь я хочу знать, как сгенерировать исходный файл php с PHP.

Теперь моя структура базы данных выглядит следующим образом:

Create table School(
id int(10) NOT NULL AUTO_INCREMENT, 
name varchar(50), 
primary key(id)
);
Create table Class(
id int(10) NOT NULL AUTO_INCREMENT,
name varchar(50), 
school_id int(10), 
primary key(id), 
foreign key(school_id) reference School(id) on delete cascade
);
Student(
id int(10) NOT NULL AUTO_INCREMENT, 
name varchar(50), 
class_id int(10),
primary key(id), 
foreign key(class_id) reference Class(id) on delete cascade
);



School -> Class -> Student

Теперь я хочу реализовать дерево. У вас есть идеи по его реализации?

Большое спасибо.

Дополнительный вопрос: когда я закончу дерево. Если я щелкну элементы в древовидном меню, он сгенерирует таблицу результатов, нажав. Ты знаешь как это сделать?

Однако, во-первых, я должен закончить просмотр дерева.

Ответы [ 3 ]

1 голос
/ 01 февраля 2010

Если вы хотите, чтобы это древовидное представление было сделано с помощью jQuery, я бы предложил использовать этот плагин . Вам просто нужно запустить одну функцию JS, и она будет работать. И все, что вам нужно сделать в PHP - это получить данные из базы данных и сгенерировать HTML, который плагин jQuery может преобразовать в древовидную структуру.

1 голос
/ 01 февраля 2010

Так что в основном вам нужно (псевдокод):

$tree = array();
/**
 * the following line essentially executes the Query:
 * SELECT * from schools;
 * and returns all the rows in an array like 
 * $schools = Array(0=>array('id'=>1, 'name' => 'name'))
 */
$schools = $db->schools()->selectAll();

foreach($schools as $school)
{
   $schoolArr = array('text' => $school['name']);

   /**
    * Similar to the calls to school above except the query would be:
    * SELECT * from class where class.school_id = $school['id']
    * $school['id'] is the pk from the particular school record
    */
   $classes = $db->classes()->select("school_id = ?", $school['id']);
   $classesArr = array();
   foreach($classes as $class)
   {
      $classArr = array('text' => $class['name']);
      /**
       * Similar to the calls to school above except the query would be:
       * SELECT * from student where student.class_id = $class['id']
       * $class['id'] is the pk from the particular class record
       */
      $students = $db->students()->select('class_id = ?', $class['id']);
      $studentsArr = array();
      foreach($students as $student)
      {
          $studentsArr[] = array('text' => $student['name']);
      }

      $classArr['children'] = $studentsArr;
      $classesArr[] = $classArr;
   }

   $schoolArr['children'] = $classesArr;
   $tree[] = $schoolArr;
}

$jsTreeString = json_encode($tree);

Теперь, очевидно, когда вы проходите через каждый цикл, вам нужно определить другие свойства дерева. затем, когда вы все сделали, просто json_encode массива и эхом, где я должен быть. По крайней мере, вот как это работает. Обратите внимание, что вы, вероятно, можете сделать это без отдельного запроса с использованием некоторых объединений, но я не хотел вдаваться во все это - вы определенно захотите изучить это, хотя, если производительность вообще является проблемой.

0 голосов
/ 01 февраля 2010

Похоже, что код статьи / примера может быть интересен вам при реализации представления дерева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...