Cambiar el contenido de la plantilla dinámicamente
Otra de las ventajas de usar plantillas de control es que se pueden pasar valores de parámetros a la plantilla de control para cambiar su contenido de forma dinámica. En nuestro archivo de ejemplo Cities3-DynamicUpdates.mtd hemos añadido la función de ordenar al ejemplo anterior, Cities3-DynamicUpdates.mtd. Esto permite a los usuarios decidir si quieren ordenar los países o las ciudades que aparecen (imagen siguiente).
Funcionamiento
Para implementar la función de ordenar hemos seguido estos pasos:
•Hemos añadido un parámetro $sort opcional a los dos plantillas de control.
•En el diseño de la página de nivel superior hemos añadido un control Casilla a la derecha de cada uno de los controles Marcador de posición (imagen siguiente) y hemos definido el ancho de la columna de la casilla como wrap_content. También hemos configurado la propiedad Visible de cada una de las casillas como corresponde.
•En el árbol $PERSISTENT hemos añadido dos atributos nuevos, SortCountries y SortCities, y hemos definido el valor fijo de cada uno de ellos como 0 (imagen siguiente). Después indicamos que estos dos nodos se deben actualizar con el valor de la casilla correspondiente (esté o no marcada); para ello arrastramos cada uno de esos nodos hasta su casilla correspondiente.
•Por cada marcador de posición hemos definido que el valor del parámetro $sort sea las expresiones XPath, respectivamente, if ($PERSISTENT/Root/@SortCountries=1) then true() else false() y if ($PERSISTENT/Root/@SortCities=1) then true() else false().
•En cada plantilla de control la secuencia que genera las filas o las columnas de tabla que se repiten viene definida por la expresión XPath if ($sort) then sort($values) else $values. En otras palabras: si el valor del parámetro $sort es true(), entonces se ordenan los elementos de la secuencia $values; de lo contrario se usa la secuencia $values tal y como está (que es el orden del archivo de datos XML CitiesWorldwide.xml).
Esto es lo que ocurre:
•Los valores de los atributos SortCountries y SortCities están definidos con un valor inicial de 0. Los valores de ambos se pueden cambiar marcando (el valor es 1) o desmarcando (valor es 0) sus casillas respectivas.
•Los valores de los respectivos nodos atributivos (SortCountries y SortCities) se pasan con dos marcadores de posición al parámetro $sort de la plantilla de control correspondiente como true() o false().
•La expresión XPath que selecciona los elementos de la secuencia $values, que genera las filas o columnas que se repiten, ordena la secuencia o no en función de si el valor del parámetro $sort de la plantilla es (true() o false()).