2009 7 maart 2009

Met meerdere Windows onload functies In Javascript

Heres een andere kleine peice van Javascript bedrog dat ik moest graven rond omdat de situatie commaned het. In een van mijn websites, ik had deze situatie, waarin ik moest een "windows.onload" twee keer uit te voeren. Het eerste wat dat zou kwam er een onervaren geest als de mijne (ik moet eerlijk zeggen dat, sinds ik met behulp van javascript frameworks en libraries, heb ik forgotton om eenvoudige dingen te doen op mijn eigen ... triest maar waar), is de volgende methode ...

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

Sorry om te zeggen, maar dit zal niet werken ... niet wilt met de uitvoering wetenschap van Javascript veel te bespreken ... maar volgens mijn recente ervaring, alleen de laatste functie (onloadfn3) ziek zal daadwerkelijk worden uitgevoerd.

In normale omstandigheden, in tegenstelling tot de mijne (die later zal ik het hebben over een beetje) ... je zou kunnen doen op een van de volgende handelingen uit om mutliple onload functies uit te voeren ....

Of iets dergelijks

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

Voor mijn huidige situatie, kan ik ook niet gebruik maken van de bovenstaande ...
Waarom heb ik nodig om windows.onload twee keer te bellen, in plaats van dat te roepen twee functies binnen een onload-functie? Hier is een snelle blik op mijn probleemstelling ...

"Mijn site's zijn gestructureerd als de WordPress thema .... dwz er is een veel voorkomende header.php en footer.php dat wordt opgenomen in alle pagina's. Er is een onload functie wijze uitvoering in de footer.php op enkele veelgestelde onload functies uit te voeren. En er zijn enkele pagina's die moeten iets van hun eigen OnLoad, behalve die die door het gemeenschappelijke onload functie. Als ik wijs callback functie rechtstreeks aan de window.onload handler, zal het over-rijden eerder toegewezen callbacks in de footer.php "

.... Is mijn probleem begrepen :) ?

Nou! er zijn weinig oplossingen die ik vond. Ze zijn allemaal erg op elkaar lijken en vooral implementions van een oplossing gegeven door Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Oplossing:

Voeg eenvoudig deze javascript-code naar site ...

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

En noem het in plaats van de gebruikelijke "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Meer code kan worden uitgevoerd laden van de pagina *
 }); 

Voordelen van deze code snippet ...
1. In de eerste, Het laat je meerdere windows.onload evenementen, genoemd van aparte delen van uw code, zonder overridding de vorige definitie
2. Het is echt onopvallend. Het kan worden geplaatst in een bestand met uw andere scripts of in een apart bestand.
3. Het werkt zelfs als window.onload al is ingesteld.


2008 20 september 2008

TEXTAREA Collapse probleem in XSL / XSLT


Probleemstelling:
Ik kwam dit als een probleem in verband met tekstvelden in XSLs. In eenvoudige woorden, het probleem doet zich voor wanneer je een lege <textarea> tag, dan zal het instorten het aan <TEXTAREA />.
dwz als je er iets mee als het volgende in uw XSL en de XML-gegevens voor het TEXTAREA waarde, keert niets ...

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

Omdat browsers herkennen dit niet, zal het ertoe leiden dat de rest van het formulier HTML te lopen in het tekstgebied.

MOGELIJKE OPLOSSINGEN:

In de XSL, voeg dan een non-breaking-space () na de xsl: value tag.BEWARE, om te zorgen voor deze extra ruimte die u hebt toegevoegd, tijdens de client side validaties van dit gebied.

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

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

Of
Plaats een <xsl:value-of select="@unknown" /> tag verwijst naar een onbekende attribuut. Dit dwingt de PHP XSLT parser voor een openen en sluiten tekstgebied tag te genereren, ook al heeft het niets daar tussenin.

Of
Plaats een <xsl:text> veld dat een ruimte om een ​​afsluitende tag te forceren.

Echter, hoewel de hierboven genoemde oplossingen lijkt om het probleem op te lossen, ben ik nog steeds niet van overtuigd dat ze gelijk hebben en de beste manieren om het probleem te verhelpen. Als er een andere betere manier om de vaststelling van dit gril, laat het ons weten.


2008 14 september 2008

Een verscheidenheid van XSL Test Voorwaarden (verzamelen van XSL: IF en XSL: ALS TEST Voorwaarden)

Elke keer als ik een XSL doen: IF of XSL: Wanneer de test, ik ga terug naar de naslagwerken. Ik heb nooit lijken ze te onthouden. Dacht dat er zou zijn die er zijn, net als ik, die liever de voorkeur aan alle van hen, mogelijk te houden, op een plaats, klaar om te worden doorverwezen als dat nodig is.

Voor degenen die nieuw zijn ... Syntax voor XSL: IF

<xsl:if test="expression">
<- Inhoud: template ->
</ Xsl: if>

Het xsl: if / xsl: wanneer Test Collection
De onderstaande voorwaarden zijn allemaal eenvoudig en spreekt voor zichzelf. Dus ik denk dat het zal niet veel uitleg nodig

<xsl:if test="position()=last()-1">
Dit als de laatste, maar een element in de lijst!
</ Xsl: if>

<xsl:if test="SALARY> 5000 ">
Het salaris van deze persoon is groter dan Rs. 5000
</ Xsl: if>

<xsl:if test="count(JOBS)> 3 ">
Er zijn meer dan 3 banen in deze lijst!
</ Xsl: if>

<xsl:if test="(@DEPT ='SALES') of (@JOINYEAR = '1997')">
Deze persoon is uit de verkoop afdeling of zijn jaar na indiensttreding bij is 1997
</ Xsl: if>

<xsl:if test="EXPERIENCE">
Deze persoon heeft tenminste een ervaring kind element.
</ Xsl: if>

<xsl:if test="@HOBBY">
De persoon heeft een hobby attribuut.
</ Xsl: if>

Dezelfde tekst voorwaarden kunnen worden gebruikt voor XSL: KIES / XSL: WANNEER en

xsl: kies

XSLT's xsl: kies instructie is vergelijkbaar met xsl: als maar heeft een paar belangrijke verschillen:
• Een xsl: choose element kan testen voor meer dan een voorwaarde en voeg verschillende knooppunten aan het resultaat boom op basis waarvan voorwaarde waar is.
• Een xsl: kies element kan een standaard sjabloon toe te voegen aan het resultaat boom als geen van de voorwaarden wordt voldaan hebben. (Vergelijk xsl: als die geen equivalent van een "anders" toestand).
• De xsl: kies element heeft specifieke subelementen die nodig zijn om het te laten werken, terwijl u kunt elke goed gevormde elementen die u wilt binnenkant van een xsl: if element.

<xsl:choose>
<xsl:when test="boolean-expression">
Doe iets als dit boolean-expressie is TUUR
</ Xsl: bij>
<xsl:otherwise> iets anders doen </ xsl: anders>
</ Xsl: kies>


2008 13 augustus 2008

Tokenizering gescheiden tekenreeks binnen een XSL

Als uw vereiste is dat splitsen een knooppunt waarde in een XML, dat een gescheiden tekenreeks van waarde bevat, in individuele items, dan bent u aan het juiste adres ... eens een kijkje op het onderstaande voorbeeld. Als u bekend bent met een beetje van XML en XSL ... ik denk niet dat je enige uitleg nodig hebben.
Ook dit voorbeeld omvat het gebruik van XSL-functies zoals xsl: call-template, xsl: substring-voor, xsl: substring-after, als dat is wat u zoekt.

XML worden omgezet (food.xml): -
Neem aan dat de taak is om de string gescheiden tokenize door een komma, in de de 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>

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

Onnodig te zeggen dat ... verander gewoon de parameter "delimitr" om de afbakening van uw keuze


2008 04 augustus 2008

Een probleem met positie () in XSL ... of is het?

Ik had dit strage probleem bij het creëren van een XSL vandaag. Gezocht naar antwoorden in het net, maar couldnt vinden elke .... Eigenlijk denk ik! Ik dint weet wat mijn probleem was, dus wat moet ik op letten?

Hoe dan ook! Voor het geval dat je dit heel hetzelfde probleem ook en een of andere manier door de kracht van de kracht die je weten te landen op deze pagina ... zou je me bedanken ton ... En als u per ongeluk kwam op deze pagina voor een of andere vreemde lot en u zich ook bevindt een XSL-ontwikkelaar, DO NOW noteer DIT VOOR DE TOEKOMST oorzaak, Als op een dag, je gezicht deze kwestie, dan is de FORCE misschien niet bij je zijn.

Probleemstelling:
Ik heb dit XML, waar er twee knooppunten met meerdere items in deze en de voorwerpen die tussen deze twee nodes hebben een een op een correspondentie. In het onderstaande voorbeeld, elk item in het knooppunt <array name="PLAYURL" /> betrekking heeft (overeenkomstige positie) naar een item in het knooppunt <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>

Nu heb ik een lus, waar ik doorlus <array name="SITENAME">, en ik wil voor het betreffende item (op de desbetreffende positie) te krijgen in <array name="PLAYURL">,

Wat u zou zich normaal gesproken proberen te doen is ...

<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! Werkt deze functie nog ... Ach! Verrast ...

Nu zou u waarschijnlijk wilt proberen, zoiets als dit ...

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

En Ook dit zal niet werken ... Nu heb je krassen op je hoofd, in een poging om iedereen die je denkt kent een aantal XSL contact op te nemen en zou kunnen zijn van enige hulp ... je probeert om de andere optie ... en nog steeds het zal werken ... Nou! Dat is wat er gebeurd is voor mij tenminste ...

DONT wanhoop!! TRY THIS

<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 waarom het werkt. Omdat ik niet een juiste reden hebben ... als je dat doet! Gelieve een reactie te laten vallen. Het kan erg handig worden. Ook! als je een betere titel voor dit bericht, doe stuur me een lijn :)


2008 02 augustus 2008

Het instellen van de DOCTYPE in XSL

Vorige week heb ik een progessieve HTML / CSS-lay-out voor een klant, getest in IE6, IE7 en FF 3, leek prima ... tot! de lay-out ging verderop in de manufacting cyclus. Het is mislukt. Pagina-indeling elementen ging gewoon over de plaats als de HTML-lay-out werd omgezet in XSL en XML toegepast ... Bummer!

Kan niet ok slapen in het weekend, in afwachting van maandagochtend, als ik moet deze sh ** op te lossen. Maar nu met een beetje experince in het omgaan met dit soort situaties (Browser Quirks, ik bedoel), wist ik dat het te maken had met niets anders dan DOCTYPE .... en het was ...

Het probleem:
U wilt controle over het DOCTYPE, want jullie transformatie wordt een standaard DOCTYPE expliciet op te nemen, en je lay-out zal worden voor een toss.

De oplossing:
XSLT specs biedt uitvoermethoden het instellen van een van de DOCTYPE naar keuze. Ook voor ons UI ontwikkelaars, zouden de onderwerpen van belang kunnen zijn HTML-uitvoer methoden en XML-uitvoer methoden .

Nou! voordat je verveeld, hier is de oplossing.

Voor bijvoorbeeld, als je de volgende DOCTYPE in je HTML-versie:. -

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

Dan in de XSL u zou hebben om de volgende zijn: -

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

en tot slot! Zorg er wel voor uw XSLT-uitgang gehoorzaamt aan de DOCTYPE u hebt gekozen.


2008 04 mei 2008

Inclusief XSL binnen XSL

Als XML / XSL-transformaties is uw domian, dan zijn er momenten waarop we een stuk van dynamische code te gebruiken bibliotheekitem (gemaakt worden herbruikbare) willen. Wat ik bedoel, kan waarschijnlijk worden gemaakt met dit voorbeeld duidelijk scenario.

Stel je voor dat het maken van een website (en het gebruik van XML, XSL transfroms natuurlijk) en de meeste van de pagina's zou een Opmerkingen Module hebben. Nou! vervolgens te kopiëren of deze code plakken in elke pagina template (die ik dont have zeggen, maar maken het onderhoud en rework een nachtmerrie), of nog beter, maak je een INCLUDE-bestand dat kan in waar je zelf wil worden getrokken in uw pagina ( s) ...
Dus Hoe creëren we een XSL INCLUDE-bestand en dit opnemen in een andere XSL-bestand? Hier is hoe ...

Gewoon om dingen duidelijk maken ... hier is een snelle lijst met bestanden die je zou maken ... hier, zullen we ook informatie over fruit en groenten in een bovenliggende pagina genaamd voedsel.

1. food.xml - XML-gegevensbestand, waarop de transformatie zal worden toegepast
2. food.xsl - belangrijkste XSL-bestand, dat onze food.xml zal transformeren
3. inc_fruits.xsl - XSL-bestand dat onder meer zal maken vruchten gegevens
4. inc_vegtables.xsl - XSL-bestand dat onder meer zal maken vetetables gegevens

Ik denk niet dat ik moet uitleggen veel, de codes voor bovenstaande elementen, zal zijn spreekt voor zichzelf ...

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>

Download al deze bestanden hier (252 downloads)


2008 04 april 2008

Het werken met XML-Node attributen in XSLT

Als u XML en XSL, dan kun je misschien zijn gekomen over een tijd, wanneer je moet spelen met attributen en waarden van de XML-nodes in je XSL. Ze zijn veel sites met lange adem info over deze, maar geen enkele vond ik waren kort en precies ... Dit is geen XML / XSL tutorial, maar mijn poging om put-samen een soort cheat lijst ...

Het voorbeeld-XML-dat we werken met ziet er als volgt ...

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

Dus laten we beginnen met de transformatie van onze bovenstaande XML met behulp van XSL

Voorbeeld 1: Weergave van waarde op een gekozen kenmerk

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

HTML resultaat eruit zal zien

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


Voorbeeld 2: doorlussen en weergeven van alle XML-attribuut Namen en hun waarden

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

HTML resultaat eruit zal zien


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


Download al deze bestanden hier (245 downloads)



Watch this space, zal ik een update van deze nieuwe bevindingen ...


NDK huis | Te drukken | Het uiten van Smaak | Het uiten van Penmenship | Het uiten van Awe | Het uiten van Myself