php include mysql php define DB_HOST localhost define DB_USER root def

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
include 'mysql.php';
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'png');
define('DB_TYPE', 'mysql');
define('DB_PREFIX', 'png_');
define('SORT_KEY', 'id'); // id || name || sort
$System_Base = new System_Base();
$System_Base -> buildTree();
$System_Base -> printTree();
$System_HTML = new System_HTML();
$System_HTML -> buildTree();
$System_HTML -> printTree();
$System_XSLT = new System_XSLT();
$System_XSLT ->buildTree();
$System_XSLT -> printTree();
class System_Base {
protected $db; // Объект работы с СУБД MySQL
protected $data; // Данные из СУБД
protected $tree; // Построенное дерево элементов
final public function __construct() {
if(ini_get('display_errors') != 1) {
ini_set('display_errors', 1);
}
error_reporting(E_ALL | E_STRICT); // установим нужный уровень репортинга
$this->db = MySQL::getInstance(); // Получаем ссылку на объект MySQL
$this->data = array();
$this->tree = array();
$this->getData();
}
final protected function getData() {
// Отправим запрос с нехитрой группировкой из php
// см MySQL::grouppedRows
$this->data = $this->db->grouppedRows('SELECT * FROM `test_table` ORDER BY id_parent ASC, sort ASC', 'name');
}
final public function buildTree() {
$this->tree = $this->getChildren();
}
final public function getChildren($id = 0) {
$children = array();
foreach ($this->data as $item) {
if($item['id_parent'] == $id) { // Если мы ищем этот элемент
$children[$item[SORT_KEY]] = $item; // сохраняем инфу о нем
if($id != -1) { // Если это - не null-элемент (введен, чтобы избежать зацикливания)
$children[$item[SORT_KEY]]['children'] = $this->getChildren($item['id']); // рекурсивный вызов
if(!sizeof($children[$item[SORT_KEY]]['children'])) { // Если детей у элемента нет - убьем соотв.индекс
unset($children[$item[SORT_KEY]]['children']);
}
}
}
}
return $children;
}
public function printTree() {
echo '<pre>';
print_r($this->tree);
echo '</pre>';
}
}
class System_HTML extends System_Base {
public function printTree() {
echo $this->showTree();
}
protected function showTree($data = false) {
$_template = '<div style="padding-left: 25px;">'."\n".'%s'."\n".'</div>'."\n";
if(!$data) {
$data = $this->tree;
}
$html = '';
foreach ($data as $item) {
$html .= "{$item['id']} - {$item['name']}<br />";
if(isset($item['children'])) {
$html .= $this->showTree($item['children']);
}
}
return sprintf($_template,$html);
}
}
class System_XSLT extends System_Base {
public function printTree() {
$doc = new DOMDocument();
$xsl = new XSLTProcessor();
$doc->load('styles.xsl');
$xsl->importStyleSheet($doc);
$doc->load('data.xml');
echo $xsl->transformToXML($doc);
}
}