.    

#JQuery znovu, lépe a radostněji

xChaos 17. srpna 2011 [10002 znaků] [HowKnow]
★★★★ [ + ] 7 [9x] [ - ] [zajímavé[x] moudré[x] dlouhé[x]]
Zobrazení 2209 ← RSS 253 Twitter 109 Google 28 NYX 30
Komentářů 8

Můj předchozí pokus pochlubit se, jak jsem narychlo dobastlil ajaxovou interaktivní moderaci článků a komentářů na zdejší (poměrně zastaralýa primitivní) content management systém skončil výsměchem ze strany coderů - takže přichází druhý pokus. #webdesign #programming #jquery #ajax [Summary: short introduction to Ajax using JQuery]
icon

Pamatuje si na článek Ajax pomocí JQuery snadno a rychle z října 2010 ? Tento článek sklidil v odborných kruzích značnou kritiku. (Mimochodem - jsou pod ním jedny z nejlépe hodnocených komentářů tady na TečceCZ - pravděpodobně proto, že celý systém byl v té době ještě zbrusu nový, a čtenáři a komentátoři TečkyCZ zřejmě byli zvědaví na to jak funguje a chtěli si to vyzkoušet.)

Nicméně - bez ohledu na to, že PHP jako takové je v podstatě prasárna, jsem brzy zjistil, že i mnou předvedený jednoduchý JQuery [jquery.org] kód demonstrující interaktivní HTML pomocí Ajaxu byl hodně zprasený. Původní článek, ačkoliv v zásadě nabízel funkční kód, se dopouštěl jedné zásadní mystifikace a současně propagoval zastaralé řešení, které není XHTML validní (mimochodem - jak se brzy dozvíte, TečkaCZ je konečně XHTML validní - tedy, alespoň úvodní stránka a pár dalších modulů, jako různé pohledy do historie článků nebo "zdi vzkazů": začišťování samotných starých článků bude minimálně stejná piplačka, jako postupné dodatečné přidávání ikonek k těm zajímavějším, apod.).

Jak jistě tušíte - mystifikací bylo, že jsem napsal, že pro moderační Ajax nešlo použít běžný <a href=...> tag: samozřejmě že šlo - pouze by navázaný JavaScript býval musel vrátit hodnotu false, aby se ve zpracovávání prokliknutého odkazu dále nepokračovalo. Niceméně, když jsem se tak hezky naučil ostylovat kurzor myši nad vybraným blokem (např. <span>...</span>), tak jsem to nechal víceméně tak, jak to bylo. Zastarým řešením dále bylo použít XHTML-nevalidní atribut onClick=... pro volání javascriptového kódu: JQuery objekty mají na toto elegantní a stručnou metodu .click(function(){...}). Když už jsem tedy zjistil, že dalším důležitým krokem v SEO souboji s molochem zvaným Gůgl bude co nejrychleji přehodnotit svůj laxní přístup ke XHTML validitě, tak mi nezbylo, než jako vedlejší efekt celý zprasený kód úplně opravit. Navíc jsem přidal ještě charakteristický Ajaxový "chroustač", bez kterého žádný Web 2.0 není úplný - popravdě, k tou mě dovedlo pomalé Wi-Fi připojení na chatě - v Praze jsem zmlsaný optickým vláknem dotažným téměř až na desktop - jde o takzvané FTTD [de.wikipedia.org] řešení, neboli Fiber-to-the-desktop :-)

Poznámka: tzv. "chroustač" je animovaný gif, který se zobrazuje během načítání Ajaxového HTML fragmentu - a je to věc, která je pro Web 2.0 stejně zásadní, jako byly tagy <BLINK>...</BLINK> a <MARQUEE>...</MARQUEE> v zapomenuté prehistorii webu, kdy Netscape Navigátor zahajoval své vítězné tažení po planetě a Microsoft Internet Explorer tehdy v rámci ochrany lidských práv civilních obyvatel Internetu zahájil svojí humanitární protiofenzívu (škoda, že obě strany tehdy rychle dosáhly stavu mutually-assured destruction pomocí vzájemně úmyslně nekompatibilních tagů - mohla být legrace).

Dva fragmenty stávajícího PHP zdrojáku, připravující HTML kód pro moderaci, nyní vypadaj zhruba takto - přiznám se, že umístění "chroustače" dovnitř cílové oblasti :


$qhod.='Hodnocení <span id="'.$id_prefix.'"><img id="loader_'.$id_prefix.'" alt="" style="display:none; height:16px; width:16px;" src="img/ajax-loader.gif" />[<span title="Kliknutím zvýšíte hodnocení" class="plus" id="clp_'.$id_prefix.'"> + </span>] <span'.$stylehod.'><strong>'.$hodnoceni.'</strong><small> ['.$hodnoticich.'x]</small></span> [<span title="Kliknutím snížíte hodnocení" class="minus" id="clm_'.$id_prefix.'"> - </span>]</span> ';
$qhod.='<script type="text/javascript"> /* <!-- */';
$qhod.='$("#clp_'.$id_prefix.'").click(function(){$("#clp_'.$id_prefix.'").hide(); 
$("#loader_'.$id_prefix.'").show(); 
$("#'.$id_prefix.'").load('.$url_plus.');});'; 
$qhod.='$("#clm_'.$id_prefix.'").click(function(){$("#clm_'.$id_prefix.'").hide(); 
$("#loader_'.$id_prefix.'").show(); 
$("#'.$id_prefix.'").load('.$url_minus.');});'; 
$qhod.='/* --> */</script>'; 

... nepodstatnou pasáž vynechám, a zaměřím se opět na zběsilé mísení 3-4 syntaxí (PHP, XHTML, občas CSS, JavaScript) na jediné řádce :-)


$qhod.='[<span title="Kliknutím odstraníte přívlastek" class="demod" id="cld_'.$id_prefix.'_'.$demodid.'">x</span>]';
$qhod.='<script type="text/javascript"> /* <!-- */';
$qhod.='$("#cld_'.$id_prefix.'_'.$demodid.'").click(function(){$("#cld_'.$id_prefix.'_'.$demodid.'").hide(); 
$("#demodloader_'.$id_prefix.'").show(); 
$("#'.$id_target.'").load('.$url_demod2.');});';
$qhod.='/* --> */</script>';

A po odeslání do browseru to vypadá např. takto (jak si ostatně můžete snadno ověřit :


Hodnocení <span id="cl_1148"><img id="loader_cl_1148" alt="" style="display:none; height:16px; width:16px;" src="img/ajax-loader.gif" />
[<span title="Kliknutím zvýšíte hodnocení" class="plus" id="clp_cl_1148"> + </span> ] 
<span class="ratinggood"><strong>9</strong><small> [11x]</small></span>
[<span title="Kliknutím snížíte hodnocení" class="minus" id="clm_cl_1148"> - </span>]</span> 
<script type="text/javascript"> /* <!-- */
$("#clp_cl_1148").click(function(){$("#clp_cl_1148").hide();
$("#loader_cl_1148").show();
$("#cl_1148").load("/rate.php?plus=1&clanek=1148");
$("#cl_1148").show();});
$("#clm_cl_1148").click(function(){$("#clm_cl_1148").hide();
$("#loader_cl_1148").show();
$("#cl_1148").load("/rate.php?plus=0&clanek=1148");$("#cl_1148").show();});
/* --> */ </script>
<span id="modtarget1148"> <span class="notsogrey">[<img id="demodloader_cl_1148" alt="" style="display:none; height:16px; width:16px;" src="img/ajax-loader.gif" />
<strong class="stronger">informativní</strong>[<span title="Kliknutím odstraníte přívlastek" class="demod" id="cld_cl_1148_0">x</span>]
<script type="text/javascript"> /* <!-- */
$("#cld_cl_1148_0").click(function(){$("#cld_cl_1148_0").hide();
$("#demodloader_cl_1148").show();
$("#modtarget1148").load("/mod.php?demoderate=yes&clanek=1148&mod=1");});
/* --> */ </script>
<strong class="stronger">zajímavé</strong>[<span title="Kliknutím odstraníte přívlastek" class="demod" id="cld_cl_1148_1">x</span>]
<script type="text/javascript"> /* <!-- */
$("#cld_cl_1148_1").click(function(){$("#cld_cl_1148_1").hide();
$("#demodloader_cl_1148").show();
$("#modtarget1148").load("/mod.php?demoderate=yes&clanek=1148&mod=5");});
/* --> */ </script>
<strong>vtipné</strong>[<span title="Kliknutím odstraníte přívlastek" class="demod" id="cld_cl_1148_2">x</span>]
<script type="text/javascript"> /* <!-- */
$("#cld_cl_1148_2").click(function(){$("#cld_cl_1148_2").hide();
$("#demodloader_cl_1148").show();
$("#modtarget1148").load("/mod.php?demoderate=yes&clanek=1148&mod=2");});
/* --> */ </script> 
inspirativní[<span title="Kliknutím odstraníte přívlastek" class="demod" id="cld_cl_1148_3">x</span>]
<script type="text/javascript"> /* <!-- */
$("#cld_cl_1148_3").click(function(){$("#cld_cl_1148_3").hide();
$("#demodloader_cl_1148").show();
$("#modtarget1148").load("/mod.php?demoderate=yes&clanek=1148&mod=44");});
/ * --> */ </script>

Samozřejmě - ani dnešní řešení není zdaleka čisté. O inline CSS asi vůbec nemá cenu se zmiňovat - je to sice validní, ale nouzová praktika. A taky inlinovat "customizovaný" javascriptový kód pro každý komentář znovu je v podstatě - navzdory značné úspornosti zápisu - pořád dost velká prasárna. Čisté by bylo použít externí javascript, který by implementoval jedinou funkci, která by dostávala ID moderovaného komentáře (či článku) pouze jako parametr. Samozřejmě.... původní článek měl ale demonstrovat spíše použitelnost JQuery pro "quick and dirty" dobastlení ajaxové interaktivity do léta existujících, kdysi stejně tak "quick and dirty" umatlaných webů.

Čisté by asi taky bylo doplnit title=... atributy k aktivním prvkům nějak plošně (např. opět javascriptem... nebo možná to jde i pomocí CSS - zatím jsem po tom nepátral) - minimálně by to pomohlo výrazně snížit objem dat přenášených při každém načtení stránky...

S "čistým řešením" si zkrátka budete muset počkat, až se pustím do implementace své chystané open-source publikačně-sociální sítě MemoryLeaks.Net - která především nebude implementovaná v PHP a bude současně používat všechny základní postupy při tvorbě webových aplikací, které by člověk očekával od aplikace napsané ve století ančovičky [cs.wikipedia.org] - tedy např. úplné oddělení javascriptu a CSS od XHTML šablon - a stejně tak i úplné oddělení těchto šablon od samotné aplikace. Stávající kód na sebe už zdálky prozrazuje, že používá odporné a zpátečnické postupy, které byly možná zcela běžné ve století ovocného netopýra [cs.wikipedia.org] a a dnes už jsou totálně unfree, uncool a out.


Sloupcová sazba: pokud je okno prohlížeče dostatečně velké (na monitoru s dostatečným rozlišením), zobrazí se článek ve více sloupcích (w3.org). Testováno v browserech Firefox, Opera a Chrome. Není implementováno v Internet Exploreru. Tato feature může způsobovat problémy ve starších verzích prohlížečů s jádrem Webkit (Google Chrome, Safari, Konqueror). Pokud nevidíte článek celý, zkuste zmenšit okno prohlížeče nebo použít verzi pro tisk. [zpět na začátek sloupcové sazby]
Pokud se vám článek líbil, zkuste autora podpořit [zobrazit možnosti]
Sdílet v síti [Identi.ca - musíte být předem přihlášeni] [Twitter] [Facebook] [Jagg.cz]
Formátovat pro tisk [bez komentářů] [s komentáři]
Krátká forma URL (adresy) [http://teckacz.cz/1139]
Všechny články [od autora xChaos] [v rubrice HowKnow] [nejnovější]

Hodnocení článku čtenáři [ + ] 7 [9x] [ - ]
Tip: Pro moderaci článků (kladné nebo záporné hodnocení) je nutné použít browser, který podporuje javascript a cookies.
Komentáře čtenářů [napsat vlastní]
Skrýt hodnocené nebo méně


[] Gobbet (anonym) 17. srpna 2011 ← komentářů 1 ☯☯☯ 3 [3x]
★★★ [ + ] 3 [3x] [ - ] [informativní[x] zajímavé[x] důležité[x]]
→ [/-/15910] ← na komentář můžete odpovědět nebo ho sdílet
Jen by mě zajímalo (spíš ze zvědavosti), co bude použito místo zpraseného PHP v novém systému?

[] xChaos 17. srpna 2011 ← komentářů 5520 0 [3050x]
[ + ] 0 [2x] [ - ] [informativní[x] nedomyšlené[x]]
→ [/-/15911] ← na komentář můžete odpovědět nebo ho sdílet
@Gobbet jsem rád, že tady tahle otázka padla :-) mám takovo šílenou vizi Fastcgi aplikace napsané v mém dialektu C<<1, využívající šablony kompilované přímo do podoby binárky. ale je to fakt běh na dlouhou trať...

[] volani.webnode.cz (anonym) 18. srpna 2011 ← komentářů 1019 245 [893x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/15923] ← na komentář můžete odpovědět nebo ho sdílet
Já se v těchhle programátorských věcech nevyznám.
Ale tuším že jsme někde někdy něco viděl v pythonu.
Jen by mě tak zajímalo co si xChaos myslí o těchto python webových řešních jako jsou: Zope, plone atd. :)
Vím že je python poměrně oblíbený u příznivců svobodného software :)

[] volani.webnode.cz (anonym) 18. srpna 2011 ← komentářů 1019 245 [893x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/15924] ← na komentář můžete odpovědět nebo ho sdílet
A jeslti je teckacz unfree, uncool a out tak by mě zajímalo co jsou moje statické "webové sránky" tvořené pomocí rámů ve WYSIWYG klikátku s občasným prasečím zásahem do kódu :D
- pravda, já nikdo nikomu nikdy neříkal že jsem programátor a weby dělám jako totální amatér v negativním slova smyslu :)
Blbý je že vývoj co se toho klikátka jde od desíti k pěti.. NVU > kompozer > BlueGriffon.
Je to horší a horší (od BlueGriffonu se vracím z5 ke kompozeru), ale weby vtom už stejně nedělám jen s nechutí edituji ty hodně staré.. :D

[] xChaos 18. srpna 2011 ← komentářů 5520 0 [3050x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/15926] ← na komentář můžete odpovědět nebo ho sdílet
S Pythonem jsem dva roky dělal webovou aplikaci ve Streamu. čistě jako "programátoru-uživateli" se mi líbí velice, což o to... a co do efektivity/výkonu asi není moc horší než PHP - nejspíš bude zhruba srovnatelný (asi jak která konstrukce jazyka - to je normální). dokonce jsou tam některé pěkné optimalizace (prekompilace .py zdrojáků do .pyc modulů, apod.)

Python víceméně uznávám a propaguju ho jako nástroj, pro psaní neinteraktivních skriptů na straně serveru - cokoliv, co se spouští z cronu a běží to v noci, nebo na pozadí každou hodinu, i minutu, apod. ... pouze mi nepřijde vhodný jako nástroj pro tvorbu interaktivních webových aplikací - zejména v éře Ajaxu, kdy se od všeho očekává naprosto realtime odezva.

Zope a Plone neznám, ale mám z první ruky o výkonosti toolkitu Django, který stojí taky nad Pythonem - a fakt je to dost bída - i proti nativnímu, zoptimalizovanému Pythonu kódu. Právě to mi utvrdilo v tom, že nativní tookit v C by byla bomba.

[] marek (anonym) 18. srpna 2011 ← komentářů 100 34 [252x]
[ + ] 0 [2x] [ - ] [informativní[x]]
→ [/-/15929] ← na komentář můžete odpovědět nebo ho sdílet
Plone od verze 4 je výrazně rychlejší než např. Joomla, Wordpress, Drupal. Zásadní rozdíl nespočívá ve srovnávání vlastností jazyků PHP a Python, ale že Plone nepoužívá k ukládání dat relační databázi (MySQL), ale stromovou hierarchickou objektovou... [celkem 1272 znaků] [zobrazit]

[] xChaos 19. srpna 2011 ← komentářů 5520 0 [3050x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/15960] ← na komentář můžete odpovědět nebo ho sdílet
Tak jsem to ještě trochu překopal, ten Ajax... sice jen lehce, ale uvidíme.

[] xChaos 19. srpna 2011 ← komentářů 5520 0 [3050x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/15963] ← na komentář můžete odpovědět nebo ho sdílet
Tak jsem přidal Ajaxový chroustač i k té druhé fázi moderace... snad to lidi s pomalejším přpojením ocení
 

Počet zobrazených komentářů: 8 [celkový čas potřebný k prohledání databáze a vytvoření stránky: 0.75 sekund]

Pozor, vložením komentáře souhlasíte s pravidly hry TečkyCZ! [zobrazit pravidla] →
Ochrana proti spambotům - tři-krát-tři je ... ? (napište číslicí - nemělo by byt potřeba při zapnutém JavaScriptu)
Sociální síť (přihlaste se předem, 1. řádek<=96 znaků=status, zbytek=odkaz)
Offtopic resolver (týká se odpověď původního tématu, nebo patří jinam?)
Přezdívka (povinně) - nepoužívejte speciální znaky, mezery=podtržítka
E-mail (volitelně) - nebude zobrazen, zobrazí se ikonka z [www.gravatar.com]

Nelze použít HTML [zobrazit mikrosyntax] →

Nápověda: ve vlastním zájmu uvádějte u komentářů pouze funkční a dostupnou e-mailovou adresu. Přezdívku, která je jednou spojená s konkrétní e-mailovou adresou, už nyní nelze bez zásahu administrátora serveru spojit s jinou adresou. Uvedením neplatné e-mailové adresy si v budoucnu znemožníte upload ikonky i možnost použít některé další chystané neanonymní funkce vázané na uvedení platné e-mailové adresy.


TečkaCZ [Nejnovější články] [Nejnovější komentáře] [Zeď vzkazů] [Zeď odkazů] [Začátek článku]

    TečkaCZ
  •  
  • Komentáře →
  • Nástěnky →
  • Debaty →
  • Články →
  • Ročníky →
  • Rubriky →
  • RSS kanály →
  • Vzhled →
  • Ostatní →
  •  
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
  •  
.

[Arachne Labs]

[SPOJE.NET]

[Právě dnes | Tech | Ostatní]

Yacy P2P web search jabber.arachne.cz
tiskové zprávy a otevřené dopisy přebíráme z nejrůznějších informačních kanálů (i bez výslovného souhlasu autorů)
licenční práva k použitým obrázkům a grafickým motivům nejsou definována (přebírejte pouze texty bez obrázků)
texty článků i komentáře bez uvedení copyrightu jsou chráněny GNU Free Documentation License
založeno na Quzo engine, (G)1999-2002 David Čermák, (G)2002-2012 Michael Polák
Quzo engine vyvíjejí Arachne Labs, webhosting sponzorují SPOJE.NET
seznam aktuálních článků je dostupný i ve formátu RSS (XML)
můžete také sledovat Twitter feed TečkyCZ.
test XHTML a CSS2 validity