Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Programación General (http://www.forosdelweb.com/f14/)
-   -   Pasar variables de PHP a XSL (http://www.forosdelweb.com/f14/pasar-variables-php-xsl-308164/)

zayon 15/06/2005 12:01

Pasar variables de PHP a XSL
 
Hola, no logro aclararme de como pasar una variable al XSL que lo llamo desde un archivo PHP. Mi intención es la de que el XSL interprete el XML y segun el valor de $tipo se ejecute un template u otro.

Tengo 3 archivos:

XML
XSL - que interpreta el XML
PHP - que lanza los 2 archivos anteriores:

Codigo PHP:
--------------------
<?php
$tipo=$HTTP_GET_VARS['tipo'];

$xml = new DomDocument;
$xml->load('example.xml');

$xsl = new DomDocument;
$xsl->load('example.xsl');

$proc = new xsltprocessor;
$proc->importStyleSheet($xsl);

$proc->setParameter("",'tipo',$tipo);

echo $proc->transformToXML($xml);
?>
-----------------------

Y quiero que el archivo PHP le pueda pasar la variable $tipo al XSL para que en funcion de lo que marque $tipo se vea una u otra cosa en el navegador.
No me da error pero no sale nada, como si la variable estuviera vacía.
El caso es que ya lo he visto antes pero no recuerdo donde ni como era.

Muchas gracias

Helbira 16/06/2005 02:44

tienes declarado el parametro en tu xsl con <xsl:param name="tipo" /> ??

zayon 16/06/2005 05:01

Lo tengo declarado con with-param:

Codigo XSL:
-------------------
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" indent="no"/>
<xsl:template match="collection">
Hey! Welcome to my sweet CD collection!
<xsl:apply-templates select="cd">
<xsl:with-param name="valor"/><xsl:value-of select="$tipo"/>
</xsl:with-param>
</xsl:apply-template>

</xsl:template>
<xsl:template match="cd">
<h1><xsl:value-of select="$valor"/></h1>

</xsl:template>
</xsl:stylesheet>
--------------------------------

Codigo XML:
------------------
<collection>
<cd>
<title>Titulo 1</title>
<artist>Artista 1</artist>
<year>2005</year>
</cd>
<cd>
<title>Titulo 2</title>
<artist>Artista 2</artist>
<year>2005</year>
</cd>
</collection>
-----------------------
Codigo PHP:
---------------------
<?php
$tipo=$HTTP_GET_VARS['tipo'];
/* Load the two XML sources */
$xml = new DomDocument; // from /ext/dom
$xml->load('example.xml');

$xsl = new DomDocument;
$xsl->load('example.xsl');

/* Configure the transformer */
$proc = new xsltprocessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
$proc->setParameter("",'tipo',$tipo);


echo $proc->transformToXML($xml); // actual transformation
?>
------------------

Helbira 16/06/2005 05:19

OK, es correcto pero no es el parametro tipo lo que tienes declarado en tu XSL sino el parametro valor que es un aprametro que recibe el template "cd" cuyo valor lo lee del parametro "tipo" que no tienes declarado.

Lo tienes que declarar al ppio de tu XSL con <xsl:param name="tipo" /> para que sea un parametro global.

El codigo quedaria asi:

Código:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="iso-8859-1" indent="no"/>

<xsl:param name="tipo" />

 <xsl:template match="collection">
  Hey! Welcome to my sweet CD collection!
  <xsl:apply-templates select="cd">
        <xsl:with-param name="valor"/>
        </xsl:with-param>
  </xsl:apply-template>
       
 </xsl:template>
 <xsl:template match="cd">
        <h1>

 </xsl:template>
</xsl:stylesheet>

Y listo! Creo qeu con eso te funcionaria.

Suerte!

Barraca 16/06/2005 08:57

Helbira, que placer verte por aquí :) (F)

zayon 16/06/2005 11:25

Vale, muchisimas gracias helbira, ahora si funciona, pero el problema es que en mi máquina no funciona, tengo Internet Inf Server con php5 y a mi no me va. ¿Por qué puede ser?
Hago un phpinfo() y si que me sale, pero cuando lanzo este php me sale en blanco todo,
¿puede ser por alguna libreria .dll que no tengo bien puesta?

¿Hay que intalar php5 como cgi o como idapi?

Helbira 17/06/2005 01:36

La verdad es que hace tiempo que no uso PHP en un IIS. Cuando lo instalé la última vez era PHP3 y no recuerdo exactamente si era como CGI o IDAPI. De tdas formas, recuerdo que seguí la instalación del archivo install.txt o algo asi paso a paso. Venía la forma de instalarlo según tu sistema operativo y versión del IIS.

Busca en el foro de PHP, creo recordar haber respondido preguntas sobre esto y seguramente puse clarito los pasos a seguir. Por lo menos resolveras tu duda sobre el cgi/idapi.

Mira tambien en la FAQ de PHP. Supongo que eso debe ser un tema candente en ese foro.

zayon 20/06/2005 11:33

Gracias, ya está resuelto, el problema estaba en el uso de register_globals=OFF (debía estar a ON) ya que no creaba un array $HTTP_GET_VARS['tipo'], para solucionarlo sin cambiar el valor de register_globals es mejor usar la variable $_GET['tipo'].


La zona horaria es GMT -6. Ahora son las 06:43.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.