Featured Posts

Silverlight 5 Ya DisponibleSilverlight 5 Ya Disponible El día de hoy 09 de Diciembre 2011 ha sido liberada la nueva versión de Silverlight 5.  Esta versión final es la 5.0.61118. ¿Qué es Silverlight? Silverlight es...

Readmore

Silverlight Tour–Actualizado a Silverlight 5 RTWSilverlight Tour–Actualizado a Silverlight 5... Tengo el gusto de anunciarles que el Curso que Da La Vuelta al Mundo, el famoso Silverlight Tour, ha sido actualizado a la versión final de Silverlight 5. El Silverlight...

Readmore

Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)Nueva carrera en Microsoft Virtual Academy: Windows... Tengo el gusto de darles a conocer la disponibilidad de una nueva carrera en el Microsoft Virtual Academy (MVA): La carrera de Windows Phone 7.1 Mango. Esta es la descripción...

Readmore

Nueva carrera en Microsoft Virtual Academy: Silverlight 4Nueva carrera en Microsoft Virtual Academy: Silverlight... ¿Eres estudiante de Microsoft Virtual Academy (MVA)? Tengo el gusto de anunciarles oficialmente el lanzamiento de la nueva carrera de Silverlight 4 para esta plataforma educativa. La...

Readmore

Curso gratuito de Introducción a Silverlight 4 – 2da. ParteCurso gratuito de Introducción a Silverlight... Tengo el gusto de informarles que ya está disponible la segunda parte del Curso gratuito de Introducción a Silverlight 4 en Español, el cual ahora consta de un total...

Readmore

Rodrigo Díaz Concha Rss

Creando contenido dinámico en PHP para Silverlight

Posted on : 12-08-2009 | By : Rodrigo | In : Silverlight, Silverlight 3

Tags: , ,

9

Introducción

Como mencionábamos en el artículo anterior, Silverlight puede ser hospedado en prácticamente cualquier tecnología Web del lado del Servidor.  Asimismo podemos utilizar las características de la tecnología que estemos utilizando para poder crear Xaml de manera dinámica y enviar dicho contenido a la aplicación Silverlight ya sea a través de parámetros de inicialización (parámetro InitParams en <object>) o a través de un endpoint que podamos descargar por medio de un objeto de tipo WebClient.  Es este último caso el que usaremos en este artículo para crear contenido dinámico con PHP.

Creación del proyecto

Siguiendo los mismos pasos que usamos en el artículo anterior para la creación de un Sitio Web en IIS y una aplicación Silverlight, crearemos un nuevo proyecto de tipo Silverlight Application en Visual Studio .NET con el nombre PHPDynamicXaml.  Inmediatamente después de haber creado el proyecto borraremos los archivos Default.aspx y PHPDynamixXamlTestPage.aspx y sus archivos relacionados, dejando únicamente el archivo .html.

Agreguemos ahora un archivo llamado Content.php usando la plantilla de Archivo de Texto disponible al seleccionar la opción “Agregar nuevo elemento” en el menú contextual del proyecto.  La siguiente figura muestra la ventana de Solution Explorer y la Solución actual:

Será en el archivo Content.php en donde escribiremos el código necesario para la creación dinámica de contenido Xaml.  En nuestro ejemplo el contenido será una serie de rectángulos, el cual su número será definido por medio de un parámetro en el Querystring llamado r.  El siguiente fragmento ejemplifica el código de PHP necesario para la construcción dinámica de contenido en Xaml:

<?php

header('Content-Type: text/xaml');

 

$cuantos = 0;

 

if ($_GET["r"]!=null)

  $cuantos = $_GET["r"];

 

echo "<Canvas xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Width='800' Height='600'>";

for ($i=1; $i<=$cuantos; $i++)

{

  echo "<Rectangle Canvas.Top='" . $i * 10 . "' Canvas.Left='" . $i * 10 . "' Width='30' Height='30' Fill='Red' Stroke='Black' />";

}

echo "</Canvas>";

?>

Es importante resaltar en especial la siguiente línea:

header(‘Content-Type: text/xaml’);

la cual establece que el tipo de contenido que regresará la página .php será de tipo Xaml (también funciona con el content type text/xml ya que Xaml no es más que Xml).  Lo anterior es de suma de importancia ya que estamos redefiniendo el comportamiento predeterminado que tiene PHP de regresar HTML.

Ahora bien, como podrán darse cuenta el código obtiene el número de rectángulos a crear por medio del parámetro r del Querystring.  Lo que hacemos es simplemente hacer un bucle for para la creación dinámica del Xaml que represente el número buscado de rectángulos.  Recuerden que cuando generamos Xaml dinámico es necesario incluir el xmlns por default en el contenedor raíz, si es que interpretaremos este código Xaml utilizando XamlReader.Load().

Lo que resta será escribir el código necesario en nuestra aplicación Silverlight para ejecutar la página php y obtener el resultado de su ejecución (lo cual será efectivamente contenido Xaml).  El siguiente código muestra el manejador del evento Loaded del UserControl MainPage:

public partial class MainPage : UserControl

{

    public MainPage()

    {

        InitializeComponent();

 

        this.Loaded += new RoutedEventHandler(MainPage_Loaded);

    }

 

    void MainPage_Loaded(object sender, RoutedEventArgs e)

    {

        WebClient client = new WebClient();

        client.DownloadStringCompleted += (s, a) =>

        {

            if (a.Error == null)

            {

                string result = a.Result;

                var newElement = XamlReader.Load(result) as UIElement;

                LayoutRoot.Children.Clear();

                LayoutRoot.Children.Add(newElement);

            }

        };

        

        int r = 0;

        try

        {

            if (HtmlPage.Document.QueryString["r"] != null)

            {

                r = int.Parse(HtmlPage.Document.QueryString["r"]);

            }

        }

        catch (Exception)

        {

 

            r = 0;

        }

        string url = string.Format("/Content.php?r={0}", r);

        client.DownloadStringAsync(new Uri(url, UriKind.RelativeOrAbsolute));

    }

}

La propiedad HtmlPage.Document.QueryString (parte del Puente HTML) permite leer el parámetro r que puede establecer el usuario en la página .html y que a su vez será utilizado para la invocación de la página Content.php.  El resto del código se encarga de obtener el resultado de la descarga del endpoint (Content.php) e interpretar el resultado por medio del método XamlReader.Load().

La siguiente figura muestra el resultado de ejecutar la siguiente página:

http://localhost:9050/PHPDynamicXamlTestPage.html?r=12

Lo anterior demuestra que PHP, además de permitirnos hospedar las aplicaciones Silverlight, lo podemos usar para la creación dinámica de contenido Xaml.

Hospedando aplicaciones Silverlight en PHP

Posted on : 11-08-2009 | By : Rodrigo | In : Silverlight 3

Tags: ,

4

Silverlight es una tecnología agnóstica tanto del lado del Cliente como del lado del Servidor, esto es, las aplicaciones de Silverlight pueden ser hospedadas en prácticamente cualquier tecnología Web del lado del Servidor (asp, jsp, php, cgi…) y pueden las aplicaciones Silverlight ejecutarse en la mayoría de los Navegadores modernos hoy en día (Firefox, Internet Explorer, Safari, Chrome…) en la mayoría de los Sistemas Operativos (Windows [2000,XP, Vista, 2003, 2008, 7…], Mac OSX y Linux [por medio del proyecto Moonlight creado por Novell]).  Es muy importante hacer notar lo anterior ya que hoy día aún existe mucha confusión acerca de Silverlight como plataforma para construir aplicaciones RIA.

Silverlight es una tecnología multi-Plataforma y multi-Navegador.

En este artículo veremos cómo podemos hospedar nuestras aplicaciones Silverlight en PHP e incluso cómo inicializar correctamente las aplicaciones por medio de parámetros creados del lado del Servidor con esta tecnología.

Instalando PHP sobre IIS (usuarios de Windows)

Una manera sencilla para ejecutar aplicaciones PHP sobre Windows es utilizar Web Platform Installer, la cual es una herramienta que nos permite instalar fácil y rápidamente plataformas o aplicativos completos en nuestros equipos locales.  En otros Sistemas Operativos la manera de ejecutar y hospedar aplicaciones PHP varía y está fuera de alcance de este artículo.  La siguiente figura muestra Web Platform Installer una vez instalado PHP:


Creando la aplicación de prueba

Crearemos una aplicación Silverlight 3 llamada SLPHP y aceptaremos la creación del sitio Web ASP.NET de prueba.  Esto es simplemente por conveniencia ya que la plantilla de Visual Studio creará el archivo SLPHPTestpage.html el cual cambiaremos su extensión a PHP.  Además de lo anterior agregaremos un elemento de tipo TextBlock en MainPage.xaml para poder apreciar que la aplicación hay sido cargada correctamente en la página (y no veamos la pantalla de color blanco únicamente)./

Tal cual, la página PHP está lista para utilizarse ya que estamos reutilizando todo el contenido de HTML que se ha generado para nosotros, no obstante primero tenemos que publicar nuestra aplicación en un Sitio Web en IIS para que el archivo .php sea identificado como tal.  Lo primero que necesitamos hacer es crear el Sitio Web en IIS (en mi ejemplo, físicamente en D:\SLPHP y en el puerto 9000).

Una vez con el Sitio Web creado, publicamos la aplicación desde Visual Studio .NET al fólder físico en donde está montado.

Al ver este Sitio Web en el navegador podemos darnos cuenta que efectivamente la aplicación es ejecutada en la página .php de manera correcta.  La siguiente figura muestra la aplicación de Silverlight 3 ejecutándose en la página PHP:


Inicializando Parámetros de la aplicación desde PHP

Como ya habíamos comentado y demostrado antes, es posible mandar valores de inicialización en las aplicaciones de Silverlight a través del parámetro InitParams del elemento <object>.  Esto nos permite establecer datos que sean necesarios para la aplicación Silverlight.  Hacer esto con PHP es sencillo si utilizamos la directiva <?php …. ?> justo en el sitio donde establecemos InitParams.  El siguiente fragmento de código muestra cómo se establecen dos parámetros llamados n y p los cuales tendrán el valor de lo que se envíe a través del Querystring:

<param name="initParams" value=<?php echo "'n=" . $_GET["n"] . ",p=" . $_GET["p"] . "'" ?> />

 

Finalmente, podemos utilizar el valor que traen dichos parámetros dentro de la aplicación de Silverlight si los leemos en el evento Startup:

private void Application_Startup(object sender, StartupEventArgs e)

{

    string n = string.Empty;

    string p = string.Empty;

 

    if (e.InitParams["n"] != null)

        n = e.InitParams["n"];

    if (e.InitParams["p"] != null)

        p = e.InitParams["p"];

 

    this.RootVisual = new MainPage(n, p);

}

De esta manera, además de estar hospedando la aplicación de Silverlight en la página de PHP, estamos estableciendo algunos parámetros iniciales del lado del Servidor.

En próximos artículos veremos un poco más acerca de cómo integrar Silverlight con PHP.