ugrás a tartalomhoz

DOM tree építés + DOM onclick feltöltése "on the fly" javascript-tel

carrizu · 2008. Május. 26. (H), 13.30
Helló GURUK!

Légyszi ne kövezzetek meg, ugyanis total kezdő vagyok és első weboldalamat készíteném!!
Ezek ellenére beletenyereltem pár számomra durva dologba: AJAX-Javascript-CSS-DOM-CrossBrowser-XHTML...
Szóval ameddig eljutottam az megtalálható itt:
http://www.aqua.freesite.hu
Vagyis még csak az index.html-t mondanám majdnem késznek!
Sok elvárásnak kéne, hogy megfeleljen az oldal, többek között "kereső barát"-nak kellene lennie!
Az összevadászott információk alapján és az AJAX-os megkötéseket figyelembe véve minden "tudásomat" belesűrítettem a
http://www.aqua.freesite.hu/test.html
http://www.aqua.freesite.hu/data/gacsit.js
file-okba.
Amit szeretnék elérni, hogy amennyiben az index.html menüjéből hívódik meg valamelyik html file, akkor az AJAX funkció a "loadin" div-be betöltse azt, keret nélkül!!!
(Ez gyakorlatilag működik)
De majd ha élesben lesz az oldal és a gugli találati oldalán a "harmadik:-)" helyen szerepel mondjuk a futestechnika.html és rákattintanak,
akkor "onload" a gacsit.js szépen építse köré az index.html-nek megfelelő DOM fát + csapja hozzá a futestechnika.html-ben fizikailag is jelen lévő
valós tartalmat (<div id = "real">) a dinamikusan fölépített fában lévő "loadin" div-hez.
("Nagyjából" ez is megvan)

Ahol többek között elakadtam az az egyes menüpontok onclick AJAX funkciójának hozzáadása javascript-tel a DOM-hoz !!!!
Valamint az index.html-nél ie5-ben is működő css menü almenüjeinek hiánya a dinamikusan fölépített esetben. (ie7 gond nélkül földobja az almenuket, biztosan a csshover.htc-vel lehet valami)

Azért fordulok hozzátok, mert igyekeztem a lehető legtöbb infót begyűjteni minden lehetséges helyről, de nem tudok tovább lépni.
Olvastam a javascript keretrendszerekről is, de ahhoz még sokat kell olvasnom!!! :-(
Tudom, hogy nem feltétlen a legmegfelelőbb és legtisztább megoldásokat használtam, de légyszi nézzétek el.

Ha valaki tudna segíteni nagyon megköszönném!
 
1

Nem fog menni

rrd · 2008. Május. 26. (H), 16.22
Ez így nem fog menni. Valami ilyesmit kérsz:
"Nincs kismotorra se jogsim, de szeretnék repülőt vezetni. Itt ülök a pilótafülkében és mire való a harmadik sor negyedik kapcsolója?"

Ásd bele jobban magad a témába. Én pl nem állnék neki egy ilyen feladatnak JS keretrendszer nélkül, mert több idődet el fogja venni, hogy keresztplatformossá tedd mint amennyi idő kell egy keretrendszer megtanulásához.
5

fanks

carrizu · 2008. Május. 26. (H), 20.44
rrd kösz a választ!

A hasonlatod teljesen jogos!
Melyik keretrendszert javasolnád?
JQuery
scriptaculous

A crossbrowser-séghez annyit tennék hozzá, hogy a test.html-t a következőkön próbáltam ki:
ie5 - ie5.5 - ie6 - ie7
firefox 2.0.0.14 linux+winxp
opera 9+ linux+winxp
netscape 9 linux+winxp
safari win 3.1.1
konqueror 3.5.5
lynx
www.seobrowser.com
www.operamini.com/demo

A témában említett dolgokon kívül minden ugyanúgy működik a fent említett böngészőkön!!
Az ie5, a lynx és a seobrowser persze csak a statikus tartalmat látja!
A 4.1-es opera mini viszi az ajax-ot és a javascriptes keresést is!!
7

keretrendszer

rrd · 2008. Május. 26. (H), 21.17
Én a prototype, scriptacolous párost javaslom. Mind angolul mind magyarul találsz róluk leírást. Mondjuk a többit sose próbáltam :)

Egyébként biztos, hogy szükséged van IE5 támogatásra? A userek 1%-a használja. 5% alatt nemigen érdemes foglalkozni a témával hacsak nem milliós látogatószámod van :)
9

keretrendszer

carrizu · 2008. Május. 26. (H), 22.31
OK. nekiugrok a témának.

az ie5 benne volt az ies4linux-ban, gondoltam kipróbálom!
12

jquery

Hodicska Gergely · 2008. Május. 27. (K), 01.07
A prototype is elég jó cucc (újabb verziókat nem követtem), de szerintem a jquery-t mindenféleképpen érdemes megnézni, nekem jobban tetszik a filozófiája. Általában az igaz, hogy jquery-ben tömörebben lehet megfogalmazni a dolgokat.

Aztán hogy kicsit bezavarjak még :), annó a RoR a prototype-ot választotta (igaz, akkor talán még nem annyira volt kiforrott vetélytárs, illetve a prototype hasonló szellemben is készült), a Drupal jquery-t használ (ők jóval később döntöttek erről), és pont pár napja jelent meg, hogy a Zend Framework meg a dojo-t választotta, számukra az egyik fő szempont a robosztusság volt.


Üdv,
Felhő
14

jquery

carrizu · 2008. Május. 27. (K), 08.59
vettem Gergely! (Felhő)

Kösz!
17

További zavarok

zila · 2008. Május. 27. (K), 09.51
Említsük meg a jMaki-t is ami egy jó kis ragasztó project, segítségével különböző keretrendszerekből használhatsz neked tetsző komponenseket/widget-eket. Egy kis dojo, egy kis gwt, yui... Szerver oldalon meg használhatsz php-t vagy javat (tervezik a ruby-t is)
Na így már remélem teljes a zűrzavar :)
19

További zavarok

carrizu · 2008. Május. 27. (K), 10.04
abszolút!! :|)
21

Nem fog menni

carrizu · 2008. Május. 27. (K), 10.54
ha még itt vagy rrd!!

valóban max bringára ülhetek a webfejlesztői tudásom alapján, de kifejtenéd bővebben??
azért nem fog menni, mert teljesen rossz irányba indultam és így nem lehet megoldani, vagy
azért, mert alpvető programozási hibákat csináltam, vagy ... ????
22

Nem fog menni

rrd · 2008. Május. 27. (K), 11.09
Nem néztem bele a kódodba, egyszerűen csak arról van szó, hogy az ajax használatához legalább jó HTML, CSS és JS ismeret szükséges. Szóval tanulni kell hozzá ezt azt.
23

Nem fog menni

carrizu · 2008. Május. 27. (K), 11.20
1 óra múlva jövök a válasszal!! sorry nem leszek gépközelben!
25

Nem fog menni

carrizu · 2008. Május. 27. (K), 12.38
kicsit több lett, mint 1óra!:-(

szal továbbra is teljesen jogos!!

mégis, had kössem még egy kicsit azt az ebet! :-)
index.html : valid XHTML 1.0 strict
am.css : valid css 2.1
ajax scriptek : Simple AJAX Code-Kit (SACK) v1.6.1 /ajaxot ismerő böngészőkkel kompatibilis/
gacsit.js : igyekeztem a W3C DOM szabványának megfelelő funkciókat használni

a csoka HTML file-ok több évesek és nem szabványosak, de azokat frissíteni kell majd a végén!
2

Webes technikák

vbence · 2008. Május. 26. (H), 17.31
Nem előnyös a normál működésbe az XMLHTTP-t belekeverni. Néhány érv a sok közül: nem bookmarkolhatóak az oldalak, gondok a keresőkkel és még ezer másik dolog. Jó oka van, hogy például a Weblabor nem így működik...
3

bookmarkolható

rrd · 2008. Május. 26. (H), 18.34
De bookmarkolható csak külön kell rá figyelni
4

oké

vbence · 2008. Május. 26. (H), 19.17
rendben, valóban lehet, de a post lényege nem ez volt...
6

fanks

carrizu · 2008. Május. 26. (H), 21.02
vbence kösz a választ!

Én csak az oldal "vázát" csinálom, a valós tartalmat egy nálam is "amatőrebb" személy fogja karbantartani.
A frame-es megoldások hasonló problémái és egyéb dolgok miatt inkább az ajax-os megoldásnál kötöttem ki.
Így az egyes menüpontokhoz tartozó html file-okat külön, "váz" nélkül lehet szerkeszteni mondjuk egy frontpage-ben!
A keresők szvsz látják a főoldalt és követni tudják a linkeket is.
Valamint az egyes html file-ok önmagukban is valós tartalmat adnak, js nélkül persze nincs "váz"!!
Ez a seobrowser-rel és lynx-szel tesztelhető.
A history is megoldandó még, de van rá megoldás, ha jól olvastam, csak odáig még nem jutottam el.
8

statikus tárhely

vbence · 2008. Május. 26. (H), 21.18
Erre is vannak lehetőségek. Sok HTML szerkesztő támogatja a template-eket (a template változásakor módosítja a hozzá tartozó html lapokat.

Másik lehtőség az ismétlődő elemekhez egy saját:
http://vbence.web.elte.hu/html_include_kliensoldali.html

Használhatsz IFRAME-et a statikus dobozokhoz (ilyenkor persze a méret fix). Ez még eléggé keresőbarát módszer.

Írhatsz egy PHP szkriptet, ami végigmegy egy könyvtárban a csupasz HTML-eken, és a template közepére szúrja őket, majd a kész eredményt elmenti azonos néven egy másik könyvtárba (vagy akár direktben feltölti a szerverre).

És így tovább :)
10

statikus tárhely

carrizu · 2008. Május. 26. (H), 23.17
utánanézek a HTML szerkesztőknek.

asszem már jártam az oldaladon, de sajnos magas volt a léc, most majd még1x megpróbálom!

igen, a legmegfelelőbb az lenne, ha minden oldal statikus lenne és tartalmazná a teljes HTML kódot...


... abban bíztam, hogy jó irányba indultam!:-(

de nem sokkal elegánsabb az ajax-os megoldás????

a php-s válaszodat nem értem!
vagyis ahogy én értem, hogy ha frissül egy v. több csupasz/csonka HTML file, akkor egy perl script-tel egy template file-ba beszúrni a módosult HTML-t és más néven elmenteni, majd föltölteni a server-re!?!?!

...az eredeti/működő/lecserélendő weboldal egy totál statikus oldal.
annak a személynek aki készítette és frissíti jelenleg is az oldalt nem áll módjában és szándékában a frontpage-ben való, msword szerű HTML szerkesztésnél több nehézséget fölvállalni!!!
ez elég rendesen behatárolja a lehetőségeket!

ezért örültem, hogy találtam megoldást az ajax-os hívásokra js keretrendszer használata nélkül!!
mivel így elkerülhető lenne a total statikus oldal és ki lenne zárva, hogy pl. véletlenül kitörlődjön egy sor a HTML kódból!!
sajnos a php/perl script-es klónozás sem biztos, hogy belefér, bár csak 1 ikont kell csinálni az asztalára!?!??

az IFRAME teljesen kimaradt nekem a FRAME hatására feltehetően.
mivel az oldalnak 800x600+ osnak kell lennie, ezért gondolom a fix méretű IFRAME is kiesik???
11

iframe és társai

vbence · 2008. Május. 27. (K), 00.20
itt ugyebár a beágyazott elem (menü, fejléc, lábléc) méretéről van szó. Akkor gond, ha a menüd például nem tudod, hogy meddig fog nőni.

A php-s megoldás egyszerű fájlkezelés:

$elotte = file_get_contents ("elotte.html");
$utana = file_get_contents ("utana.html");

$from = "csonka/";
$to = "teljes/";

$files = scandir ($from);
foreach ($files as $file) {
    if (substr ($file, 0, 1) != ".") {
        $aktualis = file_get_contents ($from . $file);
        file_put_contents ($to . $file, $elotte . $aktualis . $utana);
    }
}
A fenti kód végigmegy az aktuális könyvtár "csonka" alkönyvtárán, majd a fájlok elé és mögé illeszti az elotte és utana HTML fájlok tartalmát, és elmenti a teljes könyvtárba az eredeti néven (a kód nincs tesztelve, kisebb hibák lehetnek).
13

iframe és társai

carrizu · 2008. Május. 27. (K), 08.51
sorry vbence, de korábban már írtam, hogy statikus server-ről van/lesz szó, igaz nemsokra rá kitöröltem a hozzászólásomból!! :-( sorry még1x
szóval ebben az esetben a php is kiesik, igaz?

a menü szerintem viszonylag fix marad, mert jó pár éve semmit sem változott!!

a beágyazott részt (header, menü, jobb oldal, footer) úgymond fix-nek gondoltam el.
pontosabban a header background image-ek cserélődnek a böngésző ablakának méretétől függően.
a többi teljesen fixen az ablak teteje-bal-jobb-alja részén maradnának.
a csonka/csupasz HTML file-ok pedig alkalmazkodnának a loadin, illetve a content div pillanatnyi szélességéhez, ami kb.600x500-as fölbontástól fölfelé változhat, az oldal használható böngészhetőségének megtartásával.

amúgy a csonka/csupasz HTML file-oknál mindenképpen szükségem lesz egy olyan megoldásra, mint a php-s ötleted, csak perl, awk, v. sed kell hozzá, nem?
(a breadcrumb-okat sed-del klónoztam)
egy minimális header kell az utf-8 és a dom builder javascript végett.
15

nem feltétlenül

vbence · 2008. Május. 27. (K), 09.07
Én a fenti szkriptet a feltöltő gépén gondoltam futtatni, ezért is generál fájlokat, amik aztán feltölthetők a szerverre. De apró módosítással fel is tudja tölteni a szkript a kész fájlokat.

PHP telepíthető winre, a szkript meg parancssorból (vagy parancsionnal) futtatható.
16

nem feltétlenül

carrizu · 2008. Május. 27. (K), 09.26
el voltam tévedve, ugyanis nem tudtam, hogy php-t lehet parancssoros módban is használni, csak PHP parser kell hozzá és webszerver meg nem!!!
csak kíváncsiságból, a perl-awk-sed trio valamelyike is megteszi, nem?

jav.: parser sem kell!!

köszi a scriptet

jav2.: sh + cat hasonló lehet
18

bármiben...

vbence · 2008. Május. 27. (K), 09.53
leprogramozhatod, elég primitív műveletről van szó.
20

bármiben...

carrizu · 2008. Május. 27. (K), 10.24
ok, megoldom!

megengedsz 1 összegzést??

nekem valójában a következőkre van szükségem (szerintem!):
1. XMLHttpRequest /menüpontonként/
2. DOM builder /a csonka HTML file-okhoz/
3. egy script a teljes HTML file-ok összefűzéséhez /amenyiben total statikus lesz az oldal, illetve a minimal HTML szerkezet klónozásához/

az 1.-est tul.képpen bármelyik js keretrendszerben megtalálom
2. pl. a scriptaculous-nak van kifejezetten DOMbuilder kiterjesztése
3. ezt talán megoldandottnak vehetem.


1. ezt, szerintem az ajax.js és az ajax-dynamic-content.js tökéletesen viszi, keretrendszer nélkül, ie6-tól fölfelé, full cross-browser szinten!
2. a gacsit.js szerintem 98%-ban fölépíti a DOM-ot! a 2% hiba pedig a következő:
nem tudok az index.html-nek megfelelő onclick attribútumot létrehozni a menü <a> elemeire!
valami ilyesmi kéne:
mak.setAttribute("onclick" , ajax_loadContent('loadin','sitemap.html');return false";);
vagy
mak.onclick = ajax_loadContent('loadin','sitemap.html');return false";
sajnos ezek nem jók!!!:-(((((

aztán jönne a dynamiclayout.js integrálása a gacsit.js-be! /window.onload duplikáció:-(( /

hirtelen ennyi volna

jav.: return false";
helyett
return false;
24

+1

vbence · 2008. Május. 27. (K), 11.23
Még egy lehetőség, hogy ne legyen olyan egyszerű.. :)

AJAX helyett:
- adott egy üres oldalad, amiben van egy <div id="content"></div> - azaz a tartalom helye,
- a linkelt HTML fájl betöltése egy rejtett <iframe id="aframe" style="display: none;"></iframe> IFRAME-be,
- majd document.getElementById("content").innerHTML = document.getElementById("aframe").contentWindow.document.body.innerHTML;
26

+1

carrizu · 2008. Május. 27. (K), 13.10
ok, de, hogy töltöd be a HTML file-t az iframe-be és hol van a rejtett iframe???

jav.
sehol sincs, mert rejtett :-)
27

Akárhol

vbence · 2008. Május. 27. (K), 13.24
az iframe a sablonban (tehát a külső HTML fájlban) van. Úgy töltesz bele bármit, hogy iframe.src="akarmi.html".

Bár még mindig azt mondom, hogy az előre legyártás sokkalsokkal értelmesebb megoldás. Fejlesztheted ezt is azzal, hogy a csonka fájloknak csak a <body> </body> közötti részét másolod a célfájlba:

...
        $aktualis = file_get_contents ($from . $file);
        $aktualis = preg_replace ('#<body .*?>(.*?)</body#i', '$1', $aktualis);
        file_put_contents ($to . $file, $elotte . $aktualis . $utana);
Ehhez a php.ini-ben be kell kapcsolnod a pcre kiterjesztést (ott lesz, csak kikommentelve).
36

+1 iframe

carrizu · 2008. Május. 30. (P), 16.13
vbence, ha még olvasod!?

gondoltam megpróbálom, amit +1-nek írtál az alábbi módon:

<div id="loadin">
<!--[if lt IE 6]><iframe src="index-in.html" id="index-in" name="index-in" style="display: none"></iframe><![endif]-->
</div>

<!--[if lt IE 6]>
<script type="text/javascript">
document.getElementById('loadin').innerHTML = document.getElementById('index-in').contentWindow.document.body.innerHTML;
</script>
<![endif]-->

amit szeretnék elérni, hogy ie6- /de js igen/ esetén töltse be az iframe-be az index-in.html-t!!

sajnos nem megy!!:-(
tudnál segíteni, hogy hol van a hiba???


jav:

közben találtam egy jQuery-s megoldást!!

$("body").prepend('<iframe id="jQuery_history" style="display: none;"></iframe>');
var iframe = $("#jQuery_history")[0].contentWindow.document;
iframe.open();
iframe.close();
iframe.location.hash = this._curHash;

talán át tudom ültetni sima dom szabványnak megfelelőre!!:-)
28

konklúzió

carrizu · 2008. Május. 27. (K), 13.38
huh, kaptam az arcba rendesen infót!!! :-) köszönöm mindenkinek!!!

úgy tűnik, jó ha a sima, statikus oldalt össze tudom majd hozzni megfelelőre!!!:--((((

ha esetleg valaki mégis tudna az onclick-es dologra megoldást, örülne a kis májam!!!:-)

Üdv.
carrizu
29

lehet, hogy sikerül??

carrizu · 2008. Május. 27. (K), 22.03
belenéztem a jQuery-be!

lehet, hogy sikerülni fog!!!:-)

pár nap biztosan kell!!

ha nem prob. még jelentkezek!!
30

jQuery /állat/

carrizu · 2008. Május. 28. (Sze), 00.31
ha még esetleg valakit érdekel!?!?!?!

az index.html-t sikerült jQuery-vel teljesen kiváltanom!!!!!!!!!:-))

most már "totál átjött", hogy miért ajánlottátok a keretrendszereket!! :-)
31

ps (magamnak + rrd-nek)

carrizu · 2008. Május. 29. (Cs), 18.00
sikerült "összehegesztenem" a bookmark-olhatóságot és a history-t is az index.html-ben!!!:-))

...+ a saját, összetört kis lelki világom ":-)" és rrd megnyugtatására muszáj kiírnom a következőket magamból:

rrd: jártam a honlapodon és "A drágább az olcsóbb" blogod olvasása után jött a kényszeres mondandóm!
// előre szeretném kijelenteni, hogy nem suttyóskodni akarok és egyébként sem volt a válaszaidban semmi ilyen jellegű dolog!!!!!!
// sőt, ennek hatására mentem neki a keretrendszeres témának!!
ha szabad itt említeni, "kisPocok" hozzászólását érzem a legközelebb magamhoz, valamint "Baróti Róbert" -ét egy kicsit,mert bár nem tudok swf-et programozni, és első ránézésre lehet, hogy nem látszik, de az én esetemben egy "NON-PROFIT!!!" dologról van szó!!!

remélem nagyon nem rontottam a megítélésemen!!!??? //ez nagyjából költői talán?!//

Üdv.
32

re PS

rrd · 2008. Május. 29. (Cs), 18.16
az üzenet itt is az volt mint ott. Ha az ember minőséget akar gyártani akkor tanulni kell. Nincs harag.
33

re PS +

carrizu · 2008. Május. 29. (Cs), 18.27
:-))

+ megkérdezhetem, hogy esetleg belenéztél-e a kódba??????

// cinikusság és benyalás nélkül, csupán a tény, hogy így volt, az nekem azt jelentené, hogy :-)))))) //
34

nem

rrd · 2008. Május. 30. (P), 10.56
Nem, nem néztem bele.

Ha valaki azt írja, hogy totál kezdő és Ajaxszal próbálkozik egy saját JS-sel, akkor nézegetés nélkül azt írom amit neked is írtam, hogy kezd el használni bármelyik keretrendszert. Azért, mert a második, harmadik projektnél úgy is rájön az ember, hogy sokkal jobban jár így.

Szóval nem a kódodat minősítettem, mert az nem láttam.

Mellesleg ha valaki összerak egy működőképes saját kódú ajaxos alkalmazást akkor nem totál kezdő. :)
35

nem

carrizu · 2008. Május. 30. (P), 14.25
huu..., tényleg kösz!!!!!!!!

asszem ebben a válaszban reménykedtem, valahol mélyen!!!!:-))))))

most már vidámabb hangulatban tudom folytatni!!!!!

azaz folytatnám, ha tudnám!!:-)(
ugye a jQuery ie6-tól működőképes???
muszáj megcsinálnom a dom builder js-t és js ver:1 + dom0 kompatibilisre kellene készíteni,
hogy ie6 és verziótársai-tól lefelé is működjön!!

"ezt találtam az oldaladon, csak még bele kell néznem:"
https://bors.hoszting.com/pipermail/wl-offlista/2006-September/008166.html

tudnál tanácsot adni, hogy merre induljak?
a legújabb verziós prototype-scriptaculous páros ie6 alatt is működik???

lehet, hogy megint előbb kérdezek, mint ahogy tájékozódnék teljeskörűen, ezért sorry!!
37

ie6 alatt

rrd · 2008. Május. 31. (Szo), 12.50
"IE6 alatt" azt érted, hogy IE6-on fusson vagy, hogy IE6-ot megelőző verziókon?

IE6-on működnek. De ha már elkezdted a jQuery-t akkor csinálj mindent azzal. Nem nagyon érdemes keverni a keretrendszereket. Azt meg gondold át még egyszer, hogy tényleg szükséged van-e ie6 előtti verziók támogatására.
38

ie6 alatt

carrizu · 2008. Május. 31. (Szo), 17.50
ie6-ot megelőzőekre gondoltam!

igen ie6-on műkszik:-))) / ez valójában nagyon kell és örülök neki!!/
...de, elméletileg az oldal nagyközönsége ie6-ot és régebbi böngészőket használnak!?!
+ tul.képpen elvárás is és én magam is szeretném, hogy ie4-en és verziótársain még fusson,
igaz statikus módon! (minden oldal külön betöltődik, bármelyik linkre kattintás esetén)
/ saját, nem biztos, hogy megfelelő elképzelésem szerint, ehhez kéne egy dombuilder js!!!

a helyzetet bonyolítandó, a jQuery-vel így sikerült a bookmark+history dolgot megoldanom:
http://akarmi.hu/#vmi.html / ez gyönyörűen működik a jQuery-t támogató böngészőkön!/

de a linkek így néznek ki a html kódban ----- és a böngészőben:
<a href="vmi.html"> ----- http://akarmi.hu/vmi.html

ez azt hozza magával, hogy mind a két formában lehet hivatkozni a html file-okra,
de az első csak ie6 és fölötte működőképes, míg a második minden esetben az (kéne, hogy legyen)!!

szvsz, mivel a második formában van az index.html megírva, ezért a robot is ennek megfelelően tudja föltérképezni az oldalt!!??!! / sima <a href="vmi.html">, ezt érti a robot igazán, nem??? /

miközben írom ezt a válszt, tisztázodott bennem, hogy olyan dombuilder js kéne, ami ie6 és fölötte jQuery-vel építi föl a dom-ot,
ie6 alatt (ie4-ig) pedig W3C standard szerint! / persze ie hack-ekkel!:-( /

jól gondolom??