2009 07 martie 2009

Apelarea funcţiilor multiple de Windows onload in JavaScript

Heres un alt peice puţin de înşelăciune Javascript pe care am avut de a săpa în jurul, deoarece situaţia se commaned. Într-una din site-ul meu, am avut această situaţie în care am avut de a pune în aplicare "windows.onload" de două ori. Primul lucru pe care ar fi ajuns la o minte lipsit de experienţă ca a mea (eu trebuie să spun sincer că, din moment ce am fost cu ajutorul cadrelor javascript şi biblioteci, am uitate de a face lucruri simple, pe propria mea ... trist dar adevarat), este următoarea metodă ...

 window.onload = onloadfn1;
 window.onload = onloadfn2;
 window.onload = onloadfn3;
 , etc ..

Ne pare rau sa spun, dar, acest lucru obiceiul de lucru ... nu vreau pentru a discuta despre stiinta executarea de Javascript mult ... dar în funcţie de experienţa mea recentă, doar ultima funcţie (onloadfn3) va bolnav se de fapt executate.

În situaţii normale, spre deosebire de a mea (pe care voi vorbi despre un pic mai târziu) ... ai putea face una dintre următoarele pentru a executa funcţiile mutliple onload ....

Sau ceva de genul asta

 doOnLoad function () {
         onloadfn1 ();
         onloadfn2 ();
         onloadfn3 ();
 }
 window.onload = doOnLoad;

Pentru situaţia mea actuală, eu nu pot folosi oricare dintre cele de mai sus ...
De ce am nevoie pentru a apela windows.onload de două ori, mai degrabă, că de asteptare două funcţii într-o funcţie onload singur? Aici este un aspect rapid la declaraţia problema mea ...

"Paginile site-ul meu sunt structurate ca temă WordPress .... adică nu este un header.php comune şi Footer.php care devine incluse în toate paginile site-ului. Există o funcţie implementaion onload în Footer.php pentru a face unele funcţii comune onload. Şi acolo sunt câteva pagini care au nevoie de ceva de ONLOAD lor, în afară de cele făcute de funcţia de onLoad comun. Dacă aş atribui funcţie de apel invers direct la handler window.onload, se va merge pe-callback atribuite anterior în Footer.php "

.... Este problema mea a înţeles :) ?

Ei bine! există puţine soluţii pe care am găsit. Ele toate sunt foarte asemănătoare şi, în principal implementions de o soluţie dată de Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Soluţie:

Pur şi simplu adăugaţi acest cod javascript pentru site-ul ...

 Funcţia addLoadEvent (func) {
     var = oldonload window.onload;
     în cazul în care (typeof window.onload = "funcţie"!) {
        window.onload = func
     } Else {
        window.onload = function () {
            dacă (oldonload) {
                   oldonload ()
           }
           func ()
        }
    }
 }

Şi-l numesc în loc de "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Codul de mai mult pentru a rula pe pagina de încărcare *
 }); 

Avantajele acestui fragment de cod ...
1. În primul rând, Acesta vă permite să aveţi mai multe evenimente windows.onload, numit de părţi separate ale codului, fără a overridding definiţia anterioară
2. Este într-adevăr discret. Acesta poate fi plasat într-un fişier cu script-uri sau alte într-un fişier separat.
3. Ea funcţionează, chiar dacă window.onload a fost deja stabilit.


2008 20 septembrie 2008

TEXTAREA problemă colaps în XSL / XSLT


PROBLEMA DECLARAŢIE:
Am fugit în această problemă în ceea ce priveşte o textareas în XSLs. În cuvinte simple, problema apare atunci când aveţi un tag <textarea> gol, atunci se va prăbuşi la <textarea />.
adică dacă aţi avut ceva de genul următor în XSL si datele XML pentru valoarea TEXTAREA, returnează nimic ...

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ textarea>

Ca browsere nu recunosc acest lucru, va provoca restul de formular HTML pentru a rula în zona de text.

Soluţii posibile:

În XSL, adauga un non-rupere-spaţiu () după XSL: tag.BEWARE de valoare, pentru a avea grijă de acest spaţiu suplimentar aţi adăugat, în timpul validări partea de client de acest domeniu.

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ textarea>

Sau
<xsl:value-of select="concat (DESCRIPTION,'')"/>

Sau
Introduceţi o etichetă <xsl:value-of select="@unknown" /> arătând spre un atribut necunoscut. Acest lucru va forţa parserul PHP XSLT pentru a genera o zonă de deschidere şi închidere tag-ul de text, chiar dacă acesta nu are nimic în între.

Sau
Inseraţi un câmp de <xsl:text> conţine un spaţiu pentru a forţa o etichetă de închidere.

Cu toate acestea, deşi soluţiile de mai sus ar putea părea pentru a rezolva problema, eu nu sunt inca convins de faptul că acestea sunt chiar şi cele mai bune modalităţi de a se remedia. Dacă există orice altă cale mai bună de a stabili acest capriciu, Vă rugăm să faceţi să ne anunţaţi.


2008 14 septembrie 2008

O varietate de condiţii de testare XSL (Colectia de XSL: IF si XSL: atunci când condiţiile de încercare)

De fiecare dată am să fac un XSL: IF sau XSL: CAND de testare, am reveni la cărţi de referinţă. Eu niciodată nu par să le amintesc. Crezut că ar fi mai mult de acolo, la fel ca mine, care ar prefera mai degrabă să aibă toate acestea, este posibil, la un singur loc, gata de a fi menţionate atunci când este nevoie.

Pentru cei care sunt noi ... Sintaxa pentru XSL: IF

<xsl:if test="expression">
<- Conţinut:! Şablon ->
</ Xsl: dacă>

XSL: dacă / xsl: atunci când colectarea de test
Condiţiile de mai jos sunt simple si explicite. Deci, eu cred că nu va nevoie de o explicaţie mult

<xsl:if test="position()=last()-1">
Aceasta în cazul în care ultimul element, dar unul în listă!
</ Xsl: dacă>

<xsl:if test="SALARY> 5000 ">
Salariul de această persoană este mai mare decât L. 5000
</ Xsl: dacă>

<xsl:if test="count(JOBS)> 3 ">
Există mai mult de 3 locuri de muncă în această listă!
</ Xsl: dacă>

<xsl:if test="(@DEPT ='SALES') sau (@JOINYEAR = '1997')">
Această persoană este de la departamentul de vanzari sau de Anul de aderare este 1997
</ Xsl: dacă>

<xsl:if test="EXPERIENCE">
Această persoană are cel puţin un element de copil EXPERIENŢA.
</ Xsl: dacă>

<xsl:if test="@HOBBY">
Persoana are un atribut hobby.
</ Xsl: dacă>

În aceleaşi condiţii de text ar putea fi utilizate pentru XSL: Alegeţi / xsl: atunci când, ca şi

XSL: alege

XSL XSLT lui: Alege instrucţiune este similară cu xsl: dacă, dar are câteva diferenţe esenţiale:
• Un XSL: elementul Alege pot testa pentru mai mult de o condiţie şi adăuga noduri diferite copac rezultatul pe care condiţia este adevărată.
• Un XSL: alege element poate avea un şablon implicit pentru a adăuga la copac rezultatul dacă nici una dintre condiţiile sunt adevărate. (Compară XSL: dacă, care nu are echivalent de "altceva" conditie.)
• XSL: alege element are subelementele specifice, care sunt necesare pentru ca acesta să funcţioneze, în timp ce puteţi pune orice elemente de bine-formate în interiorul pe care doriţi să o xsl: dacă elementul.

<xsl:choose>
<xsl:when test="boolean-expression">
Fa ceva atunci când această expresie este boolean-DOMENIUL
</ Xsl: atunci când>
<xsl:otherwise> face altceva </ xsl: altfel>
</ Xsl: alege>


2008 13 august 2008

Tokenizing şir delimitat în interiorul unei XSL

În cazul în care cerinţa este să împartă o valoare într-un nod XML, care conţine un şir delimitat de valoare, în elementele individuale, atunci aţi ajuns la locul potrivit ... avea o privire de la exemplul de mai jos. Dacă sunteţi familiarizat cu un pic de XML si XSL ... eu nu cred ca ar fi nevoie de nici o explicaţie.
De asemenea, acest exemplu de utilizare a include functii cum ar fi XSL xsl: call-şablon, XSL: subşir-înainte, XSL: subşir-după, în cazul în care este ceea ce sunt după.

XML pentru a fi transformate (food.xml): -
Presupunem sarcină este de a tokenize delimitat de coarde de virgulă, în tag-ul "Cuvinte cheie"

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.xsl): -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

De ieşire HTML rezultat: -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

Inutil să spun ... schimba doar parametrul "delimitr" la delimitatorul de alegerea dvs.


2008 04 august 2008

O problemă cu poziţia (), în XSL ... sau este?

Am avut această problemă Stocare în timp ce crearea unui XSL astăzi. Căutat răspunsuri în întreaga net, dar putut găsi orice .... De fapt, am ghicit! Eu ştiu ce însemna problema mea a fost, asa cum nu ma uit pentru?

Oricum! Doar în cazul în care aveţi această problemă foarte aceeaşi şi oarecum prea de puterea de a te obliga sa a reuşit să aterizeze pe această pagină ... vă mulţumesc să-mi tone ... Şi dacă aţi aterizat accidental de pe aceasta pagina pentru unele soarta ciudat şi se întâmplă să fie un dezvoltator XSL, a face a face o notă de acest lucru acum, pentru cauza viitor, dacă într-o zi, te confrunţi cu această problemă, atunci forţa nu s-ar putea să fie cu voi.

Problemă declaraţie:
Am acest XML, în cazul în care există două noduri cu mai multe elemente în ea, precum şi articole între aceste două noduri au o corespondenţă unu la unu. În exemplul de mai jos, fiecare element în nodul <array name="PLAYURL" /> se referă (poziţia corespunzătoare), la un element în <array nodul name="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Acum, am o buclă, în cazul în care am bucla prin <array name="SITENAME">, şi vreau să ajung elementul aferent (de la poziţia corespunzătoare), în <array name="PLAYURL">,

Ce v-ar încerca normaly face este ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

SORRY! ACEST LUCRU obiceiul ... Ah!! Surpised ...

Acum, ce-ar vrea, probabil, pentru a încerca, ceva de genul asta ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Şi din nou această obiceiul de lucru ... Acum te lamureste, incercand sa contacteze toti cei care credeţi că ştie ceva XSL si ar putea fi de nici un ajutor ... să încercaţi orice altă opţiune ... şi încă mai este obiceiul de lucru ... Ei bine! Asta e ceea ce mi sa întâmplat atleast ...

Dont Disperare! TRY ACEST

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Dont Intreaba-ma de ce functioneaza. Cauza i dont au un motiv drept ... daca faci! Vă rugăm să nu fixaţi un comentariu. Ar putea fi destul de util. De asemenea! dacă aveţi TITLUL mai bine pentru acest post, scrie-mi fac o linie de :)


2008 02 august 2008

Setarea DOCTYPE în XSL

Saptamana trecuta am creat o progresivă HTML / CSS layout-ul pentru un client, am testat-o ​​în IE6, IE7 si FF 3, părea perfect bine ... până când! aspect a mers mai departe în jos ciclu manufacting. Acesta nu a reuşit. Elemente de aspect de pagină, doar a plecat peste tot loc atunci când structura HTML a fost transformată în XSL si XML aplicate pentru a se ... Bummer!

Nu a putut dormi bine peste week-end, în anticiparea de luni dimineaţă, atunci când voi avea pentru a remedia această SH **. Dar, având acum o Experienta puţin în a face cu aceste tipuri de situaţii (quirks Browser, vreau să spun), am stiut ca a avut de a face cu nimic altceva, dar DOCTYPE .... şi a fost ...

Problemă:
Vrei controlul asupra DOCTYPE, deoarece transformarea va include un DOCTYPE implicit în mod explicit, şi veţi aspect va fi în afara pentru o aruncare.

Soluţie:
XSLT Specificatii oferă metode de ieşire pentru a seta un DOCTYPE de alegere. De asemenea, pentru noi, dezvoltatorii UI, subiectele de interes ar fi metodele de ieşire HTML şi XML metodele de ieşire .

Ei bine! înainte de a te-ai plictisit, aici este fix.

De exemplu, dacă aţi avut următoarea DOCTYPE în versiunea HTML:. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Apoi, în XSL va trebui să aibă următoarele: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

şi, în sfârşit! asiguraţi-vă că nu de ieşire XSLT se supune DOCTYPE-aţi ales.


2008 04 mai 2008

Includeţi în interiorul XSL XSL

Dacă XML / XSL Transformă este domian ta, atunci există momente când ne dorim un peice de cod dinamic pentru a fi utilizate element bibliotecă (să se facă re-utilizabile). Ce vreau să spun, probabil, ar putea fi mai clar, cu acest scenariu de exemplu.

Imaginaţi-vă că sunt crearea unui site web (si folosind XML, XSL transfroms desigur), şi de cele mai multe pagini ar avea un Modul Comentarii. Ei bine! apoi, fie copiaţi sau inseraţi acest cod în fiecare şablon de pagină (pe care I dont au spus, dar face de întreţinere şi revizie un cosmar) sau chiar mai bine, vă creaţi un includ fişiere care ar putea fi tras în cazul în care doriţi vreodată în pagina dvs. ( e) ...
Deci, cum vom crea un fisier XSL include şi o includ în interiorul alt fişier XSL? Iată cum ...

Doar pentru a face lucrurile clar ... aici este lista rapidă de fişiere pe care le-ar crea ... aici, noi vom fi, inclusiv informatii despre fructe şi legume într-o pagină părinte numit alimente.

1. food.xml - XML ​​fişier de date pe care transformarea va fi aplicat
2. food.xsl - principala XSL dosar, care va transforma food.xml nostru
3. inc_fruits.xsl - XSL include fişierul de date care vor face fructe
4. inc_vegtables.xsl - XSL include fişierul de date, care va face vetetables

Nu cred ca am explica mai mult, codurile de elementele de mai sus, va fi de sine explicativ ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<hr/>
</ Corp>
</ Html>
</ Xsl: template>
</ Xsl: stylesheet>


INC_FRUITS.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Descarcă toate fişierele de mai sus aici (252 de descărcări)


2008 04 aprilie 2008

Lucrul cu Atribute nodurilor XML în XSLT

Dacă utilizaţi XML şi XSL, atunci este posibil să fi venit peste un timp, atunci când trebuie să joci în jurul cu atribute si valori de noduri XML în tine XSL. Ele sunt o mulţime de site-uri cu informatii tărăgănat mult timp despre acest lucru, dar nu am gasit au fost scurte şi precise ... Aceasta nu este o TUTORIAL XML / XSL, dar încercarea mea de a pune împreună-un fel de ieftin listă ...

Eşantion XML că vom lucra cu arata ca aceasta ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

Deci, haideţi începe transformarea XML nostru de mai sus folosind XSL

Exemplul 1: Afiseaza valoarea de la un atribut de ales

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

Rezultatul HTML va arata ca

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


Exemplul 2: Looping, prin afişarea şi toate numele XML atributul şi valorile lor

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

Rezultatul HTML va arata ca


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


Descarcă toate fişierele de mai sus aici (245 de descărcări)



Uita-te la acest spatiu, voi păstra actualizarea acestei descoperiri cu noi ...


NDK acasă | Exprimarea IT | Gust Exprimarea | Penmenship Exprimarea | Awe Exprimarea | a mă exprima