2009 07 marca 2009

Wywołanie wielu funkcji systemu Windows onload w JavaScript

Heres kolejny mały peice oszustwa Javascript że musiałem grzebać, bo sytuacja commaned go. W jednej z moich stron internetowych, miałem taką sytuację, gdzie musiałem wdrożyć "windows.onload" dwa razy. Pierwszą rzeczą, która przyszła do niedoświadczonego umysłu jak mój (muszę szczerze powiedzieć, że od I zostały z wykorzystaniem środowisk JavaScript i biblioteki, mam forgotton robić proste rzeczy na własną rękę ... smutne ale prawdziwe), jest następująca metoda ...

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

Przykro powiedzieć, ale to przyzwyczajenie pracować ... nie chcesz, aby omówić nauki wykonanie kodu JavaScript dużo ... ale według moich ostatnich doświadczeń, tylko ostatnia funkcja (onloadfn3) będzie chory rzeczywiście zostanie wykonany.

W normalnych sytuacjach, w przeciwieństwie do moich ust co powiem nieco później) ... można zrobić jedną z następujących czynności do wykonania mutliple funkcje onload ....

Czy coś takiego

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

Z mojej obecnej sytuacji, nie mogę skorzystać z jednej z wyżej ...
Dlaczego trzeba zadzwonić windows.onload dwa razy, a że nazywając dwie funkcje w jednej funkcji onload? Oto szybki rzut oka na moje oświadczenie problem ...

"Moje strony witryny są zorganizowane podobnie jak motyw WordPress .... tzn. istnieje wspólny header.php i footer.php, który jest włączone do wszystkich stron witryny. Istnieje implementaion funkcja onload w footer.php zrobić kilka typowych funkcji onload. I jest kilka stron, które muszą coś własnego OnLoad, oprócz tych, zrobić wspólną funkcji onload. Gdybym przypisanie funkcji zwrotnej bezpośrednio do obsługi window.onload, będzie to zbyt jeździć wcześniej przypisane zwrotnych w footer.php "

.... Jest mój problem rozumieć :) ?

Dobrze! istnieje kilka rozwiązań, które znalazłem. Wszystkie one są bardzo podobne, a przede wszystkim implementions roztworu podanego przez Simon Willison ust http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Rozwiązanie:

Wystarczy dodać ten kod javascript do witryny ...

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

I nazywają to zamiast zwykłego "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Więcej kodu na * ładowania strony
 }); 

Zalety tego fragmentu kodu ...
1. Przede wszystkim, to pozwala mieć wiele zdarzeń windows.onload, wywoływany z oddzielnych części kodu, bez overridding poprzednią definicję
2. To jest naprawdę dyskretna. Można go umieścić w pliku ze swoimi innych skryptów lub w osobnym pliku.
3. To działa nawet jeśli window.onload został już ustawiony.


2008 20 września 2008

Problem Collapse TEXTAREA w XSL / XSLT


OŚWIADCZENIE PROBLEM:
Pobiegłem do tego problemu w odniesieniu textareas w XSLs. W prostych słowach, problem pojawia się gdy masz puste tag <textarea>, wtedy zwinąć go do <textarea />.
czyli gdybyś miał coś takiego w swoim XSL i danych XML dla wartości TEXTAREA, nic nie zwraca ...

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

Jako przeglądarki nie rozpoznają tego, spowoduje to reszta postaci HTML do uruchomienia w polu tekstowym.

Możliwe rozwiązania:

W XSL, dodać twardej-space () po xsl: tag.BEWARE wartości, dbać o tej dodatkowej przestrzeni dodałeś podczas walidacji po stronie klienta w tej dziedzinie.

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

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

Lub
Włóż <xsl:value-of select="@unknown" tag /> wskazujący na nieznanego atrybutu. To wymusi na PHP parser XSLT do generowania tekstu otwierania i zamykania znacznika obszaru, nawet jeśli nie ma nic pomiędzy.

Lub
Wstawić pole <xsl:text> zawierający przestrzeń w celu wymuszenia znacznika zamykającego.

Jednak, choć wyżej wymienione rozwiązania mogą wydawać się rozwiązać ten problem, nadal nie jestem przekonany, że mają rację i najlepsze sposoby aby go naprawić. Jeśli istnieje jakikolwiek inny lepszy sposób rozwiązywania tego quirk, proszę daj nam znać.


2008 14 września 2008

Różnorodność warunków XSL testowych (Kolekcja xsl: if i XSL: gdy warunki testowe)

Za każdym razem muszę zrobić xsl: if lub XSL: KIEDY test, muszę wrócić do książek. I nigdy nie wydają się je zapamiętać. Pomyślał, że byłoby bardziej tam, tak jak ja, którzy raczej wolą mieć wszystko z nich, jest to możliwe, w jednym miejscu, gotowy do których należy się w razie potrzeby.

Dla tych, którzy są nowe ... Składnia xsl: if

<xsl:if test="expression">
<- Zawartość: szablon ->
</ Xsl: if>

Xsl: if / xsl: kiedy test Collection
Poniższe warunki są proste i wymowne. Więc uważam, że nie trzeba wielu wyjaśnień

<xsl:if test="position()=last()-1">
To, czy przedostatnim elementem na liście!
</ Xsl: if>

<xsl:if test="SALARY> 5000 ">
Wynagrodzenie tej osoby jest większa niż Rs. 5000
</ Xsl: if>

<xsl:if test="count(JOBS)> 3 ">
Nie więcej niż 3 miejsca pracy w tej liście!
</ Xsl: if>

<xsl:if test="(@DEPT ='SALES') lub (@JOINYEAR = '1997')">
Ta osoba jest z działu sprzedaży lub jego rok przystąpienia jest 1997
</ Xsl: if>

<xsl:if test="EXPERIENCE">
Ta osoba posiada co najmniej jeden element podrzędny Experience.
</ Xsl: if>

<xsl:if test="@HOBBY">
Osoba posiada atrybut hobby.
</ Xsl: if>

Te same warunki tekstowe mogą być wykorzystane do xsl: choose / XSL: PO oraz

xsl: choose

XSLT w xsl: instrukcja wyboru jest podobna do xsl: if ale ma kilka różnic kluczowe:
• Jeden Element xsl: choose można przetestować na więcej niż jeden warunek i dodawać różne węzły do ​​drzewa wynikowego na podstawie którego warunek jest prawdziwy.
• xsl: choose element może mieć szablon domyślny, aby dodać do drzewa wynikowego, jeśli żaden z warunków nie jest spełniony. (Porównaj xsl: if, która nie ma odpowiednika "ELSE" stanie.)
• xsl: choose element posiada konkretne podelementy, które są niezbędne do jego pracy, a można umieszczać żadnych sensownych elementów, które mają wewnątrz o xsl: if elementem.

<xsl:choose>
<xsl:when test="boolean-expression">
Zrób coś, kiedy to wartość logiczna, wyrażenie jest TURA
</ Xsl: kiedy>
<xsl:otherwise> Zrób coś innego </ xsl: inaczej>
</ Xsl: choose>


2008 Sierpień 13 2008

Tokenizing łańcuchem znaków rozdzielonych wewnątrz XSL

Jeśli wymogiem jest, aby podzielić węzła wartość w formacie XML, który zawiera łańcuchem znaków rozdzielonych wartości do poszczególnych elementów, to osiągnie właściwe miejsce ... spojrzeć na poniższy przykład. Jeśli jesteś zaznajomiony z odrobiną XML i XSL ... Nie sądzę, by trzeba żadnych wyjaśnień.
Również ten przykład obejmuje korzystanie z funkcji XSL jak xsl: call-template, xsl: substring-before, xsl: substring-after, jeśli to, co jesteś po.

XML do transformacji (food.xml): -
Załóżmy, że zadanie to tokenize na string ograniczoną przecinkiem, w tag "słów kluczowych"

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

Wynikowy wyjście 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>

Nie trzeba dodawać ... po prostu zmienić parametr "delimitr" do ogranicznika do wyboru


2008 4 sierpnia 2008 r.

Problem z pozycją () w XSL ... albo to jest?

Miałem ten problem strage podczas tworzenia XSL dziś. Poszukiwanie odpowiedzi w całej sieci, ale nie potrafił znaleźć żadnego .... Właściwie myślę! I dint wiem, co mój problem był, więc co mam szukać?

Tak! Na wszelki wypadek masz ten sam problem zbyt bardzo i jakoś przez mocą mocy, jakiej udało się wylądować na tej stronie ... chcesz mi podziękować ton ... A jeśli przypadkowo wylądował na tej stronie jakiegoś dziwnego losu i zdarzy ci się być Deweloper XSL, DO zanotuj to teraz, w przyszłości przyczyn, jeśli niektóre dni można napotkać ten problem, wtedy siła nie może być z tobą.

Oświadczenie problem:
Mam ten XML, w którym są dwa węzły z wielu elementów w nim i elementy pomiędzy tymi dwoma węzłami mieć jeden do jednego korespondencję. W poniższym przykładzie, każda pozycja w węźle <array name="PLAYURL" /> odnosi (odpowiedni pozycja) do elementu w węźle <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>

Teraz mam pętlę, gdzie i pętli <array name="SITENAME"> i chcę, aby uzyskać powiązanych artykułów w odpowiedniej pozycji) w <array name="PLAYURL">,

Co byś normalnie spróbuj zrobić to ...

<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! TO wont pracy ... Ach! Surpised ...

Teraz będzie prawdopodobnie chcesz spróbować, coś takiego ...

<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 znowu to przyzwyczajenie pracować ... Teraz zarysowania głowę, próbując skontaktować się z każdego, kto zna trochę uważasz, XSL i może być żadną pomocą ... spróbować każdą inną opcję ... i nadal to przyzwyczajenie pracować ... Cóż! Thats co mi się conajmniej ...

DONT Rozpacz! TRY TO

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

Nie pytaj mnie dlaczego to działa. Bo nie mam z prawym rozumem ... jeśli to zrobisz! Proszę wrzucić komentarz. To może być całkiem przydatne. Również! jeśli masz lepszy tytuł dla tego postu, to napisz do mnie linii :)


2008 Sierpień 2, 2008

Ustawianie DOCTYPE w XSL

Ostatni tydzień stworzyłem progessive HTML / CSS layout dla klienta, testowałem go w IE6, IE7 i FF 3, wydawała się całkiem dobrze ... aż! układ poszedł dalej w dół cyklu manufacting. To nie powiodło się. Elementy układu strony po prostu poszedł w każdym miejscu, gdy układ HTML został przekształcony XSL i XML stosuje się do niej ... Bummer!

Nie mogłam spać ok w weekend, w oczekiwaniu na poniedziałek rano, kiedy będę musiał naprawić ten SH **. Ale teraz mając trochę experince w radzeniu sobie z tego rodzaju sytuacjach (quirks przeglądarki, mam na myśli), wiedziałem, że miał do czynienia z niczym innym DOCTYPE .... i było ...

Problem:
Chcesz kontrolę nad DOCTYPE, ponieważ twoja przemiana będzie zawierać DOCTYPE domyślny jawnie, a układ będzie się za podrzucenie.

Rozwiązanie:
XSLT specyfikacje zapewnia metody wyjścia ustawić DOCTYPE się z wyborem. Również dla nas programistów interfejsu użytkownika, tematy interesujące byłoby HTML metody wyjścia i metod XML wyjściowe .

Dobrze! zanim się nudzić, tu jest fix.

Na przykład, jeśli miał następujący DOCTYPE w wersji HTML:. -

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

Następnie w XSL trzeba by mieć co następuje: -

<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 koniec! Nie upewnić się, że wyjście XSLT przestrzega DOCTYPE, którą wybrałeś.


2008 04 maja 2008

Dołącz XSL wewnątrz XSL

Jeśli XML / XSL Transforms jest twój Domian, to są chwile, kiedy chcemy peice Dynamic którego należy użyć elementu biblioteki (należy dokonać ponownego użytku). Co mam na myśli, prawdopodobnie mogłyby być bardziej wyraźne w tym scenariuszu przykład.

Wyobraź sobie, że stworzenie strony internetowej (i za pomocą XML, XSL transfroms ofcourse) i większość stron będzie miała moduł Komentarze. Dobrze! następnie skopiować lub wkleić ten kod do każdego szablonu strony (co nie mam powiedzieć, ale uczynić konserwację i przerobienie koszmar) lub jeszcze lepiej, utworzyć INCLUDE plik, który mógłby zostać zainstalowane gdziekolwiek chcesz go na swojej stronie ( s) ...
Jak więc utworzyć plik XSL INCLUDE i umieścić go wewnątrz innego pliku XSL? Oto jak ...

Aby sprawę jasno ... tutaj jest szybki listę plików, które można utworzyć ... tutaj, będziemy w tym informacje o owoce i warzywa do strony macierzystej zwanej żywności.

1. food.xml - xml pliku danych, w której transformacja będzie stosowana
2. food.xsl - główny plik XSL, która przekształci naszą food.xml
3. inc_fruits.xsl - XSL zawiera plik, który uniemożliwi owoce danych
4. inc_vegtables.xsl - XSL zawiera plik, który uniemożliwi dane vetetables

Ja tego nie zrobiłem że muszę wyjaśnić dużo, kody do powyższych elementów, będzie oczywista ...

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>

Pobierz wszystkie powyższe pliki w tym miejscu (252 pliki do pobrania)


2008 04 kwietnia 2008

Praca z atrybutami węzła XML w XSLT

Jeśli korzystasz z XML i XSL, to mogłeś natknąć się na czas, kiedy trzeba się bawić z atrybutów i wartości węzłów XML w was XSL. Są one mnóstwo stron z długim nawijanej informacji na ten temat, ale żaden znalazłem były krótkie i precyzyjne ... To nie jest XML / XSL TUTORIAL, ale moja próba put-razem jakieś Cheat listy ...

Próbka XML, że będziemy pracować z wygląda tak ...

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

A więc zaczynamy przekształcając naszą powyżej XML przy użyciu XSL

Przykład 1: Wyświetlanie wartości w wybranym Atrybut

<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 wynik będzie wyglądał

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


Przykład 2: krążący i wyświetlając wszystkie XML nazwy atrybutów i ich wartości

<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 wynik będzie wyglądał


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


Pobierz wszystkie powyższe pliki w tym miejscu (245 pliki do pobrania)



Obserwuj ten miejsca, będę aktualizacji to z nowymi ustaleniami ...


NDK startowej | Wyrażając IT | Podniebienie Wyrażając | Penmenship Wyrażając | Awe Wyrażając | Wyrażając Myself