2009 7 marzo 2009

Richiamo per le funzioni di Windows onload in Javascript

Heres un altro po 'di trucchi peice Javascript che ho dovuto scavare in giro perché la situazione lo commaned. In uno dei miei siti web, ho avuto questa situazione in cui ho dovuto attuare "windows.onload" due volte. La prima cosa che si è venuto a una mente inesperta come la mia (devo dire onestamente che, dal momento che ho utilizzato framework JavaScript e biblioteche, ho forgotton a fare le cose semplici per conto mio ... triste ma vero), è il seguente metodo ...

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

Mi spiace dirlo, ma, questo non funzionerà ... Non voglio discutere la scienza esecuzione di Javascript tanto ... ma secondo la mia esperienza recente, solo l'ultima funzione (onloadfn3) cattiva volontà effettivamente eseguito.

In situazioni normali, a differenza mia (che mi parlare di un po 'più tardi) ... si può fare una delle seguenti operazioni per eseguire funzioni onload mutliple ....

O qualcosa del genere

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

Per la mia situazione attuale, non posso utilizzare di quanto sopra ...
Perché ho bisogno di chiamare windows.onload due volte, piuttosto che chiamare due funzioni all'interno di una funzione onload single? Ecco rapido sguardo a mia dichiarazione problema ...

"Le mie pagine del sito sono strutturati come il tema WORDPRESS .... vale a dire che è un header.php footer.php comuni e che viene incluso in tutte le pagine del sito. C'è un implementaion funzione onload nel footer.php per fare alcune funzioni onload comuni. E ci sono poche pagine che hanno bisogno di qualcosa del loro OnLoad propria, ad eccezione di quelli con la funzione onload comune. Se mi assegna la funzione di callback direttamente al gestore window.onload, che si impone rispetto alla callback precedentemente assegnati nelle footer.php "

.... Il mio problema è capire :) ?

Bene! ci sono poche soluzioni che ho trovato. Sono tutte molto simili e implementions principalmente di una soluzione data da Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Soluzione:

Basta aggiungere il codice javascript al sito ...

 addLoadEvent funzione (func) {
     var = oldonload window.onload;
     if (typeof window.onload! = 'funzione') {
        window.onload = funzione
     Else {}
        window.onload = function () {
            se (oldonload) {
                   oldonload ()
           }
           func ()
        }
    }
 }

E lo chiamano invece del consueto "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Più codice per essere eseguito su * caricamento della pagina
 }); 

I vantaggi di questo frammento di codice ...
1. In primo luogo, ti permette di avere più eventi windows.onload, chiamato da parti separate del codice, senza overridding la definizione precedente
2. E 'davvero discreto. Può essere collocata in un file con i vostri altri script o in un file separato.
3. Funziona anche se window.onload è già stata impostata.


2008 20 Set 2008

TEXTAREA problema Collapse in XSL / XSLT


PROBLEMA DICHIARAZIONE:
Mi sono imbattuto in un problema per quanto riguarda textarea in XSL. In parole semplici, il problema sorge quando si dispone di un tag vuoto <textarea>, allora lo crollare a <textarea />.
cioè se si ha qualcosa di simile al seguente nel XSL XML ei dati per il valore TEXTAREA, non restituisce nulla ...

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

Come i browser non riconoscono questo, farà sì che il resto del form HTML per eseguire nell'area di testo.

POSSIBILI SOLUZIONI:

Nel XSL, aggiungere un non-breaking-space () dopo il xsl: tag.BEWARE di valore, a prendersi cura di questo spazio si è aggiunto, durante la validazione client-side di questo settore.

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

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

O
Inserire un select="@unknown" <xsl:value-of tag /> che punta a un attributo sconosciuto. Questo forzerà il parser PHP XSLT per generare un testo di apertura e chiusura tag area, anche se non ha nulla in mezzo.

O
Inserire un campo <xsl:text> contenente uno spazio per forzare un tag di chiusura.

Tuttavia, anche se le soluzioni di cui sopra potrebbe sembrare per risolvere il problema, io non sono ancora convinto che hanno ragione e migliori modi per risolvere il problema. Se c'è qualche altro modo migliore di fissare questo cavillo, Vi preghiamo di farcelo sapere.


2008 14 Set 2008

Una varietà di condizioni di prova XSL (Collezione di XSL: IF e XSL: quando le condizioni TEST)

Ogni volta che devo fare un XSL: XSL o IF: quando la prova, devo tornare ai libri di riferimento. Mi pare di non ricordarli. Pensato che ci sarebbe più là fuori, proprio come me, che piuttosto preferiscono avere tutti, possibile, in un posto, pronto per essere riferimento quando necessario.

Per coloro che sono nuovi ... Sintassi per XSL: IF

<xsl:if test="expression">
<- Contenuto: modello ->
</ Xsl: if>

Il xsl: if / xsl: when test Collection
Le condizioni riportate di seguito sono tutti semplici ed autoesplicativa. Quindi credo che non avrà bisogno di molte spiegazioni

<xsl:if test="position()=last()-1">
Questo se l'ultimo elemento, ma uno nella lista!
</ Xsl: if>

<xsl:if test="SALARY> 5000 ">
Lo stipendio di questa persona è maggiore di Rs. 5000
</ Xsl: if>

<xsl:if test="count(JOBS)> 3 ">
Ci sono più di 3 posti di lavoro in questa lista!
</ Xsl: if>

<xsl:if test="(@DEPT ='SALES') o (@JOINYEAR = '1997')">
Questa persona è da reparto vendite o il suo anno di unirsi è il 1997
</ Xsl: if>

<xsl:if test="EXPERIENCE">
Questa persona ha atleast un elemento figlio ESPERIENZA.
</ Xsl: if>

<xsl:if test="@HOBBY">
La persona che ha un attributo hobby.
</ Xsl: if>

Le condizioni stesse di testo potrebbe essere utilizzato per XSL: SCEGLI / XSL: QUANDO così

xsl: scegli

XSLT xsl: choose istruzione è simile a xsl: if, ma ha alcune differenze chiave poche:
• Un elemento xsl: scelga, si può provare per più di una condizione e aggiungere diversi nodi alla struttura ad albero risultato in base alla quale la condizione è vera.
• Un xsl: scegli elemento può avere un modello predefinito da aggiungere alla struttura ad albero risultato se nessuna delle condizioni è vera. (Confronta xsl: if, che non ha equivalenti di una condizione di "altro").
• Il xsl: scegli elemento ha sottoelementi specifici che sono necessari per farlo funzionare, mentre si può inserire qualsiasi ben formate elementi che si desidera all'interno di un xsl: if elemento.

<xsl:choose>
<xsl:when test="boolean-expression">
Fate qualcosa quando questo booleana-espressione è TURE
</ Xsl: when>
<xsl:otherwise> fare qualcos'altro </ xsl: altrimenti>
</ Xsl: choose>


2008 13 agosto 2008

Creazione di token stringa delimitata all'interno di un XSL

Se la vostra esigenza è quella di dividere un valore del nodo in un XML, che contiene una stringa delimitata di valore, in singoli elementi, allora hai raggiunto il posto giusto ... dare un'occhiata al seguente esempio. Se si ha familiarità con un po 'di XML e XSL ... non credo che si avrebbe bisogno di alcuna spiegazione.
Inoltre, questo esempio include l'utilizzo di funzioni come XSL xsl: call-template, xsl: substring-before, xsl: substring-after, se è questo che siete dopo.

XML per essere trasformato (food.xml): -
Si supponga che il compito è quello di tokenize la stringa delimitata da una virgola, nei tag "keywords"

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

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

Inutile dire ... basta cambiare il parametro "delimitr" per il delimitatore di vostra scelta


2008 4 agosto 2008

Un problema con la posizione () in XSL ... o è?

Ho avuto questo problema strage, mentre la creazione di un XSL oggi. Cercato delle risposte in tutta la rete, ma couldnt trovare .... In realtà credo! I furia so qual è il mio problema era, quindi cosa devo cercare?

In ogni caso! Solo nel caso in cui si verifica questo problema stesso troppo e in qualche modo dal potere della Forza è riuscito ad atterrare su questa pagina ... tu mi avrebbe ringraziato tonnellate ... E se avete accidentalmente atterrato su questa pagina per qualche strano destino e vi capita di essere uno sviluppatore XSL, FARE UNA NOTA DI QUESTO ORA, PER IL FUTURO causa, se un giorno, è necessario affrontare questo problema, allora la forza potrebbe non essere con voi.

Problema dichiarazione:
Ho questa XML, dove ci sono due nodi con più elementi in esso e gli elementi tra questi due nodi hanno una corrispondenza uno ad uno. Nell'esempio riportato di seguito, ogni elemento nel nodo <array name="PLAYURL" /> si riferisce (posizione corrispondente) a un elemento in <array nodo 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>

Ora, ho un ciclo in cui i loop through <array name="SITENAME">, e voglio ottenere l 'articolo correlato (nella posizione corrispondente) in <array name="PLAYURL">,

Che cosa si dovrebbe normalmente fare è provare ...

<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!! QUESTO non funzionerà ... Ah!! Mi sorprende ...

Ora probabilmente provare, qualcosa di simile ...

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

E Anche in questo caso non funzionerà ... Ora è grattarsi la testa, cercando di contattare tutti quelli che si pensa un po 'conosce XSL e potrebbe essere di alcun aiuto ... si tenta ogni altra opzione ... e ancora non funzionerà ... Beh! Questo è quello che è successo a me atleast ...

DONT DISPERAZIONE! PROVATE QUESTO

<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 PERCHE 'FUNZIONA. Perchè non ho una retta ragione ... se lo fate! Si prega di far cadere un commento. Potrebbe essere molto utile. Anche! se avete una migliore titolo per questo post, fare mi mandi due righe :)


2008 2 agosto 2008

Impostazione del DOCTYPE in XSL

La settimana scorsa ho creato un progressive HTML / CSS layout per un cliente, testato in IE6, IE7 e FF 3, sembrava perfettamente bene ... fino a! il layout è andato più in basso del ciclo manufacting. Non è riuscito. Elementi di layout di pagina appena andato in tutto il luogo in cui il layout HTML è stato convertito in XML e XSL applicato ... Bummer!

Non riuscivo a dormire bene durante il fine settimana, in previsione di Lunedi mattina, quando dovrò risolvere questo SH. ** Ma ora experince avere un po 'nel trattare con questo tipo di situazioni (Quirks browser, voglio dire), sapevo che aveva a che fare con niente altro che DOCTYPE .... ed è stato ...

Il problema:
Volete il controllo del DOCTYPE, dal momento che la vostra trasformazione include un DOCTYPE di default in modo esplicito, e il layout sarà fuori per un lancio.

La soluzione:
XSLT specifiche fornisce i metodi di output per impostare un DOCTYPE la scelta di. Inoltre, per noi sviluppatori dell'interfaccia utente, i temi di interesse sarebbero i metodi di output HTML e metodi di output XML .

Bene! prima ci si annoia, ecco la correzione.

Per esempio, se tu avessi il DOCTYPE seguente versione HTML:. -

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

Poi nel XSL si dovrebbe disporre di: -

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

e, infine! facciamo in modo l'output XSLT obbedisce al DOCTYPE che avete scelto.


2008 4 MAGGIO 2008

Includere all'interno XSL XSL

Se XML / XSL Trasforma il tuo domian, poi ci sono momenti in cui ci vogliono un pezzo del codice dinamico da utilizzare elemento di libreria (da effettuarsi riutilizzabile). Quello che voglio dire, probabilmente potrebbe essere reso più chiaro con questo scenario di esempio.

Immaginate di creare un sito web (e l'utilizzo di XML, XSL transfroms ofcourse) e la maggior parte delle pagine avrebbe un modulo commenti. Bene! allora o si copia o incolla il codice in ogni modello di pagina (che io non sono dire, ma fare la manutenzione e rielaborare un incubo) o ancora meglio, si crea un file di inclusione che potrebbe essere tirato in dove mai lo vuoi nella tua pagina ( s) ...
Così come possiamo creare un file XSL INCLUDE e includerlo in un altro file XSL? Ecco come ...

Giusto per fare chiarezza ... ecco breve lista di file che si creerebbe ... qui, ci saranno anche informazioni su frutta e verdura in una pagina padre chiamato cibo.

1. food.xml - file di dati XML su cui la trasformazione sarà applicato
2. food.xsl - file principale XSL, che trasformerà la nostra food.xml
3. inc_fruits.xsl - XSL file di inclusione che il rendering dei dati frutta
4. inc_vegtables.xsl - XSL file di inclusione che il rendering dei dati vetetables

Non credo che ho spiegare molto, i codici per gli elementi di cui sopra, sarà auto esplicativo ...

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>

Scarica tutti i file qui sopra (256 downloads)


2008 4 aprile 2008

Lavorare con gli attributi dei nodi XML in XSLT

Se si utilizza XML e XSL, allora si potrebbe sono imbattuto in un tempo, quando si deve giocare con gli attributi ei valori di nodi XML in voi XSL. Essi sono un sacco di siti con informazioni fiato lungo su questo, ma non ho trovato erano brevi e precise ... Questo non è un XML / XSL TUTORIAL, ma il mio tentativo di mettere insieme-una sorta di trucco lista ...

L'XML di esempio che ci lavoro con simile a questa ...

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

Quindi, consente di iniziare a trasformare la nostra in precedenza XML utilizzando XSL

Esempio 1: visualizzazione valore di un attributo scelto

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

Risultato HTML sarà simile a

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


Esempio 2: la ripetizione ciclica di e la visualizzazione di tutti i nomi degli attributi XML ei loro valori

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

Risultato HTML sarà simile a


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


Scarica tutti i file qui sopra (248 downloads)



Tieni d'occhio questo spazio, terrò questo aggiornamento con nuove scoperte ...


NDK casa | Esprimendo IT | Gusto Esprimendo | Penmenship Esprimendo | Awe Esprimendo | esprimermi