ugrás a tartalomhoz

Objektum orientált HTML generálás?

H.Z. v2 · 2011. Júl. 16. (Szo), 12.55
Elkövettem egy ilyet:

<?php

abstract class HTMLtag {

    protected $content=array();
    protected $options=NULL;

    function __construct($content=NULL,$opt=NULL){
        $this->initialize();
        if(isset($content)){ $this->add($content); }
        if(isset($opt)){ $this->options=$opt; }
    }

    function add($content){
        $this->content[]=$content;
    }

    function initialize(){
        $this->content=array();
    }

    function show(){
        echo $this->tagOpen();
        foreach($this->content as $v){
            if($v instanceof HTMLtag){ $v->show(); }
            else { echo $v; }
        }
        echo $this->tagClose();
    }

    protected function tagOpen(){
        return '<'.get_class($this).' '.$this->options.'>';
    }

    protected function tagClose(){
        return '</'.get_class($this).'>';
    }
}

class HTML1tag extends HTMLtag {
    protected function tagOpen(){
        return '<'.get_class($this).' '.$this->options.' />';
    }
    
    protected function tagClose(){
        return "";
    }

class Div extends HTMLtag {
}

class Body extends HTMLtag {
    
}

class BR extends HTML1tag{
    
}
A cél kb. az lenne, hogy egy objektumként kezelem a HTML oldalakat, amelyek a HTML Tag-eknek megfelelő objektumokból épülnek fel. (A HTML1tag a <br/> jellegű tag-ek miatt tűnt szükségesnek)

Két kérdés ezzel kapcsolatban:
1. A kódban látható-e valami, amivel felrúgok/megsértek valamiféle elvet?
2. Az tiszta, hogy ismét a kerék feltalálásának esetével állunk szemközt, de az nem, hogy ilyesmit csak keretrendszerben valósítottak meg vagy az alap PHP is tartalmaz ilyet, csak nem találom?

+1: gyanítom, ez messze nem az optimális módszer HTML oldalak generálásához, de most nem is ez a cél. :-)

ui: valaki szóljon rám, ha már fárasztó vagyok! Ezt - kivételesen - komolyan kérem!
 
1

2. kérdésre

gabesz666 · 2011. Júl. 16. (Szo), 13.51
A HTML is egy XML-ből származó leíró nyelv, így csak egy XML manipuláló osztályt kell találni, php-ban van (pár) ilyen: http://www.php.net/manual/en/refs.xml.php
2

Eddig eljutottam, de XML-ből

H.Z. v2 · 2011. Júl. 16. (Szo), 14.07
Eddig eljutottam, de XML-ből csak parsert találtam, ami ismerősnek tűnt. Illetve... most, hogy újra megnéztem, a SimpleXML talán. A többivel egyelőre nem tudok mit kezdeni. Lehet, hogy alaposabban át kéne olvasni őket.
4

SimpleXML

gabesz666 · 2011. Júl. 16. (Szo), 16.29
A SimpleXML-ben ott van minden függvény amire szükséged lehet, de írok egy példakódot, az gondolom többet segít:

<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<html></html>
XML;

$html = new SimpleXMLElement($xmlstr);

$head = $html->addChild('head');

$script = $head->addChild('script');
$script->addAttribute('type', 'text/javascript');
$script->addAttribute('src', 'myscript.js');

$body = $html->addChild('body');

$div = $body->addChild('div', 'Ez itt egy DIV!');


echo $html->asXML();

?>
A legvégén pedig csak kiszeded az első sorból az XML deklarációt.
6

Köszi! (tudtam én, hogy már

H.Z. v2 · 2011. Júl. 16. (Szo), 16.41
Köszi!
(tudtam én, hogy már megint a kereket találom felfele... :-) )
Az addAttribute működése külön tetszik. Közben kicsit alakítgattam a fenti kódot és nagyjából ugyanezt csináltam meg, csak nem jutott eszembe az attribute szó és optiont írtam helyette.
----
Sok éve, perlből próbáltam használni a SimpleXML-t, csak ellenkező irányban, parse-olásra, ha jól emlékszem. Végül kihagytam, mert valami hiányzott belőle, a teljes XML feldolgozó modult meg képtelen voltam megérteni.
3

Ennek van értelme, csak nem

inf · 2011. Júl. 16. (Szo), 15.51
Ennek van értelme, csak nem így kell. Nem érdemes node-okat építeni, helyette inkább funkcionális egységekre kellene felosztani a dokumentumot.
pl vannak struktúrális részei az oldalnak: layout-ok, meg vannak olyanok is, amik a szerverrel kommunikálnak: form, link, stb... ilyen logika szerint kellene osztályokat létrehoznod...
5

Ez történt... Kb. két

H.Z. v2 · 2011. Júl. 16. (Szo), 16.29
Ez történt...
Kb. két Div-ből és egy submit gombból áll a megjelenítendő lap. :-)

Egy DIV, amiben felsorolom az adatbázisban elérhető táblákat és egy másik, amiben az előbbi listából kiválasztott tábla oszlopainak attribútumait sorolom fel.
-------------------------
Azt viszont nem biztos, hogy a későbbiekben a nagyobb oldalakat képes leszek felbontani ennek megfelelően...
7

Azt viszont nem biztos, hogy

phtamas · 2011. Júl. 16. (Szo), 19.15
Azt viszont nem biztos, hogy a későbbiekben a nagyobb oldalakat képes leszek felbontani ennek megfelelően...

Az objektum-orientált HTML generálás olyan előnyökkel kecsegtetett, amelyek miatt mi is belevágtunk pár évvel ezelőtt. SimpleXML helyett mi kiterjesztett DOM osztályokat használtunk erre a célra. Két projektet csináltunk végig így, az egyiket épp most írom újra, hagyományos template engine használatával...
Szóval nem javaslom. Rengeteg olyan apró buktatóval találkoztunk menet közben, meg később a karbantartás során, amik miatt összességében nem érte meg.
Egy jó template engine még mindig a legjobb (legkevésbé rossz) megoldás.
8

Mik voltak a buktatói?

Joó Ádám · 2011. Júl. 16. (Szo), 19.25
Mik voltak a buktatói?
9

- A sitebuilder egy

phtamas · 2011. Júl. 16. (Szo), 19.58
- A sitebuilder egy karakternyit sem tudott módosítani a generált HTML kódon programozó támogatása nékül, ami nagyon nehézkessé tette a munkát.
- Rengeteg kódot kellett írni pár sor HTML generálásához, még úgy is, hogy kiterjesztettem a DOM osztályokat, és telepakoltam őket "convenience" metódusokkal, helpereket csináltam, stb.
- Egy HTML template struktúráját első ránézésre átlátod, az OO kódot nem igazán, még akkor sem, ha jól olvasható és dokumentált kódot írsz.
- Egy olyan módosítás ami egy HTML template esetén sima kivágás/beillesztés lenne az nálunk 25 perc kódolás/tesztelés volt.
- Elég sokat kínlódtunk a PHP verzió-specifikus DOM bugokkal és hiányosságokkal.
Az összes konkrét probléma ami adódott, nagyjából a fentiekre vezethető vissza.
11

Szóval menjek vissza oda,

H.Z. v2 · 2011. Júl. 16. (Szo), 20.10
Szóval menjek vissza oda, ahonnan eredetileg ide tévedtem?
Már amennyire az template-nek nevezhető, hogy néhány előre megírt HTML-t rántok be request-tel a PHP kód közepén...
Köszi a tippet.
12

Már amennyire az template-nek

phtamas · 2011. Júl. 16. (Szo), 20.35
Már amennyire az template-nek nevezhető, hogy néhány előre megírt HTML-t rántok be request-tel a PHP kód közepén...

Annak nevezhető. Ugyanis a legkifinomultabb template engine-ek is pontosan ugyanezt csinálják. Csak azok tudnak pár igen hasznos extra funkciót.
13

Akkor lehet, hogy nekem

H.Z. v2 · 2011. Júl. 16. (Szo), 20.39
Akkor lehet, hogy nekem voltak túlzott elképzeléseim róluk.
(különböző blogmotorok template-jei alapján)
14

Én valami ilyesmit értek

phtamas · 2011. Júl. 16. (Szo), 20.45
Én valami ilyesmit értek template engine alatt.
10

3 éve

janoszen · 2011. Júl. 16. (Szo), 20.07
Csináltam ilyet kb. 3 éve, de az 1:1 HTML:kód nem jó ötlet. Helyette egyes komponenseket, pl. űrlapokat érdemes szabványosítani, a templatezést megeghagyni.
19

+1

inf · 2011. Júl. 17. (V), 22.37
Jaja, én is ezt írtam, én mondjuk a layout-okat hoztam fel példának.

Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add(new Button("Okay"), BorderLayout.SOUTH);
De ugyanezt le lehet tárolni XML-ben is.

<panel>
	<border-layout>
		<south>
			<button>Okay</button>
		</south>
	</border-layout>
</panel>
Aztán ha már itt tartunk, akkor akár ezt az XML-t még lehet HTML-el is vegyíteni:

<panel>
	<border-layout>
		<south>
			<button>Okay</button>
			<div class="my-container"><a href="link">link</a></div>
		</south>
	</border-layout>
</panel>
Akár XSLT-vel, akkor php kóddal meg lehet valósítani egy ilyen rendszert, csak kinek van ideje erre ?! :D (extjs, extgwt, gwt ugyanezt az elvet követi... gwt-vel érdemes foglalkozni...)
15

Fárasztó vagy! :)

_subi_ · 2011. Júl. 17. (V), 10.05
Fárasztó vagy! :)

Nem feltétlenül rossz ezzel szórakozni, ha egy másodpercig sem gondolkodsz az éles használatán. Utóbbi esetben nagyon rossz ötlet.

Ahogy janoszen írta, ő már ellőtte ezt kb. 3 éve, és mivel volt "szerencsém" ezt élesben is látni, bizton állíthatom, hogy nem annyira nyerő. :) Szerintem űrlapokat lehet értelme egy formbuilder osztállyal építeni, ahogy janoszen is írta. Ez is főleg akkor praktikus szerintem, ha ez az osztály az ellenőrzést is megoldja.
16

Na jó, akkor töröltetem magam. :D

H.Z. v2 · 2011. Júl. 17. (V), 10.19
Elég sok ellenérvet hoztatok rá, hogy meg se forduljon a fejemben az éles használat. (ha egyéb nem lett volna, phtamas megjegyzése, hogy a site builder sem tud emiatt dolgozni a programozó nélkül, akkor is elég indok lett volna ;-) )

Egyébként is csak arra volt jó, hogy ezekről legalább el tudom képzelni, hogy objektumok, hogy lehetnek szülők, leszármazottak, működik az is, hogy a szülő helyére a gyereket írva azonos működést kapok, ilyesmi... szóval csak játék, mint az élet. :-)
17

Azért annyira nem súlyos a helyzet. :)

_subi_ · 2011. Júl. 17. (V), 11.55
Azért annyira nem súlyos a helyzet. :) Mármint a törlés kapcsán.
18

Bíztam benne, hogy smiley-val

H.Z. v2 · 2011. Júl. 17. (V), 12.02
Bíztam benne, hogy smiley-val a végén nem kell komolyan venni... ;-)
20

Szóval template...

H.Z. v2 · 2011. Júl. 19. (K), 06.26
Az itt és egyéb helyeken olvasottak alapján elkezdtem összerakni valami template-féleséget, ami első körben annyit jelentett, hogy az egyetlen űrlapomat próbálom kialakítani úgy, hogy egy alapjaiban HTML kód, ahol a megjelenítendő mezőértékek helyére PHP kódot írok.
Pl.:

<form ...>
...
<label for="userid">User ID:</label>
<input id="userid" name="userid" value="<?php echo $userid-t-tartalmazo-valtozo; ?>" />
...
</form>
És itt elakadtam egy kicsit. Framework használat egyelőre kiesik, azt meghagyom arra az időre, ha már nélkülük boldogulok. De akkor merre tovább?

- Hagyjam így, csak arra figyeljek, hogy a template-ben megjelenítendő változó értéke mindig preprocesszált legyen? (tehát pl. egy htmlspecial_chars fv-n átküldve)
- Definiáljak egy konvertáló függvényt abban a .php-ben, amelyik minden egyes oldal letöltéskor elindul és echo helyett azt hívjam meg? (de akkor félre kell tennem, hogy tisztán OOP alapokra építem az oldalt)
- Felejtsem el a HTML-be írt PHP-t és a változók helyére tegyek valami placeholdert(ennek van magyar neve? :-) ), majd készítsek egy miniatűr template engine-t, ami kicseréli a a placeholdereket az odaillő változók biztonságossá konvertált értékére?
- Egyéb?

A harmadik tűnik használhatónak (feltéve, hogy nincs egy negyedik) még akkor is, ha most csak egy pici, egy-két lapból álló oldalt készítek.
Itt már érdemes lehet valami osztály-féleségben gondolkodni? (ha elkezdem alaposan objektumokra bontani a dolgot, akkor megint ott tartok, ahol e téma megnyitásakor: még a HTML tag-ek is egy-egy önálló objektumot képviselnének :-) )
Végeredményben csak végig kellene menni a beolvasott HTML-en és behelyettesíteni a változók értékét a megfelelő helyekre. Hm. Azért annyira ez sem triviális... Ha biztosra akarok menni, akkor valahol, a template-től független helyen kellene tárolni, hogy melyik változót kinek a helyére kell írni. Pl. {valt} a template-ben azt jelenti, hogy a $valt értékét kell beraknom. Ezt ugye megtehetném automatizálva is, a {...}-t $...-ra cserélve, de akkor bármi szemét kerül a template-be, az megjelenhet az oldalon is. (pl. a minta átszerkesztésével akár egy változóban tárolt jelszót is megjeleníthetne, amit ugye nem szeretnék - és ez megint jó példa rá, hogy mennyire el tudok tévedni az eredeti témától... hiszen itt csak én szerkeszthetem a template-et is :-) )
Hát nem egyszerű.
21

Template vagy sablon lényege

pp · 2011. Júl. 19. (K), 09.00
Template vagy sablon lényege a működési és a megjelenítési logika szétválasztása. Űrlapoknál ez picit össze van gubancolódva eleve, ezért is javasolják talán azt többen is itt fent, és teszem én is, hogy erre külön megoldást/generálást érdemes választani.

A lényeg, hogy egy űrlapelem önmagában nem csak megjelenítési, hanem nagymértékű működési logikát befolyásoló dolgot is magában hordoz. Nem mindegy az elem neve, id-je, és azt se a sablonban kell tudni, hogy hogyan kell az értéket kiíratni. Lásd select, checkbox stb., ahol egy új tulajdonságot kell hozzáadni az adott elemhez, vagy annak egy részéhez. (selected vagy checked)

Az meg már egy másik történet, hogy az elemet hogyan burkolod be, és hova teszed. Ez már tényleg a sablonba való.

pp
22

Ez így éhgyomorra kicsit

H.Z. v2 · 2011. Júl. 19. (K), 09.31
Ez így éhgyomorra kicsit tömény lett.
Azt látom, hogy amit hajnalban, hirtelen felindulásból írtam, az nagyjából hülyeség volt, mert egyik oldalról a lehető legprimitívebb, leggyorsabb megoldást keresem egy három szövegmezőből álló form megjelenítésére, másik oldalról egy a későbbiekben újra felhasználható programkezdeményt próbálok előállítani és a kettő együtt nem működik.

Jól értem? A sablon kb. addig tart, hogy adok egy keretet az oldalnak? Erősen elnagyolt példa: a html header+ néhány div, amelyekben meg akarom jeleníteni az egyes űrlapokat + a jelölések, hogy melyik div-ben milyen űrlapnak kell megjelenni, majd a megjelenítéskor ezeket a jelöléseket cserélem a program által előállított objektum html-lé konvertált kimenetére?

Tehát az eredeti elképzelésben szereplő placeholderek nem egy-egy változó értékét kellene, hogy jelezzék, hanem egy objektumét, ami képes html formában megjeleníteni a benne tárolt adatokat? Csak ezzel szép lassan visszajutok oda, ahonnan ez a téma indult: 1 html tag:1 objektum. Csak nem a teljes oldalon, hanem a template-ben jelölt helyeken.

----
Próbáltam nézegetni a drupal6 forrását, de ahhoz túl bonyolult volt, hogy félóra alatt felfogjam és az alapjait átültessem a saját környezetemre.
23

Nem fizikai, hanem logikai

pp · 2011. Júl. 19. (K), 10.09
Nem fizikai, hanem logikai szétválasztás van. Az űrlap elem pont egy olyan dolog ahol nehéz a szétválasztás. Nem egyértelmű, hogy mi az ami a megjelenítési logikához kötődik, és mi az ami a működésihez. Ezért általános megoldást nem lehet adni, sőt.

Az az általános megoldás ami ugyan ugyanúgy kezeli a form elemeket mint az összes többi html elemet hibás.

Az a személete ami azt mondja, hogy minden ami html az sablon/template, szintén hibás.

A sablon az csak egy eszköz ami segíti a szétválasztást és nem fogja neked szétválasztani a működési és megjelenítési logikát. (Ha ilyet lehetne megszűnne a munkánk, hisz akkor nem kéne gondolkodó ember a programozáshoz.)

pp
26

Nézd, amikor én programozni

H.Z. v2 · 2011. Júl. 19. (K), 11.20
Nézd, amikor én programozni tanultam, akkor kb. úgy nézett ki a dolog, hogy volt input, ami jöhetett rosszabb esetben lyukszalagról, lyukkártyáról, jobb esetben mágnesszalagról, nagy ritkán diszkről és volt egy output, ami vagy diszkre ment vagy szalagra vagy nyomtatóra.
Ehhez képest ezek az elméleti "apróságok" számomra elég idegenek. Az MVC mintát talán kezdem felfogni, de az
a megoldás ami ugyan ugyanúgy kezeli a form elemeket mint az összes többi html elemet hibás

már kilóg abból a körből, amit még értelmezni tudok.
Miben különböznek egy form elemei a többi html elemtől?
Amit én látok: ezekbe a user beleírhat valamit, azt elküldheti feldolgozásra. De ez nem a megjelenítést érinti, hanem az "utóéletét" a tagnek, de ott már csak a neve és a felhasználó által beleírt (vagy nem írt) tartalma a lényeges. Hogy ez épp egy HTML formból származik, az érdekel valakit? Amíg megjelenítem, addig miért ne kezelhetném ugyanúgy, mint a formon kívülieket?
Itt nekem valami kimarad(hatot)t.
Esetleg tudnád konkrét példával illusztrálni, hogy miért nem jó, ha egyformán kezelem őket?
29

Azt javaslom láss neki és

pp · 2011. Júl. 19. (K), 12.10
Azt javaslom láss neki és csináld. Kár ezekkel az elméleti fejtegetésekkel bíbelődni. Nem fogod megérteni így. Csinálni kell.

Amit én látok: ezekbe a user beleírhat valamit, azt elküldheti feldolgozásra. De ez nem a megjelenítést érinti, hanem az "utóéletét" a tagnek, de ott már csak a neve és a felhasználó által beleírt (vagy nem írt) tartalma a lényeges.


Tehát ha a megjelenítésnél - mint felesleges dolog - a name paraméterre nem figyelnek, hogy jó legyen akkor nem fogod tudni feldolgozni, hisz más néven jön vissza. Tehát ezt a paramétert nem bízhatod a nézetre, hogy az kedve szerint alakítgassa. Nem beszélve olyan elemekről, aminél a beleírt értéket (value) sem a júzer írja bele, hanem csak választja.

Mi van, ha nem üres beviteli elemeket küldesz ki, hanem olyanokat amikbe már van valami (szerkesztés) Mi van akkor, ha a felhasználó illegális adatot adott meg és ezt jelezni szeretnéd egy error class segítségével?

pp
33

Nekiláttam még tegnap

H.Z. v2 · 2011. Júl. 19. (K), 15.00
Nekiláttam még tegnap éjjel/ma hajnalban, közben jött elő a reggeli kérdés. ;-)

Tehát ha a megjelenítésnél - mint felesleges dolog - a name paraméterre nem figyelnek,


Ö... nem... ezt nem mondtam. Megjelenítésnél fontos minden paraméter. Feldolgozásnál már nem érdekel, hogy milyen betűtípussal, milyen színnel, milyen méretben jelent meg, de a neve és az értéke (nomeg a kívülről nem látható típusa, ami pl. az elfogadható értékeit korlátozza) igen.

De azt hiszem, tényleg az lesz, hogy most gondolkodás nélkül összecsapok valamit, felrakom valahova és majd annak kapcsán kérek némi segítséget
24

Dokumentum vs. alkalmazás

Max Logan · 2011. Júl. 19. (K), 10.48
Én abban látom a probléma gyökerét, hogy a HTML a nevében hordozza, hogy ő mire lett kitalálva, de mi nem erre akarjuk használni. Nem másra termett, mint dokumentumok leírására. Erre jó és ha dokumentumokat akarunk előállítani, akkor igazából nincsen különösebb gondunk. Mert létre lehet hozni egy document objektumot amihez hozzá lehet adni egy metódus segítségével bekezdéseket, stb. Hogy érdemes-e az más kérdés.

Ha alkalmazások esetén akarjuk UI-ként használni a HTML-t, akkor kezd problémás lenni a kérdéskör. Itt viszont azt hiszem nem lehet jó megoldást kitalálni. Meg kell vizsgálni, hogy az adott projectnél mik az elvárások most, mik lehetnek majd később és ez alapján döntést hozni. És vállalni, hogy a későbbiekben akár újra kell gondolni az egészet megközelítést és újraírni dolgokat.

És igen, egy blog, ahol szűrési lehetőség van, különböző megjelenítési módok, vagy ahol a felhasználó bevihet adatokat egy form segítségével az már alkalmazás, annak már semmi köze sincsen a dokumentumokhoz.
25

Nagyon jól látod a helyzetet.

Hidvégi Gábor · 2011. Júl. 19. (K), 10.54
Nagyon jól látod a helyzetet. Annyit fűznék hozzá, hogy nem dokumentum, hanem adat alapon kéne kezelni a webet.
27

Nem kötekedésképp, de tudsz

H.Z. v2 · 2011. Júl. 19. (K), 11.22
Nem kötekedésképp, de tudsz rá jobb, működő példát?
Csak eszembe jutott az a pár nap, amit a java swing-jével való ismerkedéssel töltöttem és úgy emlékszem, ott még zűrösebb egy UI-t összerakni, mint egy HTML+JS párossal kidekorált oldalon.
28

Próbáld ki a Flash Buildert.

Hidvégi Gábor · 2011. Júl. 19. (K), 11.57
30

Re

Max Logan · 2011. Júl. 19. (K), 12.12
Konkrét példát nem tudok mondani és nem is igazán van értelme keresni. Amíg HTTP-ben és browser architektúrában gondolkodunk, addig sok jóra nem lehet számítani.

Írtam már párszor: szakítani kell teljes mértékben ezzel a dokumentum jellegű megközelítéssel. Ahogyan Hidvégi Gábor is írja, az alapnak egy júl struktúrált adathalmaznak kellene lennie, amit felhasználnak az egyes rendszerek. Egy RSS olvasó pl. megkapná a nyers adathalmazt és úgy jeleníti meg, ahogyan akarja.

Az internetet, jobban mondva a WEB-et hatalmas adatforrásnak kellene tekinteni, aminek ilyen-olyan megjelenítési formái vannak, de ez nem kötött, nem browser-hez kötött. A WEB, mint olyan a HTML, CSS, HTTP és browser megközelítéssel idejétmúlt; persze szerintem.

Kár erőfeszítéseket tenni arra, hogy jobbítsuk ami van, mert új alapok kellenek. Lehet ezt cáfolni, de nézzünk már szembe azzal a ténnyel, hogy mennyi szopás van napi szinten abból, hogy olyan közegben (technológia) akarunk interaktív dolgokat létrehozni, amit közel sem erre találtak ki. Ez gáz, az pedig még nagyobb gáz, hogy a Google, MS, Apple és hasonló nagy erők nem lépnek. Van ennek pénzügyi vetülete persze, de hol van a társadalmi szerepvállalás, az igazi innováció?!

Elég belegondolni abba, hogy felesleges energia a SEO. Ha puszta adathalmazt érnének el a keresők, akkor nem kellene olyan szintű SEO varázslat, hogy megmondjuk a keresőnek, hogy mi a navigáció és azt ne értelmezze tartalomnak. Neki csak adatok kellenek. Egy RSS olvasónak is, a felhasználónak szánt felületre kell nav megoldás.
31

Félreértesz, nem akarok én

H.Z. v2 · 2011. Júl. 19. (K), 12.22
Félreértesz, nem akarok én semmit cáfolni, csak kíváncsi lennék, hogy szerinted milyen lenne az a "jobb".

Nem arra vonatkozott a kérésem, hogy "ne fikázd, ha nem tudsz jobbat", pusztán érdekelne, hogy a jelenlegi eszközök közt van-e olyan, ami szóba jöhetne szerinted/szerintetek utódként.
32

Re

Max Logan · 2011. Júl. 19. (K), 12.41
Nos, nem tudom, hogy jelenleg milyen eszközök vannak, ami esetleg bevethető lenne élesben.

De azt hiszem első körben fel kellene építeni a WEB alapját, az adatalapú elérést, majd ha ez már elég robosztus, akkor kellene azon elgondolkodni, hogy milyen formában legyenek megoldva a felületek, melyen megjelennek a tartalmak.

Azt hiszem nem egyfajta megjelenítési módban kellene gondolkodni, főleg nem browser megközelítésben (azaz el kell felejteni az oda vissza lapozgatást, mert ez a WEB dokumentum jellegéből fakad). Alkalmazáslogikában kell gondolkodni, interaktív felületekben.

Azt hiszem nem véletlenül írnak egyre többen natív iPhone alkalmazásokat weboldalak helyett. Aki látott már jól kidolgozott iOS app-ot, az tudja, hogy ég és föld a weblap és a natív alkalmazás élvezeti értéke között a különbség.

Tehát én úgy gondolom, hogy nem kell első körben a meglévő technológiákkal foglalkozni. Az alapokat kell lefektetni, megbeszélni, hogy mit is akarunk web alatt érteni és majd ebből következően beszélgetni a vizuális technológiákról. De csak azután, hogy készen van az tiszta adatelérési megoldás, melyet tetszőleges rendszer elérhet és feldolgozhatja a valós adathalmazt, ami az egész web alapját képezi.
34

Még mindig itt tartok...

H.Z. v2 · 2011. Júl. 25. (H), 16.40
Egy űrlap megjelenítését és feldolgozását próbálom magamban végigjátszani, de nem tudom eldönteni, hogy milyen módszert kövessek.
A template feladata megmondani, hogy milyen mezőket akarok megjeleníteni rajta és az űrlapot kezelő osztálynak kell ehhez igazodnia? Vagy a template dolga csak annyi, hogy megmondja az űrlap feldolgozójának, hogy ha van x nevű eleme, azt hová tegye?

Nekem, mint a program írójának az lenne a könnyebb megoldás, ha a program döntené el, mit akar megjeleníteni. Kívülről nézve (szem előtt tartva, hogy jobb helyeken a felület kialakítása nem a programozó dolga), a site builderre kellene hagyni a mezők kiválasztását is. Igaz, ez kicsit messzire vezet. És itt elakadtam...

És mi a helyzet az egyes mezőkkel? OK, hogy a minden HTML tag egy objektum, nem nyerő. Ettől még a formok egyes input mezői lehetnek objektumok? Jó az, ha egy adott mező megjelenítéséről, ellenőrzéséről, esetleg feldolgozásáról egyetlen objektum gondoskodik? Ennek előnye, hogy egy mezővel csak egy helyen kell foglalkozni. Hátránya, hogy nem különítem el a megjelenítést és a feldolgozást.
Vagy legyen a mezőnek egy objektuma, ami megjeleníti a tartalmát és egy másik, ami a form elküldése után a feldolgozó programban jön létre, amivel gyakorlatilag felcserélem az előző megoldás előnyeit és hátrányait. (már amit én látok belőlük)

Van ezekre valami "megkötés"/előírás/szabvány/ajánlás/stb. ?
35

Kombinálni

Poetro · 2011. Júl. 25. (H), 16.50
Azt is lehet, hogy kombinálod a kettőt. Azaz tegyük fel, hogy van egy fieldset, és azt rakod valahova, de a benne levő mezők sorrendjét nem a template, hanem az űrlapkezelő határozza meg. De természetesen mindet egyesével is kirakhatod. Mondjuk:
<div class="fieldset">
<?php echo $fieldset1->render(); ?>
</div>
<div class="fieldset">
<?php echo $fieldset2->renderHeader(); ?>
<div class="myfield"><?php echo $fieldset2->renderField('field1')?></div>
<?php echo $fieldset2->renderFields(); ?>
<?php echo $fieldset2->renderFooter(); ?>
</div>
37

Magyarán erre nem nagyon van

H.Z. v2 · 2011. Júl. 26. (K), 12.14
Magyarán erre nem nagyon van semmiféle módszertan/szabály/ajánlás/etc, ha jól értelek. Köszi.
36

Én azt néztem, hogy a mezőket

inf · 2011. Júl. 25. (H), 21.38
Én azt néztem, hogy a mezőket viszonylag egyszerűen lehet csoportosítani. Indulj ki abból, hogy milyen adatot vársz. Van szöveges adat, egér koordináták, fájl feltöltés, boolean (checkbox) és listáról történő választás. Szóval összesen 5 féle mező létezik az átküldött adat szempontjából. Ezeket nevezhetjük modelnek. Ezekhez aztán többféle view tartozhat, pl a listáról választásnál lehet select vagy radio, a szövegesnél lehet text, password, textarea, hidden, stb... A validáláshoz csak a modelre van szükség, a viewra nincsen. Szóval első körben az űrlapnál minden mezőt el kell nevezni, megmondani a típusát és hogy milyen szabályok vonatkoznak rá, utána meg egy sablonnal meg lehet adni, hogy milyen a view (a html űrlap), ami a modelhez tartozik.
38

A validáláshoz csak a modelre

H.Z. v2 · 2011. Júl. 26. (K), 12.22
A validáláshoz csak a modelre van szükség, a viewra nincsen.

Eddig eljutottam, de épp azon problémázok (bár már nem annyira :-)), hogy legyen feleslegesen ott az osztályban a nem használt opció is, vagy inkább szedjem szét két külön osztályra és egyik a model/control, a másik a view csoportba kerüljön.
De épp ma jutottam el arra a pontra, hogy a fene se fog egyelőre szabványokkal és ajánlásokkal foglalkozni, örüljek, ha már lesz valami működő programom, majd utána megnézem ebből a szempontból is.
39

kódszervezés

_subi_ · 2011. Júl. 26. (K), 18.09
Ha jól értem, az a problémád, miként szervezd a kódot. A megjelenítést természetesen különítsd el a logikától, már csak azért is, mert igen praktikus, ha különböző sablonokat tudsz használni az űrlapépítő osztályodhoz.

Én úgy csináltam (leegyszerűsítve), hogy van egy külön validator osztályom és egy külön formBuilder osztályom, mert nem rossz, ha a formBuilder nélkül is lehet adatokat ellenőrizni. Maga a formBuilder osztály meglehetősen rugalmas, többféle sablont, view-t is tud használni, gyakorlatilag a sablon - ha eltér az alaptól - külön is megadható neki. Valamint lehet +html-t hozzáfűzni az egyes mezőkhöz (pl. súgó tooltip-eket), de akár egyedileg is meg lehet jeleníteni a mezőket, ha a helyzet úgy kívánja.

Ami a sorrendet illeti, jól látod, először működjön, utána ráérsz csiszolni. Nem tudom ezek mennyire hasznosak a számodra, remélem azért valamennyire igen. :)