2009 07 de marzo 2009

Llamar a múltiples funciones de Windows onload en Javascript

Aquí está otro pedazo pequeño de engaño Javascript que tenía que cavar a su alrededor porque la situación lo commaned. En uno de mis sitios web, he tenido esta situación en la que tuve que poner en práctica "windows.onload" dos veces. La primera cosa que vino a la mente una experiencia como la mía (tengo que decir honestamente que, desde que he estado utilizando frameworks de JavaScript y las bibliotecas, he olvidado de hacer las cosas simples por mi cuenta ... triste pero cierto), es el siguiente método ...

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

Lo siento decirlo, pero, este trabajo costumbre ... no quiero hablar sobre la ciencia ejecución de Javascript mucho ... pero de acuerdo a mi experiencia reciente, sólo la última función (onloadfn3) la mala voluntad se ejecuta realmente.

En situaciones normales, a diferencia de la mía (que voy a hablar un poco más tarde) ... puedes hacer lo siguiente para ejecutar funciones mutliple onload ....

O algo como esto

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

Por mi situación actual, no puede utilizar cualquiera de los anteriores ...
¿Por qué tengo que llamar a windows.onload dos veces, en lugar que llamar a dos funciones dentro de una función onload sola? Aquí es rápido vistazo a mi declaración del problema ...

"Mis páginas del sitio se estructura como el tema de WordPress .... es decir, hay un header.php y footer.php comunes que se incluyen en todas las páginas del sitio. Hay una función de la Implementación onload en los footer.php para hacer algunas funciones comunes onload. Y hay pocas páginas que necesitan algo de su propia ONLOAD, además de los realizados por la función onload común. Si asigno función de callback directamente al controlador window.onload, será pasar por encima de las devoluciones de llamada asignados previamente en los footer.php "

.... Se entiende mi problema :) ?

Bueno! existen pocas soluciones que se encontró. Todos ellos son muy similares y sobre todo implementions de una solución dada por Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Solución:

Basta con añadir el código javascript para el sitio ...

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

Y lo llaman en lugar del habitual "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Más código se ejecute en carga de la página *
 }); 

Las ventajas de este fragmento de código ...
1. En primer lugar, que le permite disponer de múltiples eventos windows.onload, llamada a partir de piezas separadas de su código, sin anulando la definición anterior
2. Es muy discreto. Se puede colocar en un archivo con las secuencias de comandos de otros o en un archivo separado.
3. Funciona incluso si window.onload ya se ha establecido.


2008 20 de septiembre 2008

TEXTAREA problema de colapso en XSL / XSLT


Enunciado del problema:
Me encontré con este problema en relación con áreas de texto en un XSLs. En palabras simples, el problema surge cuando se tiene una etiqueta <textarea> en blanco, entonces se va a colapsar a <textarea />.
es decir, si tenía algo como lo siguiente en su XSL y los datos XML para el valor de TEXTAREA, no devuelve nada ...

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

Como los navegadores no reconocen esto, hará que el resto del formulario HTML para ejecutarse en el área de texto.

POSIBLES SOLUCIONES:

En el XSL, agregue un non-breaking-espacio () después de que el xsl: tag.BEWARE de valor, para cuidar de este espacio extra que se añade, durante la validación del lado del cliente de este campo.

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

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

O
Insertar una etiqueta de <xsl:value-of select="@unknown" /> apuntando a un atributo desconocido. Esto obligará al intérprete PHP XSLT para generar un texto de apertura y cierre de la etiqueta de área, incluso si no tiene nada en el medio.

O
Insertar un campo de <xsl:text> que contiene un espacio para obligar a una etiqueta de cierre.

Sin embargo, a pesar de las soluciones mencionadas anteriormente puede parecer para solucionar el problema, todavía no estoy convencido de que tienen razón y las mejores maneras de solucionarlo. Si no hay otra manera mejor de fijar esta peculiaridad, por favor háganoslo saber.


2008 14 de septiembre 2008

Una variedad de condiciones de prueba XSL (Colección de xsl: if y xsl: when condiciones de prueba)

Cada vez que tengo que hacer un XSL: SI o XSL: Cuando la prueba, tengo que volver a los libros de referencia. Me parece que nunca los recuerdo. Pensé que habría más allá, al igual que yo, que preferirían tener a todos ellos, es posible, en un solo lugar, listos para ser referidos cuando sea necesario.

Para aquellos que son nuevos ... Sintaxis XSL: SI

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

El xsl: if / xsl: when Colección de prueba
Las siguientes condiciones son sencillas y explica por sí mismo. Así que creo que no necesita mucha explicación

<xsl:if test="position()=last()-1">
Esto si es el último elemento, pero uno en la lista!
</ Xsl: if>

<xsl:if test="SALARY> 5000 ">
El salario de esta persona es mayor que Rs. 5000
</ Xsl: if>

<xsl:if test="count(JOBS)> 3 ">
Hay más de 3 puestos de trabajo en esta lista!
</ Xsl: if>

<xsl:if test="(@DEPT ='SALES') o (@JOINYEAR '1997')"> =
Esta persona es del departamento de ventas o su año de inscripción es 1997
</ Xsl: if>

<xsl:if test="EXPERIENCE">
Esta persona tiene al menos un elemento secundario EXPERIENCIA.
</ Xsl: if>

<xsl:if test="@HOBBY">
La persona que tiene un atributo afición.
</ Xsl: if>

Las condiciones de un mismo texto podría ser utilizado para xsl: choose / xsl: when, así

xsl: choose

XSL XSLT: elige la instrucción es similar a xsl: si, pero tiene algunas diferencias claves:
• Un elemento xsl: choose puede probar más de una condición y agregar diferentes nodos en el árbol resultado sobre la base de que la condición es verdadera.
• Un xsl: choose elemento puede tener una plantilla predeterminada para añadir el árbol de resultados, si ninguna de las condiciones son verdaderas. (Compárese con xsl: si, que no tiene equivalente de una "cosa" condición.)
• El xsl: choose elemento tiene subelementos específicos que son necesarios para que funcione, mientras que usted puede poner todos los elementos bien formados que desee dentro de un elemento xsl: if.

<xsl:choose>
<xsl:when test="boolean-expression">
Hacer algo cuando este boolean expresión es TURA
</ Xsl: when>
<xsl:otherwise> ¿Es algo más </ xsl: de lo contrario>
</ Xsl: choose>


2008 13 de agosto 2008

Encadenamiento cadena delimitada dentro de un XSL

Si su requerimiento es para dividir un valor de nodo de un XML, que contiene una cadena delimitada del valor, en términos individuales, entonces has llegado al lugar correcto ... echar un vistazo a el siguiente ejemplo. Si usted está familiarizado con un poco de XML y XSL ... No creo que usted tendría que dar ninguna explicación.
Además, este ejemplo incluye el uso de funciones como el XSL xsl: call-template, xsl: substring-before, xsl: substring-after, si eso es lo que está después.

XML para ser transformado (food.xml): -
Supongamos que la tarea es para acortar la cadena delimitada por comas, en los de la etiqueta "palabras clave"

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

Resultante de salida 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>

Ni que decir ... solo cambiar el parámetro "delimitr" para el delimitador de su elección


2008 04 de agosto 2008

Un problema con la posición () en XSL ... ¿o no?

Tuve este problema al crear un Strage XSL hoy. Buscó respuestas en toda la red, pero no podía encontrar ninguna .... En realidad, supongo! Yo sé cuál es mi fuerza problema era, entonces, ¿qué debo buscar?

De todos modos! Sólo en caso de tener este mismo problema también y de alguna manera por el poder de la fuerza que logró aterrizar en esta página ... que me lo agradecería toneladas ... Y si alguna vez ha accidentalmente aterrizó en esta página por alguna extraña suerte y pasar a ser un desarrollador XSL, NO HAGA UNA NOTA DE ESTA AHORA, PARA EL FUTURO causa, Si algún día, se enfrenta a este problema, entonces la fuerza no podría estar con ustedes.

Enunciado del problema:
Tengo este XML, donde hay dos nodos con varios elementos en él y los elementos entre estos dos nodos tienen una correspondencia uno a uno. En el siguiente ejemplo, cada elemento en el nodo <array name="PLAYURL" /> se refiere (posición correspondiente) a un elemento en el nodo 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>

Ahora, tengo un bucle, en el que recorrer <array name="SITENAME">, y quiero conseguir el artículo relacionado (en la posición correspondiente) en <array name="PLAYURL">,

Lo que normaly trataría de hacer es ...

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

LO SIENTO! Esto funcionará ... ¡Ah!! Gratamente ...

Ahora es probable que le gustaría probar, algo como esto ...

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

Y De nuevo, esto no funcionará ... Ahora que rascarse la cabeza, tratando de ponerse en contacto con todos los que usted piensa que sabe algo de XSL y podría ser de alguna ayuda ... intentar todas las opciones de otros ... y aún funciona costumbre ... Bueno! Eso es lo que me pasó el atleast ...

EXCLUIR LA DESESPERACIÓN! LA PRUEBA

<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 por qué funciona. Porque no tengo una razón bien ... si lo haces! Por favor deja un comentario. Puede ser muy útil. También! si usted tiene un mejor título para este post, lo mándenme una línea de :)


2008 02 de agosto 2008

Ajuste de la DOCTYPE en XSL

La semana pasada he creado un progresivo HTML / CSS de diseño para un cliente, probado en IE6, IE7 y FF 3, parecía estar perfectamente bien ... hasta que aparezca! el diseño fue más allá por el ciclo de manufacting. No pudo. Los elementos de diseño de página acaba de ir por todo el lugar cuando el diseño HTML se convirtió en XSL y XML aplicado a él ... Charlatán!

No podía dormir bien durante el fin de semana, en previsión de la mañana del lunes, cuando voy a tener que solucionar este problema SH **. Pero ahora tiene un poco de experincia en el tratamiento de este tipo de situaciones (no estándar del navegador, quiero decir), yo sabía que tenía que ver con nada más que DOCTYPE .... y fue ...

El problema:
Usted quiere que el control sobre el DOCTYPE, ya que su transformación se incluyen un DOCTYPE por defecto de forma explícita, y el diseño estará fuera por un sorteo.

La solución:
Ficha XSLT proporciona métodos de producción para establecer un DOCTYPE de la elección. Además, para nosotros los desarrolladores de la interfaz de usuario, los temas de interés serían los métodos de salida HTML y XML métodos de producción .

Bueno! antes de que te aburres, aquí está la solución.

Por ejemplo, si usted tenía el DOCTYPE siguiente en su versión HTML:. -

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

Luego, en el XSL que tendría que tener lo siguiente: -

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

y ¡Por fin! Cómo asegurarse de que su salida obedece a la XSLT DOCTYPE que usted ha elegido.


2008 04 de mayo 2008

Incluir dentro de XSL XSL

Si XML / XSL transforma es su domian, entonces hay momentos en los que quieren un pedazo de código dinámico para ser utilizado elemento de la biblioteca (que se hizo re-utilizables). Lo que quiero decir, probablemente podría ser más claro con este escenario de ejemplo.

Imagínese que usted está creando un sitio web (y el uso de XML, XSL transfroms por supuesto) y la mayoría de las páginas que tienen un módulo de comentarios. Bueno! entonces o bien copiar o pegar este código en todas las plantillas de página (que yo no tienen voz, pero que el mantenimiento y la modificación de un pesadilla) o mejor aún, crear un archivo de inclusión que puede ser tirado en donde quiera que usted lo desea en su página ( s) ...
Así que ¿cómo podemos crear un archivo XSL INCLUDE e incluirlo dentro de otro archivo XSL? Aquí es cómo ...

Sólo para dejar las cosas claras ... aquí está la lista rápida de los archivos que usted crea ... aquí, estaremos incluyendo información acerca de las frutas y verduras en una página principal llamada de los alimentos.

1. food.xml - archivo de datos XML en el que se aplica la transformación
2. food.xsl - principal archivo XSL que transformará nuestra food.xml
3. inc_fruits.xsl - XSL archivo de inclusión que se procesan los datos de las frutas
4. inc_vegtables.xsl - XSL archivo de inclusión que se procesan los datos vetetables

No creo que tengo que explicar mucho, los códigos de los elementos anteriores, se explica por sí mismo ...

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>

Descargar todos los archivos anteriores aquí (252 descargas)


2008 04 de abril 2008

Trabajar con atributos de nodo XML en XSLT

Si utiliza XML y XSL, a continuación, que podría haber llegado a través de un tiempo, cuando se tiene que jugar un poco con los atributos y valores de los nodos XML que XSL. Son un montón de sitios con información acerca de este largo aliento, pero no encontré fueron breves y precisos ... Esto no es una TUTORIAL XML / XSL, pero mi intento de poner en conjunto-una especie de lista de trucos ...

El XML de ejemplo que vamos a trabajar con este aspecto ...

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

Así que vamos a empezar a transformar nuestra por encima de XML con XSL

Ejemplo 1: Visualización de valor en un atributo seleccionado

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

Resultado HTML se verá así

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


Ejemplo 2: a través de bucle y la visualización de todos los nombres de atributos XML y sus valores

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

Resultado HTML se verá así


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


Descargar todos los archivos anteriores aquí (245 descargas)



Mire este espacio, voy a seguir actualizando este con los nuevos descubrimientos ...


NDK en casa | Expresando IT | Boca Expresando | Penmenship Expresando | Awe Expresando | expresarme