ugrás a tartalomhoz

Fastruktúrával kombinált megjelenítés/lekérdezések

Vales_73 · 2005. Jún. 30. (Cs), 13.50
Sziasztok!

Nagyon rövid időn belül el kell kezdenem fejleszteni egy webes alkalmazást, amelyben sajnos (a főnököm és az ügyfél kívánsága) fastruktúrában kell megjelenítenem adatokat és a fa bármelyik elemére kattintva le kell kérdeznem az elem adatait. Természetesen a fának ki/be csukhatónak kell lennie. Olvastam a hierarchikus adatkezelésről szóló cikkeket, de nem lettem okosabb. Jóval bonyolultabb (már létező) adatbázisból kell fát generálni. Megpróbáltam a főnökömet lebeszélni róla, de nem sikerült :(
Szóval "ascii art"-ban nagyjából ilyet kellene csinálni:

Cég 1
|_Pénzügy
| |_Jóska Pista
| |_Gipsz Jakab
| |_Feladat 1
|_Eszközök
|_Eszköz 1
Cég 2
Cég 3
Cég 4

S.i.t.

Szóval a példánál maradva, ha rákattintok Cég 1-re, akkor az alsó keretben egy táblázatban kilistázódnak Cég 1 adatai, de közben a cég 1 alatti fa ki is nyílik. Tehát nem csak a levelekre kattintva jelennek meg adatok, hanem a fában feljebb lévő ágak adatait is le kell kérdezni, attól függően, hogy éppen melyiken navigál. Tehát feljebb nyitás vagy csukás+lekérdezés, leveleken csak lekérdezés.
Találtam a neten egy-kettő kész treemenu, treeview JS alkalmazást, csak baromira nem sikerül őket ilyen szinten testreszabni. Sajnos egy ilyen használata, pláne készítése mély JavaScript ismereteket feltételez, ami nekem nincs:( Természetesen adatokkal PHP-vel lenne feltöltve, PostgreSQL-ből.
Kérdéseim:
- Csinált már valaki ilyet és honnan merített ihletet?
- Van-e ilyen kész JS komponens, ami gyakorlatilag csak megkapja az SQL-ből lekérdezett rekordokat és még azokat a aparamétereket, hoyg hoygan generálja le a fát ezekből?

Hálás köszönettel: Vales_73
 
1

NestedSet/TreeMenu

Török Gábor · 2005. Jún. 30. (Cs), 14.01
Miért nem voltak jók a tárgyban jelölt csomagok? Szerintem nagyon jól testre szabhatók. Mondd meddig jutottál el.

--
slink
http://20y.hu/
2

Miért kell JS?

Poetro · 2005. Jún. 30. (Cs), 14.30
Miért kell a JS, ha így is úgyis megjelenítesz minden klikk esetén adatokat?
Ezeket megnézted?
HTML_TreeMenu, Tree
--------
Poetro
3

Sajnos kell

Vales_73 · 2005. Jún. 30. (Cs), 15.04
Azért kell javascript (gondolom), mert a júzer GUI szintű funkcionalitást AKAR. Nem elég fában megjeleníteni az adatokat, hanem kinyitni/becsukni is tudni kell, meg egyéb kényességek... Eseményeket is kell kezelni sajnos.
Ettől függetlenül azért megnézem majd azt a PEAR Tree csomagot.

Vales_73

"A tiltakozás az újdonság négyzetével arányos." (Egely György)
4

Példa

Török Gábor · 2005. Jún. 30. (Cs), 15.09
Itt találsz a csatolt fájlokban példaprogramot, azt ha átfaragod, mennie kell. Jó lenne pontosan tudni, hogy hol akadsz el, mi nem működik.

--
slink
http://20y.hu/
6

Tehát

Vales_73 · 2005. Júl. 1. (P), 13.04
Itt a legnagyobb baj az, hogy már kapok egy KÉSZ adatbázis sémát, mivel az adatbázis már televan adatokkal, sokezer rekorddal. A hierarchikus adatkezelésről szóló cikksorozatban is és a Slink féle DB_NestedSet PHP Konfos előadásban is arról van szó, hogy a külön táblákban tartjuk nyilván a szülő és gyermek elemeket, illetve eleve úgy tervezzük meg az adatbázist, hoyg alkalmazkodjon a fastruktúrájú megjelenítéshez, etc.
Nálam sajnos a helyzet az, hogy a már meglévő adatokból KELL ilyen hierarchikus böngészőt generálni, ráadásul még az adatbázis sémát sem kaptam meg, majd csak akkor, ha egy demo jellegű dolgot készítek, amit be lehet mutatni a sápadtarcú ügyfeleknek. Tehát egy szép új treeview-et elkészíteni még OK, de a kész adatbázisra ráeröltetni egy ilyen fa struktúrát... Hát attól félek nagyon. Ámbár az eredeti alkamazást egy Lotus Notes/Domino szolgálja ki, ahol egy JAVA Appletben jelenik meg ez a fastruktúra, ezért halványan abban bízom, hogy az adatbázis úgy lett megtervezve, hogy támogassa ezt. De akkor is, a feladat az, hogy egy létező adatbázis rekordjait kell megjeleníteni hierarchikusan, nicns módom adatbázist tervezni (újat), mert oda átmigrálni a tízezres nagyságú rekordot hát Isten Tudja... Szóval ezért szívás és ezért kértem ilyen kétségbeesetten segítséget Tőletek!

"A tiltakozás az újdonság négyzetével arányos." (Egely György)
7

Virtuális táblák

Török Gábor · 2005. Júl. 1. (P), 13.35
Nézettáblat készíthetsz magadnak, ha az segít, de ha PHP-ben írsz egy algoritmust, ami a megfelelő tömb struktúrára alakítja az adatbázisból kinyert adatokat, akkor a TreeMenu képes lesz vele együttműködni. (Ha a csatolt példaprogrammal készítesz egy apró adatbázist, majd a nyers adatot kiíratod, akkor könnyen lekoppinthatod azt a tömb szerkezetet, amit a TreeMenu inputként vár.)

De ha magadnak írsz egy NestedSet jellegű wrappert az adatbázisod fölé, akkor utána még könyebben tudod majd ötvözni a TreeMenuvel.

Talán Poetro írásai is segítenek Neked:


--
slink
http://20y.hu/
8

A jó megközelítés

Poetro · 2005. Júl. 1. (P), 15.02
Az én megközelítésem a következő lenne.
Megvan a hatalmas adathalmod. Csinálsz mellé egy fastruktúrát, amit egy másik táblában tárolsz, amiben egyedül az adathalmod azonosítóit tárolod el pluszban a faszerkezeten kívül(esetleg ha több típusú adatod is van, akkor még a típusát). Ilyen módon, akármit is tárolsz az adathalmodban, mindig meg tudod mutatni, hogy az éppen hol helyezkedik el a fastruktúrában, egyszerűen egy JOIN műveletet kell végrehajtanod a fastruktúra lekérdezésekor.
Szerintem ezen mindenképpen érdemes elindulni, akár az én megoldásomat, akár másik megoldásokat használsz a fastruktúra leképzésére. A demót pedig ilyenformán meg tudod csinálni, és később mikor már meglesznek az adataid, szépen alkalmazni azokra,persze a tényleges fastruktúrát újra kell építeni az adathalom alapján, de remélhetőleg ez automatizálható valahogy (akár érdemes egy kis PHP kódot összerittyenteni az automatizálás végett ha direktben SQL-ből nem menne a struktúra létrehozása a kapott adatok alapján).
--------
Poetro
9

Igen, ez jó

Vales_73 · 2005. Júl. 2. (Szo), 09.38
Valami hasonlón gondolkodtam, akkor úgy kell megoldani, hogy az adatok karbantartása mellett a fa karbantartása is megtörténjen. Tehát a felvisznek egy űrlapon egy új rekordot, akkor annak be kell kerülni a fába is, mégpedig arra a szintre (ág vagy levél), ahová tartozik. Máskülönben akkor jön a panasz, hogy nem látják a bejelentést a böngészőben, amit az imént vitt fel "Jucika". Na mind1 jövő héten produkáni kell valamit, amíg nyaral a menedzsment :)
Hálásan Köszönöm az eddigieket is!

"A tiltakozás az újdonság négyzetével arányos." (Egely György)
10

PEAR DB_NestedSet+HTML_TreeMenu: Frame-es megjelenítést hogyan

Vales_73 · 2005. Júl. 5. (K), 10.21
Slink tanácsára kipróbáltam a DB_NestedSet+HTML_TreeMenu kombinációt, a PHP konfos elődásvázlat alapján. Ez már működne is, és szerintem jó is lenne, de arra még nem sikerült rájönnöm, hogy frameset-es oldalakon a target-et HOGYAN kell megani. A felület három keretre lenne osztva, sajnos ehhez az elrendezéshez szintén az ügyfél és a főnököm ragaszkodik, ezért kell így megcsinálni. Az alábbi ákombákom ábra szemléltetné, hogy milyennek kell lennie a felületnek:

Tehát a menü is nestedset-tel készülne - terveim szerint - és a menüelemek target-je pedig a treeview_frame. Ott megjelenne az adatokból generált fa és a fa ágaira kattintva a viewframe-ben táblázatosan meg kell jelennie az adott ág vagy levél által reprezentált rekordnak.
Szóval arra még nem sikerült rájönnöm, hogy target frame-et hogyan kell a NestedSet-nek megadni, pedig ez emiatt életbevágó lenne!
Sajnos az alábbi módon ez nem megy:

$dataset = array(
  'name' => 'PéldaLista_1',
  'url'  => 'lista_1.php target="viewframe"'
);
$nestedSet->createSubNode($parent,$dataset);
Sajnos a lista_1.php után a target nem frame célnak helyettesítődik be :(
Erre tud valaki 5leteket, aki használt/használ ilyet? Ha beválna, az egész projektet lehetne erre építeni, mert a DB_NestedSet egy kellemes kis eszközkészlet és jó esélyjel a határidőből sem futnék ki.

"A tiltakozás az újdonság négyzetével arányos." (Egely György)
11

Próba?

Poetro · 2005. Júl. 5. (K), 12.18
Nem tudom pontosan milyen kimenetet produkál a progi, de én a következőt tippelném megoldásnak:
$dataset = array(
  'name' => 'PéldaLista_1',
  'url'  => 'lista_1.php" target="viewframe'
);

Ez azt feltételezi, hogy a kimenet a következőképpen generálódik:
<a href="/$dataset['url']">$dataset['name']</a>
--------
Poetro
13

Úgytűnik ez jó lesz :)

Vales_73 · 2005. Júl. 7. (Cs), 09.58
Poetro THX!
A base target-re mintha tojna magasról vmiért, pedig rendes HTML outputot rakok össze (remélem). Ellenben ez működőképesnek tűnik. Paramétereket is át lehet lökni GET-tel, etc.
Ha ezt sikerül rendesen megcsinálni mostmár, akkor Zsír Király lesz!

"A tiltakozás az újdonság négyzetével arányos." (Egely György)
12

base target

Török Gábor · 2005. Júl. 5. (K), 13.39
Javaslom a base target megoldást, azzal megkerülöd ezt a problémát. A te esetedben például:

<base target="viewframe" />
Ezt az adott keret fejrészében kell elhelyezned.

--
slink
http://20y.hu/
5

Hierarchikus adatkezelés frissítés

Poetro · 2005. Jún. 30. (Cs), 16.11
Most hogy újra előkerült, kicsit hozzáírtam a cikkemhez. Lehet így már kicsit szebb a megjelenítés megvalósítása, egyszerűbben és átláthatóbban lehet módosítani, és ha kell jobban lehet majd JavaScript-el és CSS-el effektezni.
--------
Poetro