Javascript,ajax,php ve postgresql le çalışan ağaç yapısı var mysql de hazır şablonu postgresql e çevirmek istiyorum. Agacı en yalın haline getirdim. Sadece veri çekip gösterecek hale. Nesneye yönelimli programlama kullanılmış ve benim bu konuda bilgim pek yeterli değil. Uzun süredir üzerinde çalışıyorum az da olsa yol kattetiğimi düşünüyorum. Lafı uzatmadan sorunu yazayım.
<?php
class _tree_struct {
// Structure table and fields
protected $fields = array(
"_id" => false,
"_parent_id" => false,
"_position" => false,
"_left" => false,
"_right" => false,
"_level" => false
);
// Constructor
function __construct($table = "tree", $fields = array()) {
$this->table = $table;
foreach($this->fields as $k => &$v) { $v = $k; }
// Database
$this->db = new _database;
}
//veri çekiliyor.
function _get_children($id, $recursive = false) {
$children = array();
$this->db->query("SELECT ".implode(" , ", $this->fields)." FROM ".$this->table." WHERE ".$this->fields["_parent_id"]." = ".(int) $id." ORDER BY ".$this->fields["_position"]." ASC");
while($this->db->nextr()) $children[$this->db->f($this->fields["_id"])] = $this->db->get_row("assoc");
return $children;
}
}
//type ve title ekleniyor.
class json_tree extends _tree_struct {
function __construct($table = "tree", $fields = array(), $add_fields = array("_title" => "_title", "_type" => "_type")) {
parent::__construct($table, $fields);
$this->fields = array_merge($this->fields, $add_fields);
$this->add_fields = $add_fields;
}
function get_children($data) {
$tmp = $this->_get_children((int)$data["id"]); //id'ye dokunma.
foreach($tmp as $k => $v) {
$result[] = array(
"attr" => array("id" => "node_".$k, "rel" => $v[$this->fields["_type"]]), //id'ye dokunma
"data" => $v[$this->fields["_title"]],
"state" => ((int)$v[$this->fields["_right"]] - (int)$v[$this->fields["_left"]] > 1) ? "closed" : ""
);
}
return json_encode($result);
}
}
?>Yukarıda ki dosyada gördüğünüz sorgulama doğru mu ya da postgresql de doğrusu nasıl olmalı? Burada ki $this-> 'in mantığı nedir kavrayamadım gitti.Gelelim diğer hataya veritabanına bağlantı kodlarını yazayım
<?php
class _database {
function connect() {
$this->data = new PDO('pgsql:host=localhost;dbname=agac;port=5432', "postgres", "1");
return true;
}
function query($sql) {
$this->connect();
$this->result = $this->data->query($sql) ;
return ($this->result) ? true : false;
}
function nextr(){
unset($this->row);//row u temizle.
$this->row = $this->result->fetch_array(PGSQL_BOTH); //row 'a veriyi çek.
return ($this->row) ? true : false ;
}
function get_row($mode = "both") {
switch($mode) {
default:
$return = $this->row;
break;
}
return array_map("stripslashes",$return);
}
function f($index) {
return stripslashes($this->row[$index]);
}
}Mysql de bağlanınca problem olmuyor ama yukarıda ki gibi postgresql e çevirdiğimde veri çekmede problem yaşıyorum. Kolon adlarında problem yok. Hepsi birebir eşleşiyor.Nerde hata yapıyorum acaba?
sorun nerde anlayamadım. Dosyaların tamamını vereyim isterseniz bir göz atın. İndex server.php 'yi gösteriyor. server.php içeriği :