Táblázat generálása PHP tömbből
sziasztok!
Arra gondoltam tömbből táblázatot generáló függvényt készítek.az adatszerkezet a követező:minden tábla adatai 3 részre oszlanak fejléc, torzsrész, lábléc. Ezek mindegyike sorokat tartalmaz, azok pedig mezőket. a rugalmasság miatt a fejlécrész és az adatrész is több sornyi lehet.
Most ugrik a medve a vízbe:
A $parameter tomb megfeletethető az adatok tömbnek, arra szolgál hogy <table $param>, <tr $param>, <td $param> -szerűen bármilyen paraméterrel el lehessen látni bármelyik sort, bármelyik cellát. Ez opcionális lenne, ahol a megfeleltetendő elem nem létezik a $parameter tömbben, ott az adott rész nem lesz paraméterezve ilyenkor például örökölheti a "fölötte" lévők stílusbeállításait stb.
Az a célom, hogy ilyeneket mondhassak:na most jön a huncutság:
Tudna még egy olyan apróságot a fv, hogyha az tömbkulcs nem numerikus érték lenne hanem egy ilyen formátumú adat "3#" akkor ugy értelmezné, hogy minden 3. sorra vonatkozik a formázás.egy ilyen fv-el nagyjából a világ összes táblázatát elő tudnám állítani.
Első kérdés: hogyan lehet egy tömböt kulcsok szerint úgy rendezni, hogy a numerikus értékek legyen elöl 0-tól indulva, a '6#' jellegű stringek pedig a végén sorakozzanak?
Második kérdés: Nem hülyeség ez az egész ötlet úgy ahogy van? Nem bonyolítom túl? Hogyan csináljam helyette?
Köszi:)
■ Arra gondoltam tömbből táblázatot generáló függvényt készítek.
genHtmlTable($data,$parameter)
$data =
array ('headerrows'=>array("nyelv","idén","tavaly"),
'datarows'=> array("PHP", "12%", "20%"),
array("PERL", "30%", "80%"),
array(".NET", "22%", "40%"),
array("JS", "42%", "30%"),
array("JSP", "23%", "60%")),
'footerrows'=>array()
);
$parameter =
array ('table'=>'class="commontable"',
'headerrows'=>'style="BACKGROUND:#AAA7AB;COLOR:#222303;"',
'datarows'=> array('style="BACKGROUND:#DCC7AB;COLOR:#5B0303;"',
'style="BACKGROUND:#AAC1AB;COLOR:#AB0203;"',
'style="BACKGROUND:#DAC2AB;COLOR:#110303;"'
),
'2#'=>'style="BACKGROUND:#4C474B;COLOR:#345303;"',
'4#'=>'style="BACKGROUND:#33216B;COLOR:#770303;"',
array('style="BACKGROUND:#AA1235;COLOR:#4B0303;"',
'style="BACKGROUND:#1AC1AB;COLOR:#AB0203;"',
'style="BACKGROUND:#DAC2AB;COLOR:#110303;"'
),
'style="BACKGROUND:#DCC7AB;COLOR:#5B0303;"'
'footerrows'=>array()
);
)
Most ugrik a medve a vízbe:
A $parameter tomb megfeletethető az adatok tömbnek, arra szolgál hogy <table $param>, <tr $param>, <td $param> -szerűen bármilyen paraméterrel el lehessen látni bármelyik sort, bármelyik cellát. Ez opcionális lenne, ahol a megfeleltetendő elem nem létezik a $parameter tömbben, ott az adott rész nem lesz paraméterezve ilyenkor például örökölheti a "fölötte" lévők stílusbeállításait stb.
Az a célom, hogy ilyeneket mondhassak:
$parameter['datarows'][4][7]='border:#FFFFFF 1px solid;';
// ennek hatására a negyedik sor 7. cellája keretet kap. az adott <td> -t
// paraméterezi
$parameter['datarows'][7]='style="border:#FFFFFF 1px solid;"';
// a 7. sor kap keretet (figyeli a fv, hogy nem tomb, hanem string van-e)
// ilyenkor a sor <tr> tag-ébe ez az infó kerülne, ez határozná meg a sor / // egyedi tulajdonságait
$parameter['datarows'][19]['tr']='style="border:#FFFFFF 1px solid;"';
$parameter['datarows'][19][3]='style="background:#FF0000;"';
// ez a két sora 19. sort allitja keretesre és 3. cellát még be is szinezi
Tudna még egy olyan apróságot a fv, hogyha az tömbkulcs nem numerikus érték lenne hanem egy ilyen formátumú adat "3#" akkor ugy értelmezné, hogy minden 3. sorra vonatkozik a formázás.
$parameter['datarows']['2#']['tr']='style="background:#FF0000;"';
$parameter['datarows']['4#']['tr']='style="background:#00FF00;"';
// minden második sor piros színű, minden 4. sor sárga
Első kérdés: hogyan lehet egy tömböt kulcsok szerint úgy rendezni, hogy a numerikus értékek legyen elöl 0-tól indulva, a '6#' jellegű stringek pedig a végén sorakozzanak?
Második kérdés: Nem hülyeség ez az egész ötlet úgy ahogy van? Nem bonyolítom túl? Hogyan csináljam helyette?
Köszi:)
Rendezés
azért került a végére...
"6#" az simán 6-ossá alakul tipuskonverziokor. úgy szinez a fv-em hogy az aktuális sorszámmal maradékos osztást végez.
HTML vs. PHP vs. CSS
a ksort alkalmas kulcs szerinti rendezésre
második kérdés:
Nos... Biztos jó, de nem értem, miért is.
Mi az előnye, hogy PHP-ból megmondod, hogy egy táblázat hogy nézzen ki?
SzVSz a PHP-val gyártasz egy táblázatot HTML-ben, a kinézetét/felépítését/struktúráját úgyis tudod előre, így könnyen megformázhatod CSS-sel is. Ráadásul azt pont ilyenre találták ki...
A mostanság ajánlott technika: szerveroldalon (PHPval) adatokat állítasz elő, a sablonkezelőddel (SMARTY) előállítod az adatokból a kívánt kimenetet, és CSS-sel megformázod a kinézetet. (persze mindenhol lehetnek kivételek, én pl. a formgenerátoromban nem használok smartyt, de pl. a formázás itt is CSS-re épít)
Én egy ideje nem csináltam HTML-tábla gyártást PHPból, inkább smarty-nak adtam át az adatokat és ott beleraktam a megfelelő helyre.
Smarty-val szépen lehet pl. minden X-edik sort színezni (cycle, ill cycle+assign)
Ha szinte minden cellát más-más formázással szeretnél, akkor lehet nekik #cella_12diksor_15dikcella formátumban id-t adni, de ha csak néhánynak, akkor esetleg egy tömbben tárolhatod, hogy hanyadik sor, hanyadik cellájának szertnél, esetleg milyen) id-t adni, szintén smarty-ból kinyomhatod. Vagy akár beleírathatod a style-t is, ha úgy tartja kedved.
Így elsőre ennyi :)
formázni php-ből...
Például bizonyos értékek esetén máshogy kell megjelennie stb.
CSS-t használok a háttérben, de például meg szeretném mondani, hogy melyik class-ba tartozzon az adott tábla. Mindeképpen kell php, ahhoz is amit mondtál... ott is csak tömbbe rakom bele az infót.
Azt hizsem más szemlélettel közelitettem :)
Smarty-t csak kicsit ismerem. Iyeneket lehet vele csinálni?? A táblázatot is ő generálja? hogyan működik?
ksort
xml + xsl + css
minta itt : http://weblabor.hu/blog/20060524/ajax-fejlesztes#comment-28201
ill http://www.w3schools.com/xsl/default.asp
php -val lehet az xml-t generálgatni, rendezni ha erre van szükség ill. az xsl-t is természetesen, ekkor a táblakialakítás válik dinamikussá, css-el meg az egész szinezhető :)
üdv t
xsl-ben nem vagyok rutinos