2009 7 març 2009

Trucar a múltiples funcions de Windows onload en Javascript

Aquí està un altre tros petit d'engany Javascript que havia de cavar al seu voltant perquè la situació ho commaned. En un dels meus llocs web, he tingut aquesta situació en què vaig haver de posar en pràctica "windows.onload" dues vegades. La primera cosa que va venir al cap una experiència com la meva (he de dir honestament que, des que he estat utilitzant frameworks de JavaScript i les biblioteques, he oblidat de fer les coses simples pel meu compte ... trist però cert), és el següent mètode ...

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

Em sap greu dir-ho, però, aquest treball costum ... no vull parlar sobre la ciència execució de Javascript molt ... però d'acord a la meva experiència recent, només l'última funció (onloadfn3) la mala voluntat s'executa realment.

En situacions normals, a diferència de la meva (que vaig a parlar una mica més tard) ... pots fer el següent per executar funcions mutliple onload ....

O alguna cosa com això

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

Per la meva situació actual, no pot utilitzar qualsevol dels anteriors ...
Per què he de trucar a windows.onload dues vegades, en lloc de trucar a dues funcions dins d'una funció onload sola? Aquí és ràpida ullada a la meva declaració del problema ...

"Els meus pàgines del lloc s'estructura com el tema de WordPress .... és a dir, hi ha un header.php i footer.php comuns que s'inclouen en totes les pàgines del lloc. Hi ha una funció de la Implementació onload en els footer.php per fer algunes funcions comunes onload. I hi ha poques pàgines que necessiten una mica de la seva pròpia onload, a més dels realitzats per la funció onload comú. Si assigno funció de callback directament al controlador window.onload, serà passar per sobre de les devolucions de trucada assignats prèviament en els footer.php "

.... S'entén el meu problema :) ?

Bé! hi ha poques solucions que es va trobar. Tots ells són molt similars i sobretot implementions d'una solució donada per Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Solució:

Només cal afegir el codi javascript per al lloc ...

 funció de addLoadEvent (func) {
     var oldonload = window.onload;
     if (typeof window.onload! = 'function') {
        window.onload = funció
     Else {}
        window.onload = function () {
            if (oldonload) {
                   oldonload ()
           }
           func ()
        }
    }
 }

I en diuen en lloc de l'habitual "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Més codi s'executi en càrrega de la pàgina *
 }); 

Els avantatges d'aquest fragment de codi ...
1. En primer lloc, que li permet disposar de múltiples esdeveniments windows.onload, anomenada a partir de peces separades del seu codi, sense anul · lant la definició anterior
2. És molt discret. Es pot col · locar en un arxiu amb les seqüències d'ordres d'altres o en un arxiu separat.
3. Funciona fins i tot si window.onload ja s'ha establert.


2008 20 setembre 2008

TEXTAREA problema de col · lapse en XSL / XSLT


Enunciat del problema:
Em vaig trobar amb aquest problema en relació amb àrees de text en un XSLs. En paraules simples, el problema sorgeix quan es té una etiqueta <textarea> en blanc, llavors es va a col · lapsar a <textarea />.
és a dir, si tenia alguna cosa com el següent en el seu XSL i les dades XML per al valor de TEXTAREA, no torna res ...

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

Com els navegadors no reconeixen això, farà que la resta del formulari HTML per executar-se en l'àrea de text.

POSSIBLES SOLUCIONS:

En el XSL, afegiu un non-breaking-espai () després que el xsl: tag.BEWARE de valor, per tenir cura d'aquest espai extra que s'afegeix, durant la validació del costat del client d'aquest camp.

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

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

O
Inserir una etiqueta de <xsl:value-of select="@unknown" /> apuntant a un atribut desconegut. Això obligarà a l'intèrpret PHP XSLT per generar un text d'obertura i tancament de l'etiqueta d'àrea, encara que no té res en el medi.

O
Inserir un camp de <xsl:text> que conté un espai per obligar una etiqueta de tancament.

No obstant això, tot i les solucions esmentades anteriorment pot semblar per solucionar el problema, encara no estic convençut que tenen raó i les millors maneres de solucionar-ho. Si no hi ha altra manera millor de fixar aquesta peculiaritat, si us plau contacteu amb nosaltres.


2008 14 setembre 2008

Una varietat de condicions de prova XSL (Col · lecció de xsl: if i xsl: when condicions de prova)

Cada vegada que he de fer un XSL: SI o XSL: Quan la prova, he de tornar als llibres de referència. Em sembla que mai els recordo. Vaig pensar que hi hauria més enllà, igual que jo, que preferirien tenir a tots ells, és possible, en un sol lloc, a punt per ser referits quan sigui necessari.

Per a aquells que són nous ... Sintaxi XSL: SÍ

<xsl:if test="expression">
<- Contingut: Plantilla ->
</ Xsl: if>

El xsl: if / xsl: when Col · lecció de prova
Les següents condicions són senzilles i explica per si mateix. Així que crec que no necessita molta explicació

<xsl:if test="position()=last()-1">
Això si és l'últim element, però un a la llista!
</ Xsl: if>

<xsl:if test="SALARY> 5000 ">
El salari d'aquesta persona és més gran que Rs. 5000
</ Xsl: if>

<xsl:if test="count(JOBS)> 3 ">
Hi ha més de 3 llocs de treball en aquesta llista!
</ Xsl: if>

<xsl:if test="(@DEPT ='SALES') o (@JOINYEAR '1997')"> =
Aquesta persona és del departament de vendes o el seu any d'inscripció és 1997
</ Xsl: if>

<xsl:if test="EXPERIENCE">
Aquesta persona té almenys un element secundari EXPERIÈNCIA.
</ Xsl: if>

<xsl:if test="@HOBBY">
La persona que té un atribut afició.
</ Xsl: if>

Les condicions d'un mateix text podria ser utilitzat per xsl: choose / xsl: when, així

xsl: choose

XSL XSLT: tria la instrucció és similar a xsl: si, però té algunes diferències claus:
• Un element xsl: choose pot provar més d'una condició i afegir diferents nodes en l'arbre resultat sobre la base que la condició és vertadera.
• Un xsl: choose element pot tenir una plantilla per defecte per afegir l'arbre de resultats, si cap de les condicions són veritables. (Compareu amb xsl: si, que no té equivalent d'una "cosa" condició.)
• El xsl: choose element té sub-elements específics que són necessaris perquè funcioni, mentre que vostè pot posar tots els elements ben formats que vulgueu dins d'un element xsl: if.

<xsl:choose>
<xsl:when test="boolean-expression">
Fer alguna cosa quan aquest boolean expressió és TURA
</ Xsl: when>
<xsl:otherwise> És alguna cosa més </ xsl: si no>
</ Xsl: choose>


2008 13 agost 2008

Encadenament cadena delimitada dins d'un XSL

Si el seu requeriment és per dividir un valor de node d'un XML, que conté una cadena delimitada del valor, en termes individuals, llavors has arribat al lloc correcte ... fer una ullada a l'exemple. Si vostè està familiaritzat amb una mica de XML i XSL ... No crec que vostè hauria de donar cap explicació.
A més, aquest exemple inclou l'ús de funcions com el XSL xsl: call-template, xsl: substring-before, xsl: substring-after, si això és el que està després.

XML per ser transformat (food.xml): -
Suposem que la tasca és per escurçar la cadena delimitada per comes, en els de l'etiqueta "paraules clau"

<?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>

Resultant de sortida HTML: -

<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>

No cal dir ... només canviar el paràmetre "delimitr" per al delimitador de la seva elecció


2008 4 agost 2008

Un problema amb la posició () en XSL ... o no?

Vaig tenir aquest problema en crear un Strage XSL avui. Va buscar respostes en tota la xarxa, però no podia trobar cap .... En realitat, suposo! Jo sé quina és la meva força problema era, llavors, què he de buscar?

De tota manera! Només en cas de tenir aquest mateix problema també i d'alguna manera pel poder de la força que va aconseguir aterrar en aquesta pàgina ... que m'ho agrairia tones ... I si alguna vegada ha accidentalment va aterrar en aquesta pàgina per alguna estranya sort i passar a ser un desenvolupador XSL, NO FACI UNA NOTA D'AQUESTA ARA, PER AL FUTUR causa, Si algun dia, s'enfronta a aquest problema, llavors la força no podria estar amb vostès.

Enunciat del problema:
Tinc aquest XML, on hi ha dos nodes amb diversos elements en ell i els elements entre aquests dos nodes tenen una correspondència un a un. En el següent exemple, cada element en el node <array name="PLAYURL" /> es refereix (posició corresponent) a un element en el node de <array 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>

Ara, tinc un bucle, en el qual recórrer <array name="SITENAME">, i vull aconseguir l'article relacionat (en la posició corresponent) en <array name="PLAYURL">,

El que normaly tractaria de fer és ...

<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>

EM SAP GREU! Això funcionarà ... Ah!! Gratament ...

Ara és probable que li agradaria provar, alguna cosa com això ...

<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 De nou, això no funcionarà ... Ara que rascar el cap, tractant de posar-se en contacte amb tots els que vostè pensa que sap alguna cosa de XSL i podria ser d'alguna ajuda ... intentar totes les opcions d'altres ... i encara funciona costum ... Bé! Això és el que em va passar el atleast ...

EXCLOURE LA DESESPERACIÓ! LA PROVA

<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 ASK ME per què funciona. Perquè no tinc una raó ben ... si ho fas! Si us plau deixa un comentari. Pot ser molt útil. També! si vostè té un millor títol per aquest post, el mándenme una línia de :)


2008 2 agost 2008

Ajust de la DOCTYPE en XSL

La setmana passada he creat un progressiu HTML / CSS de disseny per a un client, provat en IE6, IE7 i FF 3, semblava estar perfectament bé ... fins que aparegui! el disseny va anar més enllà pel cicle de manufacting. No va poder. Els elements de disseny de pàgina acaba d'anar per tot el lloc quan el disseny HTML es va convertir en XSL i XML aplicat a ell ... Xerraire!

No podia dormir bé durant el cap de setmana, en previsió del matí de dilluns, quan vaig a haver de solucionar aquest problema SH **. Però ara té una mica de experincia en el tractament d'aquest tipus de situacions (no estàndard del navegador, vull dir), jo sabia que tenia a veure amb res més que DOCTYPE .... i va ser ...

El problema:
Vostè vol que el control sobre el DOCTYPE, ja que la seva transformació s'inclouen un DOCTYPE per defecte de forma explícita, i el disseny estarà fora per un sorteig.

La solució:
Fitxa XSLT proporciona mètodes de producció per establir un DOCTYPE de l'elecció. A més, per a nosaltres els desenvolupadors de la interfície d'usuari, els temes d'interès serien els mètodes de sortida HTML i XML mètodes de producció .

Bé! abans que t'avorreixes, aquí està la solució.

Per exemple, si vostè tenia el DOCTYPE següent en la seva versió HTML:. -

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

Després, en el XSL que hauria de tenir el següent: -

<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 Per fi! Com assegurar-se que la seva sortida obeeix a la XSLT DOCTYPE que vostè ha triat.


2008 4 maig 2008

Incloure dins de XSL XSL

Si XML / XSL transforma és el seu domian, llavors hi ha moments en que volen un tros de codi dinàmic per a ser utilitzat element de la biblioteca (que es va fer re-utilitzables). El que vull dir, probablement podria ser més clar amb aquest escenari d'exemple.

Imagini que vostè està creant un lloc web (i l'ús d'XML, XSL transfroms és clar) i la majoria de les pàgines que tenen un mòdul de comentaris. Bé! llavors o bé copiar o enganxar aquest codi en totes les plantilles de pàgina (que jo no tenen veu, però que el manteniment i la modificació d'un malson) o millor encara, crear un arxiu d'inclusió que pot ser tirat en allà on vostè ho desitja a la seva pàgina ( s) ...
Així que com podem crear un arxiu XSL INCLUDE i incloure'l dins d'un altre arxiu XSL? Aquí és com ...

Només per deixar les coses clares ... aquí està la llista ràpida dels arxius que vostè cregui ... aquí, estarem incloent informació sobre les fruites i verdures en una pàgina principal anomenada dels aliments.

1. food.xml - arxiu de dades XML en el qual s'aplica la transformació
2. food.xsl - principal arxiu XSL que transformarà la nostra food.xml
3. inc_fruits.xsl - XSL arxiu d'inclusió que es processen les dades de les fruites
4. inc_vegtables.xsl - XSL arxiu d'inclusió que es processen les dades vetetables

No crec que he d'explicar molt, els codis dels elements anteriors, s'explica per si mateix ...

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/>
</ Body>
</ 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>

Descarregar tots els arxius anteriors aquí (252 descàrregues)


2008 4 abril 2008

Treballar amb atributs de node XML en XSLT

Si utilitza XML i XSL, a continuació, que podria haver arribat a través d'un temps, quan s'ha de jugar una mica amb els atributs i valors dels nodes XML que XSL. Són un munt de llocs amb informació sobre aquest llarg alè, però no vaig trobar van ser breus i precisos ... Això no és una TUTORIAL XML / XSL, però el meu intent de posar en conjunt-una mena de llista de trucs ...

El XML d'exemple que treballarem amb aquest aspecte ...

<?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>

Així que començarem a transformar la nostra per sobre de XML amb XSL

Exemple 1: Visualització de valor en un atribut seleccionat

<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>

Resultat HTML es veurà així

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


Exemple 2: a través de bucle i la visualització de tots els noms d'atributs XML i els seus valors

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

Resultat HTML es veurà així


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


Descarregar tots els arxius anteriors aquí (245 descàrregues)



Miri aquest espai, seguiré actualitzant aquest amb els nous descobriments ...


NDK a casa | Expressant IT | Boca Expressant | Penmenship Expressant | Awe Expressant | expressar-me