2009 7 marts 2009

Opkald til flere Windows-onload funktioner i Javascript

Heres en anden lille peice af Javascript fup, at jeg var nødt til at grave rundt, fordi situationen commaned det. I en af ​​mine hjemmesider, havde jeg denne situation, hvor jeg var nødt til at gennemføre "windows.onload" to gange. Den første ting, der ville kom til en uerfaren sind som mit (jeg må ærligt sige, at siden jeg har brugt javascript rammer og biblioteker, har jeg forgotton til at gøre simple ting på min egen ... trist, men sandt), er følgende metode ...

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

Ked af at sige, men plejer dette arbejde ... ikke ønsker at diskutere udførelsen videnskab Javascript meget ... men efter min seneste erfaringer, (onloadfn3) kun den sidste funktion vil syge rent faktisk bliver udført.

I normale situationer ... i modsætning til mine (som jeg vil tale om lidt senere) kan du gøre et af følgende for at udføre mutliple onload funktioner ....

Eller noget som dette

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

For min nuværende situation, kan jeg ikke bruge nogen af ​​ovenstående ...
Hvorfor skal jeg kalde windows.onload to gange, i stedet at kalde to funktioner inden for en enkelt onload funktion? Her er hurtigt kig på min problemformulering ...

"Mit websted sider er opbygget som WordPress tema .... dvs der er en fælles header.php og Footer.php der bliver inkluderet i alle de websider. Der er en onload funktion gennemfoerelse sted i Footer.php til at gøre nogle almindelige onload funktioner. Og der er få sider, der skal noget af deres egen OnLoad, bortset fra dem, udført af den fælles onload funktion. Hvis jeg tildeler callback funktion direkte til window.onload handleren, vil det over-rider tidligere tildelt tilbagekald i Footer.php "

.... Er mit problem forstået :) ?

Nå! der er få løsninger, som jeg fandt. De er alle meget ens og hovedsagelig implementions en løsning givet ved Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Opløsning:

Du skal blot tilføje denne javascript kode til websted ...

 Funktionen addLoadEvent (funk) {
     var oldonload = window.onload;
     if (typeof window.onload! = 'funktion') {
        window.onload = funk
     } Else {
        window.onload = function () {
            if (oldonload) {
                   oldonload ()
           }
           funk ()
        }
    }
 }

Og kalder det i stedet for den sædvanlige "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Mere kode til at køre på side belastning *
 }); 

Fordele ved dette kodestykke ...
1. Primært, det kan du have flere windows.onload begivenheder, kaldes fra separate dele af din kode, uden at overridding den tidligere definition
2. Det er virkelig diskret. Det kan placeres i en fil med dine andre scripts eller i en separat fil.
3. Det virker selvom window.onload allerede er blevet indstillet.


2008 September 20, 2008

TEXTAREA Skjul problem i XSL / XSLT


PROBLEM ERKLÆRING:
Jeg løb ind i et problem, med hensyn til tekstområder i XSLs. I simple ord, opstår problemet, når du har en tom <textarea> tag, så det vil kollapse det <TEXTAREA />.
dvs hvis du havde noget i retning af følgende i din XSL og XML data for TEXTAREA værdi, returnerer ingenting ...

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

Da browsere ikke anerkender dette, vil det medføre resten af ​​formularen HTML til at løbe ind i tekstområdet.

Mulige løsninger:

I XSL, tilføje en non-breaking-rum () efter xsl: value tag.BEWARE, til at tage sig af denne ekstra plads du har tilføjet, under klientsiden validering af dette felt.

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

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

Eller
Indsæt en <xsl:value-of select="@unknown" /> tag peger på en ukendt attribut. Dette vil tvinge PHP XSLT parser til at generere en åbning og lukning tekstområde tag, selv om det ikke har noget i mellem.

Eller
Indsæt en <xsl:text> felt, der indeholder et rum til at tvinge en afsluttende tag.

Men selvom de ovennævnte løsninger kan synes at løse problemet, er jeg stadig ikke overbevist om, at de har ret og de bedste måder at løse det. Hvis der er nogen anden bedre måde at fastsætte denne særhed, Please lad os det vide.


2008 14 SEP 2008

En række af XSL prøvningsbetingelser (Indsamling af XSL: IF og XSL: Når Test betingelser)

Hver gang jeg nødt til at gøre en XSL: IF eller XSL: NÅR test, jeg går tilbage til opslagsværker. Jeg har aldrig synes at huske dem. Troede, der ville være mere derude, ligesom mig, der ville hellere foretrække at have dem alle, det er muligt, på et sted, klar til at blive nævnt når det er nødvendigt.

For dem, der er nye ... Syntaks for XSL: IF

<xsl:if test="expression">
<- Indhold: skabelon ->
</ Xsl: if>

Den xsl: hvis / xsl: Når Test Collection
Nedenstående betingelser er alle simple og selvforklarende. Så jeg tror, ​​det vil ikke brug for megen forklaring

<xsl:if test="position()=last()-1">
Dette hvis den sidste, men et element i listen!
</ Xsl: if>

<xsl:if test="SALARY> 5000 ">
Lønnen for denne person er større end Rs. 5000
</ Xsl: if>

<xsl:if test="count(JOBS)> 3 ">
Der er mere end 3 arbejdspladser i denne liste!
</ Xsl: if>

<xsl:if test="(@DEPT ='SALES') eller (@JOINYEAR = '1997')">
Denne person er fra salgsafdelingen eller hans år efter tiltrædelsen, er 1997
</ Xsl: if>

<xsl:if test="EXPERIENCE">
Denne person har atleast en ERFARING barn element.
</ Xsl: if>

<xsl:if test="@HOBBY">
Personen har en hobby attribut.
</ Xsl: if>

De samme tekst vilkår kunne bruges til XSL: Vælg / XSL: NÅR samt

xsl: Vælg

XSLT har xsl: choose instruktion svarer til xsl: if, men har et par vigtige forskelle:
• En xsl: choose element kan teste for mere end én betingelse, og tilføje forskellige noder til resultatet træ baseret på, hvor betingelsen er sand.
• En xsl: Vælg element kan have en standardskabelon at tilføje til det resultat, træ, hvis ingen af ​​betingelserne er sande. (Sammenlign xsl: if, som ikke har nogen svarer til en "anden" tilstand.)
• Den xsl: Vælg element har specifikke delelementer, der er nødvendige for at arbejde, mens du kan sætte nogle velformede elementer, du ønsker inde i en xsl: if element.

<xsl:choose>
<xsl:when test="boolean-expression">
Gør noget, når denne boolean-udtryk er TURE
</ Xsl: når>
<xsl:otherwise> Gør noget andet </ xsl: ellers>
</ Xsl: Vælg>


2008 13 august 2008

Tokenizing Afgrænset String inde i en XSL

Hvis dit krav er at splitte en node værdi i et XML, der indeholder en afgrænset streng værdi, i enkelte elementer, så har du nået det rigtige sted ... få et kig på nedenstående eksempel. Hvis du er fortrolig med en lille smule af XML og XSL ... jeg tror ikke du ville brug for nogen forklaring.
Også dette eksempel omfatter brug af XSL funktioner som xsl: call-template, xsl: delstreng-før, xsl: delstreng-efter, hvis det er det du er ude efter.

XML at blive omdannet (food.xml): -
Antag opgaven er at tokenize strengen afgrænset af komma, i tagget "søgeord"

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

Det er overflødigt at sige ... bare ændre parameteren "delimitr" til afgrænsningstegn efter eget valg


2008 August 4, 2008

Et problem med position () i XSL ... eller er det?

Jeg havde denne strage problem mens du opretter en XSL dag. Søgte efter svarene i hele nettet, men kunne ikke finde nogen .... Faktisk tror jeg! Jeg fordybning ved, hvad mit problem var, så hvad skal jeg kigge efter?

Anyway! Bare i tilfælde af at du har dette meget samme problem også, og en eller anden måde ved magt FORCE du formåede at lande på denne side ... du vil takke mig tons ... Og hvis du ved et uheld er landet på denne side for nogle mærkelige skæbne og du tilfældigvis til at være en XSL udvikler, DO gøre et notat om dette nu, TIL FREMTIDEN årsag, hvis en dag, du står overfor dette problem, så FORCE måske ikke være sammen med dig.

Problem erklæring:
Jeg har denne XML, hvor der er to noder med flere elementer i det, og de elementer mellem disse to knudepunkter har en 1-1 korrespondance. I eksemplet nedenfor, hvert element i det knudepunkt <array name="PLAYURL" /> vedrører (tilsvarende position) til et element i det knudepunkt <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 har jeg en løkke, hvor jeg løkken gennem <array name="SITENAME">, og jeg ønsker at få den tilhørende post (ved den tilsvarende position) i <array name="PLAYURL">,

Hvad ville du den normalt forsøge gøre, er ...

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

DESVÆRRE! DETTE wont arbejde ... Ak! Surpised ...

Nu ville du sikkert lyst til at prøve, noget som dette ...

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

Og Igen wont arbejde ... Nu kan du skrabe dit hoved, forsøger at kontakte alle, som du tror, ​​kender nogle XSL og kunne være til nogen hjælp ... du forsøger hver anden løsning ... og alligevel wont arbejde ... Nå! Thats hvad der skete med mig atleast ...

DONT Fortvivlelse! Prøv det

<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 hvorfor det virker. Årsag jeg dont have ret til grund ... hvis du gør! Undlad venligst at smide en kommentar. Det kan være temmelig nyttigt. Også! hvis du har en bedre titel til dette indlæg, så send mig en linje :)


2008 2 august 2008

Indstilling af DOCTYPE i XSL

Sidste uge har jeg lavet en progessive HTML / CSS layout til en klient, testet det i IE6, IE7 og FF 3, virkede helt fint ... indtil! layoutet gik videre ned ad manufacting cyklus. Det mislykkedes. Page layout elementer gik bare over det hele, når HTML layout blev omdannet til XSL og XML anvendes til det ... Øv!

Kunne ikke sove ok i løbet af weekenden, i forventning om mandag morgen, når jeg bliver nødt til at løse dette SH **. Men nu har en lille oplevelse i behandlingen af ​​den slags situationer (Browser Quirks, jeg mener), jeg vidste, at det havde at gøre med noget andet, men DOCTYPE .... og det var ...

The Problem:
Du vil have kontrol over DOCTYPE, da din transformation vil omfatte en standard DOCTYPE eksplicit, og du layout vil være ude i et kast.

Løsningen:
XSLT specs giver output-metoder for at sætte en DOCTYPE af valg. Også for os UI udviklere, vil de emner af interesse være HTML-output-metoder og XML output metoder .

Nå! før du får keder sig, her er rettelsen.

For eksempel, hvis du havde følgende DOCTYPE i din HTML-version:. -

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

Så i XSL du ville have følgende: -

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

og endelig! gør at din XSLT output adlyder DOCTYPE du har valgt.


2008 4 maj 2008

Medtag XSL indenfor XSL

Hvis XML / XSL Transformation er din domian, så er der tidspunkter, hvor vi ønsker en peice af Dynamic kode, der skal bruges bibliotek post (som skal gøres genbrugelige). Hvad jeg mener, kunne måske gøres mere tydeligt med dette eksempel scenario.

Forestil dig du opretter en hjemmeside (og ved hjælp af XML, XSL transfroms selvfølgelig), og de ​​fleste af siderne ville have en Kommentarer modul. Nå! derefter enten du kopierer eller indsætte denne kode på hver side skabelon (som jeg ikke har at sige, men gør vedligeholdelse og omarbejde et mareridt), eller endnu bedre, kan du oprette en include file, der kunne trækkes på, hvor nogensinde du vil have det på din side ( s) ...
Så Hvordan skaber vi en XSL include file og medtage den inde i en anden XSL-fil? Her er, hvordan ...

Bare for at gøre tingene klart ... her er hurtig liste over de filer, du vil skabe ... her vil vi bl.a. information om frugt og grøntsager ind i en overordnet side kaldet mad.

1. food.xml - XML-datafil, som transformation vil blive anvendt
2. food.xsl - vigtigste XSL-fil, som vil forvandle vores food.xml
3. inc_fruits.xsl - XSL omfatter fil, der vil gøre frugter data
4. inc_vegtables.xsl - XSL omfatter fil, der vil gøre vetetables data

Jeg tror ikke jeg har forklare meget, koderne for ovenstående elementer vil være selvforklarende ...

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 alle ovenstående filer her (252 downloads)


2008 April 4, 2008

Arbejde med XML Node attributter i XSLT

Hvis du bruger XML-og XSL, så er du måske stødt på et tidspunkt, når du skal lege med attributter og værdier af XML noder i dig XSL. De er masser af sites med lang forpustet info om dette, men ingen jeg fandt, var kort og præcis ... dette er ikke XML / XSL TUTORIAL, men mit forsøg på at sætte-sammen en slags cheat liste ...

Prøven XML, at vi vil arbejde med ser sådan her ud ...

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

Så lad os begynde at omdanne vores ovenfor XML ved hjælp af XSL

Eksempel 1: Viser værdien på en valgt data

<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 resultat vil se ud

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


Eksempel 2: Looping igennem og vise alle XML-attribut navne og deres værdier

<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 resultat vil se ud


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 alle ovenstående filer her (245 downloads)



Se dette rum, vil jeg holde opdatere denne med nye fund ...


NDK hjem | Udtrykke IT | udtrykke Smag | udtrykke Penmenship | udtrykke Awe | udtrykke mig