Dreamweaver CS4 | ![]() |
Recursos de Dreamweaver CS4 |
Repetición de bloques de código con la directiva loopPara repetir una parte de un bloque de código o el bloque de código completo un número determinado de veces, utilice la siguiente sintaxis: <@ loop (@@param1@@,@@param2@@) @> code block<@ endloop @> Al crear comportamientos de servidor, puede utilizar construcciones en bucle para repetir un bloque de código un número determinado de veces.
<@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @> code block <@ endloop @>La directiva de bucle (loop) acepta como argumentos una lista de matrices de parámetros separadas por comas. En este caso, los argumentos de matrices de parámetros permiten al usuario proporcionar múltiples valores para un único parámetro. El texto que debe repetirse se duplicará n veces, siendo n la longitud de los argumentos de matrices de parámetros. Si se especifica más de un argumento de matrices de parámetros, todas las matrices deberán tener la misma longitud. En la evaluación número i del bucle, los elementos número i de las matrices de parámetros reemplazarán a las instancias de los parámetros asociados en el bloque de código. Al crear un cuadro de diálogo para el comportamiento de servidor, podrá añadir un control al cuadro de diálogo que permita al diseñador de la página crear matrices de parámetros. Dreamweaver incluye un control de matrices sencillo que puede utilizar para crear cuadros de diálogo. Este control, denominado Lista de campo de texto separada por comas, está disponible a través del Creador de comportamientos de servidor. Para crear elementos de interfaz de usuario más complejos, consulte la documentación de la API para crear un cuadro de diálogo con un control que permita crear matrices (un control de cuadrícula, por ejemplo). Puede anidar tantas condiciones o directivas loop (bucle) como desee dentro de una directiva condicional. Por ejemplo, puede especificar que si una expresión es verdadera, se ejecute un bucle. El siguiente ejemplo muestra cómo pueden utilizarse estos bloques de código repetidos para crear comportamientos de servidor (el ejemplo es un comportamiento de ColdFusion que permite obtener acceso a un comportamiento almacenado): <CFSTOREDPROC procedure="AddNewBook" datasource=#MM_connection_DSN# username=#MM_connection_USERNAME# password=#MM_connection_PASSWORD#> <CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryID#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#" cfsqltype="CF_SQL_VARCHAR"> </CFSTOREDPROC> En este ejemplo, la etiqueta CFSTOREDPROC puede incluir cero o más etiquetas CFPROCPARAM. No obstante, sin soporte para la directiva loop, no existe forma alguna de incluir las etiquetas CFPROCPARAM dentro de la etiqueta CFSTOREDPROC insertada. Si se creara este comportamiento de servidor sin utilizar la directiva loop, tendría que dividir este ejemplo en dos participantes: una etiqueta CFSTOREDPROC principal y una etiqueta CFPROCPARAM cuyo tipo participante es múltiple. Empleando la directiva loop, puede escribir el mismo procedimiento de la siguiente forma: <CFSTOREDPROC procedure="@@procedure@@" datasource=#MM_@@conn@@_DSN# username=#MM_@@conn@@_USERNAME# password=#MM_@@conn@@_PASSWORD#> <@ loop (@@paramName@@,@@value@@,@@type@@) @> <CFPROCPARAM type="IN" dbvarname="@@paramName@@" value="@@value@@" cfsqltype="@@type@@"> <@ endloop @> </CFSTOREDPROC> Nota: Se omitirán las líneas nuevas situadas después de cada “@>”.
Si el usuario introdujera los siguientes valores de parámetros en el cuadro de diálogo Creador de comportamientos de servidor: procedure = "proc1" conn = "connection1" paramName = ["@CategoryId", "@Year", "@ISBN"] value = ["#Form.CategoryId#", "#Form.Year#", "#Form.ISBN#"] type = ["CF_SQL_INTEGER", "CF_SQL_INTEGER", "CF_SQL_VARCHAR"] El comportamiento de servidor insertaría en la página el siguiente código de tiempo de ejecución: <CFSTOREDPROC procedure="proc1" datasource=#MM_connection1_DSN# username=#MM_connection1_USERNAME# password=#MM_connection1_PASSWORD#> <CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryId#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@Year" value="#Form.Year#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#" cfsqltype="CF_SQL_VARCHAR"> </CFSTOREDPROC> Nota: Las matrices de parámetros no pueden utilizarse fuera de un bucle si no son parte de una expresión de directiva condicional.
Utilización de las variables _length e _index de la directiva loopLa directiva loop incluye dos variables incorporadas que puede utilizar para condiciones if incrustadas. Dichas variables son: _length y _index. La variable _length se evalúa con respecto a la longitud de las matrices procesadas por la directiva loop, mientras que la variable _index se evalúa con respecto al índice actual de la directiva loop. Para asegurarse de que las variables sólo se reconozcan como directivas y no como parámetros que deben pasarse al bucle, no ponga ninguna de estas variables entre @@. Un ejemplo de utilización de variables incorporadas consiste en aplicarlas al atributo import de la directiva de página. El atributo import exige la separación de los paquetes mediante comas. Si la directiva loop engloba todo el atributo import, sólo proporcionaría como salida el nombre de atributo import= en la primera ocurrencia del bucle, incluidas las comillas dobles de cierre ("), y no proporcionaría como salida una coma en la última ocurrencia del bucle. Empleando la variable incorporada, puede expresarlo de la siguiente forma: <@loop (@@Import@@)@> <@ if(_index == 0)@>import=" <@endif@>@@Import@@<@if (_index == _length-1)@>"<@else@>, <@ endif @> <@endloop@> |