diff --git a/README.md b/README.md index d600d2b..26beda6 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,28 @@ -# AppGini Documentation +# Documentación de AppGini -This repository contains the source files (in Markdown format) used for the [AppGini documentation](https://bigprof.com/appgini/help). +Este repositorio contiene los archivos fuente (en formato Markdown) utilizados para la [documentación de AppGini](https://bigprof.com/appgini/help). -[AppGini](https://bigprof.com/appgini/) is a web application development environment that dramatically reduces the time and effort required to create data-driven web applications. -It enables you to create data-driven web applications without having to write any code. You can use it to create custom web applications for -managing your data, your processes, and your customers. +[AppGini](https://bigprof.com/appgini/) es un entorno de desarrollo de aplicaciones web que reduce drásticamente el tiempo y el esfuerzo necesarios para crear aplicaciones web basadas en datos. +Permite crear aplicaciones web basadas en datos sin tener que escribir ningún código. Puede utilizarlo para crear aplicaciones web personalizadas para +gestionar sus datos, sus procesos y sus clientes. -## Document format +## Formato del documento -The documentation is written in extended Markdown format. Each page is a separate Markdown file in the `pages` directory. -This directory contains subdirectories for each section of the documentation, such as `working-with-projects`, `advanced-topics`, etc. -The `index.md` file in each subdirectory is the main page for that section. +La documentación está escrita en formato Markdown extendido. Cada página es un archivo Markdown independiente en el directorio `pages`. +Este directorio contiene subdirectorios para cada sección de la documentación, como `working-with-projects`, `advanced-topics`, etc. +El archivo `index.md` de cada subdirectorio es la página principal de esa sección. -*Front matter* is used to specify various information about each page. Currently supported front matter fields are: +La *información preliminar* (front matter) se utiliza para especificar diversa información sobre cada página. Actualmente, los campos de información preliminar admitidos son: -* `title`: The title of the page (applied to the `` tag in the generated HTML, as well as the page heading). -* `description`: A brief description of the page's content, applied to the `<meta name="description">` tag in the generated HTML. -* `keywords`: A comma-separated list of keywords for the page, applied to the `<meta name="keywords">` tag in the generated HTML. -* `linkTitle`: The title of the page as it *should* appear in the TOC men. Typically, this is a shorter version of the `title` field. -* `slug`: The URL of the page, relative to the root of the documentation. For example, `help/working-with-projects`. +* `title`: El título de la página (aplicado a la etiqueta `<title>` en el HTML generado, así como al encabezado de la página). +* `description`: Una breve descripción del contenido de la página, aplicada a la etiqueta `<meta name="description">` en el HTML generado. +* `keywords`: Una lista de palabras clave separadas por comas para la página, aplicada a la etiqueta `<meta name="keywords">` en el HTML generado. +* `linkTitle`: El título de la página tal como *debería* aparecer en el menú TDC (Tabla de Contenidos). Normalmente, esta es una versión más corta del campo `title`. +* `slug`: La URL de la página, relativa a la raíz de la documentación. Por ejemplo, `help/working-with-projects`. -In general, the front matter follows the same rules of [Hugo static site generator](https://gohugo.io/content-management/front-matter/), -though Hugo is not used to generate this documentation. Only the yaml dialect of front matter is supported. +En general, la información preliminar sigue las mismas reglas del [generador de sitios estáticos Hugo](https://gohugo.io/content-management/front-matter/), +aunque Hugo no se utiliza para generar esta documentación. Solo se admite el dialecto yaml de la información preliminar. -## Contributing +## Contribuir -If you'd like to contribute to the documentation, please fork this repository, make your changes, and submit a pull request. +Si desea contribuir a la documentación, por favor, haga un fork de este repositorio, realice sus cambios y envíe una pull request. diff --git a/pages/advanced-topics/command-line-parameters.md b/pages/advanced-topics/command-line-parameters.md index e60de5d..a22f0f0 100644 --- a/pages/advanced-topics/command-line-parameters.md +++ b/pages/advanced-topics/command-line-parameters.md @@ -1,72 +1,72 @@ --- -title: Command-line parameters -linkTitle: Command-line parameters +title: Parámetros de línea de comandos +linkTitle: Parámetros de línea de comandos slug: help/advanced-topics/command-line-parameters -description: Command-line parameters to automate AppGini, including generating apps from project files, specifying output paths, and uploading apps to servers. -keywords: command-line parameters, generate, output, upload, log, CI/CD, deployment +description: Parámetros de línea de comandos para automatizar AppGini, incluyendo la generación de aplicaciones a partir de archivos de proyecto, la especificación de rutas de salida y la carga de aplicaciones a servidores. +keywords: parámetros de línea de comandos, generar, salida, cargar, log, CI/CD, despliegue --- -# Command-line parameters +# Parámetros de línea de comandos -> **Command-line parameters work only with [AppGini Pro](https://bigprof.com/appgini/order).** +> **Los parámetros de línea de comandos solo funcionan con [AppGini Pro](https://bigprof.com/appgini/order).** -You can use command-line parameters to automate AppGini. For example, you can add a command to generate an AppGini application as part of your deployment workflow in a batch/script file. Currently, the following parameters are supported: +Puede utilizar parámetros de línea de comandos para automatizar AppGini. Por ejemplo, puede agregar un comando para generar una aplicación AppGini como parte de su flujo de trabajo de despliegue en un archivo de procesamiento por lotes/script. Actualmente, se admiten los siguientes parámetros: ## `--generate` -**Usage:** `--generate "path\to\project\file"` +**Uso:** `--generate "ruta\al\archivo\de\proyecto"` -(Added in AppGini 5.11). Generates application from provided AXP project file, using the output path and file overwriting settings stored in the project file, then quits. If the path to the project file contains spaces, use double-quotes around the project path. +(Añadido en AppGini 5.11). Genera la aplicación a partir del archivo de proyecto AXP proporcionado, utilizando la ruta de salida y la configuración de sobrescritura de archivos almacenada en el archivo de proyecto, y luego sale. Si la ruta al archivo de proyecto contiene espacios, utilice comillas dobles alrededor de la ruta del proyecto. ## `--log` -**Usage:** `--log "path\to\log\file"` +**Uso:** `--log "ruta\al\archivo\de\registro"` -(Added in AppGini 5.81). Specifies a path to a log file to save the output log to when generating an app. If the log file path contains spaces, use double-quotes around it. +(Añadido en AppGini 5.81). Especifica una ruta a un archivo de registro para guardar el registro de salida al generar una aplicación. Si la ruta del archivo de registro contiene espacios, utilice comillas dobles alrededor de ella. ## `--open` -**Usage:** `--open "path\to\project\file"` +**Uso:** `--open "ruta\al\archivo\de\proyecto"` -(Added in AppGini 5.73). Opens the specified project file in AppGini. If the path to the project file contains spaces, use double-quotes around the project path. +(Añadido en AppGini 5.73). Abre el archivo de proyecto especificado en AppGini. Si la ruta al archivo de proyecto contiene espacios, utilice comillas dobles alrededor de la ruta del proyecto. ## `--output` -**Usage:** `--output "path\to\ouput\folder"` +**Uso:** `--output "ruta\a\la\carpeta\de\salida"` -(Added in AppGini 5.73). Specifies output path to use when generating an application, overriding the path stored in the project file. A project file must be specified using `--generate`. If the output path contains spaces, use double-quotes around the output path. +(Añadido en AppGini 5.73). Especifica la ruta de salida a utilizar al generar una aplicación, sobrescribiendo la ruta almacenada في el archivo de proyecto. Se debe especificar un archivo de proyecto utilizando `--generate`. Si la ruta de salida contiene espacios, utilice comillas dobles alrededor de la ruta de salida. ## `--upload` -**Usage:** `--upload "URL"` +**Uso:** `--upload "URL"` -(Added in AppGini 24.19). Uploads the generated app to the specified URL. The URL should point to the root of the AppGini app on the server. If the URL is not provided, the app will be uploaded to application URL specified in the project file. This option must be combined with `--generate` or `--open` to specify the project file. If combined with `--generate`, the app will be generated first then uploaded. If combined with `--open`, the app will be uploaded without generating it. For more information on uploading apps, see [Uploading AppGini apps](../application-uploader.md). +(Añadido en AppGini 24.19). Sube la aplicación generada a la URL especificada. La URL debe apuntar a la raíz de la aplicación AppGini en el servidor. Si no se proporciona la URL, la aplicación se subirá a la URL de la aplicación especificada en el archivo de proyecto. Esta opción debe combinarse con `--generate` o `--open` para especificar el archivo de proyecto. Si se combina con `--generate`, la aplicación se generará primero y luego se subirá. Si se combina con `--open`, la aplicación se subirá sin generarla. Para obtener más información sobre la carga de aplicaciones, consulte [Carga de aplicaciones AppGini](../application-uploader.md). -This feature is great for automating deployment of AppGini apps, and can be used as part of a CI/CD (Continuous Integration/Continuous Deployment) pipeline. See the example in [Deploying one app to multiple servers](#deploying-one-app-to-multiple-servers) below. +Esta característica es ideal para automatizar el despliegue de aplicaciones AppGini y se puede utilizar como parte de un pipeline de CI/CD (Integración Continua/Despliegue Continuo). Consulte el ejemplo en [Despliegue de una aplicación en múltiples servidores](#despliegue-de-una-aplicación-en-múltiples-servidores) a continuación. -## Examples +## Ejemplos -This following command would launch AppGini and generate an application from myapp.axp to the folder stored in the project file. +El siguiente comando iniciaría AppGini y generaría una aplicación a partir de `myapp.axp` en la carpeta almacenada en el archivo de proyecto. ```batch "C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp ``` -This following command would launch AppGini and generate an application from myapp.axp to the folder `C:\xampp\htdocs\myapp2` -- overriding the folder stored in the project file if different. If the specified folder doesn't exist, AppGini will attempt to create it. +El siguiente comando iniciaría AppGini y generaría una aplicación a partir de `myapp.axp` en la carpeta `C:\xampp\htdocs\myapp2`, sobrescribiendo la carpeta almacenada en el archivo de proyecto si es diferente. Si la carpeta especificada no existe, AppGini intentará crearla. ```batch "C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp --output C:\xampp\htdocs\myapp2 ``` -This following command would launch AppGini, generate an application from myapp.axp, and save output log to `C:\logs\myapp.log`. +El siguiente comando iniciaría AppGini, generaría una aplicación a partir de `myapp.axp` y guardaría el registro de salida en `C:\logs\myapp.log`. ```batch "C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp --log C:\logs\myapp.log ``` -## Deploying one app to multiple servers +## Despliegue de una aplicación en múltiples servidores -You can use the `--generate` and `--upload` parameters to deploy the same app to multiple servers. For example, the following batch file would generate an app from `myapp.axp` and upload it to three different servers: +Puede utilizar los parámetros `--generate` y `--upload` para desplegar la misma aplicación en múltiples servidores. Por ejemplo, el siguiente archivo de procesamiento por lotes generaría una aplicación a partir de `myapp.axp` y la subiría a tres servidores diferentes: ```batch "C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp --upload https://server1.com/myapp @@ -74,5 +74,4 @@ You can use the `--generate` and `--upload` parameters to deploy the same app to "C:\Program Files\AppGini\AppGini" --open C:\projects\myapp.axp --upload https://server3.com/myapp ``` -We only need to generate the app once, then open the project file and upload it to each server. - +Solo necesitamos generar la aplicación una vez, luego abrir el archivo de proyecto y subirlo a cada servidor. diff --git a/pages/advanced-topics/custom-limited-access-pages.md b/pages/advanced-topics/custom-limited-access-pages.md index 4216496..7e3c4cc 100644 --- a/pages/advanced-topics/custom-limited-access-pages.md +++ b/pages/advanced-topics/custom-limited-access-pages.md @@ -1,34 +1,34 @@ --- -title: Adding custom limited-access pages and reports -linkTitle: Custom pages +title: Añadir páginas e informes personalizados de acceso limitado +linkTitle: Páginas personalizadas slug: help/advanced-topics/custom-limited-access-pages -description: Learn how to create custom pages and reports in your AppGini application and limit access to them to authenticated users. -keywords: custom pages, custom reports, limited access, user groups, permissions, hooks, getMemberInfo +description: Aprenda a crear páginas e informes personalizados en su aplicación AppGini y a limitar su acceso a usuarios autenticados. +keywords: páginas personalizadas, informes personalizados, acceso limitado, grupos de usuarios, permisos, hooks, getMemberInfo --- -# Adding custom limited-access pages and reports +# Añadir páginas e informes personalizados de acceso limitado -In most applications, you might need to create additional customized pages besides the ones generated by AppGini. For example, you might want to add some reports, charts, switch boards, special forms, .. etc. In this article, we'll explain how you can create an additional page and limit access to it to authenticated users. We'll also explain how to integrate it as part of your AppGini application. +En la mayoría de las aplicaciones, es posible que necesite crear páginas personalizadas adicionales además de las generadas por AppGini. Por ejemplo, puede que desee añadir algunos informes, gráficos, paneles de control, formularios especiales, etc. En este artículo, explicaremos cómo puede crear una página adicional y limitar el acceso a ella a los usuarios autenticados. También explicaremos cómo integrarla como parte de su aplicación AppGini. -You probably want to achieve 3 goals while integrating new custom pages into your AppGini application: +Probablemente desee alcanzar 3 objetivos al integrar nuevas páginas personalizadas en su aplicación AppGini: -1. **Control access to the page.** You want only authenticated users (or maybe only _some_ authenticated users) to be able to access the page, while others are redirected to the homepage or the login form. -2. **Integrate the page appearance into your application.** That is, you want that custom page to display the same top navigation menu shown in the other pages of your application, and to have the same theme. -3. **Link to the page from other pages** so that your application users can easily find it. You might want to link to it from the homepage and/or form the "Jump to" drop-down menu in the top navigation bar. +1. **Controlar el acceso a la página.** Desea que solo los usuarios autenticados (o quizás solo *algunos* usuarios autenticados) puedan acceder a la página, mientras que otros son redirigidos a la página de inicio o al formulario de inicio de sesión. +2. **Integrar la apariencia de la página en su aplicación.** Es decir, desea que esa página personalizada muestre el mismo menú de navegación superior que se muestra en las otras páginas de su aplicación y que tenga el mismo tema. +3. **Enlazar a la página desde otras páginas** para que los usuarios de su aplicación puedan encontrarla fácilmente. Es posible que desee enlazarla desde la página de inicio y/o desde el menú desplegable "Saltar a" en la barra de navegación superior. -We'll cover all the above points in this article. +Cubriremos todos los puntos anteriores en este artículo. -### Control access to your custom page +### Controlar el acceso a su página personalizada -AppGini supports a membership system that is based on user groups. +AppGini admite un sistema de membresía basado en grupos de usuarios. -1. You can grant some permissions to a group (or some groups), and all users under that group would automatically be granted those permissions. -2. Alternatively, you can grant some permissions only to a specific user rather than an entire group. -3. Another approach is to grant some permissions to any authenticated user regardless of which group they belong to. +1. Puede conceder algunos permisos a un grupo (o algunos grupos), y todos los usuarios de ese grupo obtendrán automáticamente esos permisos. +2. Alternativamente, puede conceder algunos permisos solo a un usuario específico en lugar de a todo un grupo. +3. Otro enfoque es conceder algunos permisos a cualquier usuario autenticado, independientemente del grupo al que pertenezca. -Let's see how to apply any of these approaches to your custom page. +Veamos cómo aplicar cualquiera de estos enfoques a su página personalizada. -First of all, let's create a new file in the `hooks` folder inside your AppGini-generated application folder. Let's call it `example.php`. Now, open that file in your text editor and paste the code below then save it. +En primer lugar, creemos un nuevo archivo en la carpeta `hooks` dentro de la carpeta de su aplicación generada por AppGini. Llamémoslo `example.php`. Ahora, abra ese archivo en su editor de texto y pegue el siguiente código, luego guárdelo. ```php <?php @@ -37,15 +37,15 @@ First of all, let's create a new file in the `hooks` folder inside your AppGini- include("$hooks_dir/../lib.php"); ``` -The above code allows you to use the functions provided by AppGini in your custom page, including the function [`getMemberInfo()`](/appgini/help/advanced-topics/hooks/memberInfo-array/) which you can use for checking permissions. Let's see how to implement each of the above access methods. +El código anterior le permite utilizar las funciones proporcionadas por AppGini en su página personalizada, incluida la función [`getMemberInfo()`](/appgini/help/advanced-topics/hooks/memberInfo-array/) que puede utilizar para comprobar los permisos. Veamos cómo implementar cada uno de los métodos de acceso anteriores. -#### Where to place your custom pages +#### Dónde colocar sus páginas personalizadas -**We highly recommend placing your custom pages in the `hooks` folder or a subfolder of it. Placing your custom files outside the `hooks` folder, in the main application folder, would make it harder to maintain your custom files when you regenerate your application using AppGini.** +**Recomendamos encarecidamente colocar sus páginas personalizadas en la carpeta `hooks` o en una subcarpeta de la misma. Colocar sus archivos personalizados fuera de la carpeta `hooks`, en la carpeta principal de la aplicación, dificultaría el mantenimiento de sus archivos personalizados cuando regenere su aplicación con AppGini.** -In some cases, however, you might need to place your custom files outside the main application folder. For example, you might want to create a public-facing page that doesn't require authentication, without exposing your entire application to the public. In this case, you should modify the session cookie path to include the folder containing your custom files. This is important to allow custom pages outside the main application folder to share the same session with the rest of the application. Otherwise, users accessing the custom pages would be considered as guest users. +Sin embargo, en algunos casos, es posible que necesite colocar sus archivos personalizados fuera de la carpeta principal de la aplicación. Por ejemplo, puede que desee crear una página de acceso público que no requiera autenticación, sin exponer toda su aplicación al público. En este caso, debe modificar la ruta de la cookie de sesión para incluir la carpeta que contiene sus archivos personalizados. Esto es importante para permitir que las páginas personalizadas fuera de la carpeta principal de la aplicación compartan la misma sesión con el resto de la aplicación. De lo contrario, los usuarios que accedan a las páginas personalizadas se considerarán usuarios invitados. -Let's take an example to illustrate this. Suppose you have a custom page called `custom-page.php` that you want to place in the parent folder of your AppGini application. And the application is located in a folder called `myapp`. The folder structure would look something like this, assuming your application is located at `/var/www/html/myapp`: +Tomemos un ejemplo para ilustrar esto. Suponga que tiene una página personalizada llamada `custom-page.php` que desea colocar en la carpeta principal de su aplicación AppGini. Y la aplicación se encuentra en una carpeta llamada `myapp`. La estructura de carpetas se vería algo así, suponiendo que su aplicación se encuentra en `/var/www/html/myapp`: ``` /var/www/html/ @@ -55,24 +55,24 @@ Let's take an example to illustrate this. Suppose you have a custom page called custom-page.php ``` -To allow `custom-page.php` to share the same session with the rest of the application, you should create a file called `__bootstrap.php` in the `myapp/hooks` folder if it doesn't already exist. Add the following code to `__bootstrap.php`: +Para permitir que `custom-page.php` comparta la misma sesión con el resto de la aplicación, debe crear un archivo llamado `__bootstrap.php` en la carpeta `myapp/hooks` si aún no existe. Añada el siguiente código a `__bootstrap.php`: ```php -<?php // if you don't have this line already, add it at the top of the file +<?php // si aún no tiene esta línea, añádala al principio del archivo function session_options(&$options) { $cookie_path = '/' . trim(config('appURI'), '/'); - // remove the last subdir from the cookie path + // eliminar el último subdirectorio de la ruta de la cookie $cookie_path = substr($cookie_path, 0, strrpos($cookie_path, '/')); $options['cookie_path'] = $cookie_path; } ``` -The above code modifies the session cookie path to include the parent folder of your application. This way, the session cookie would be shared between your custom page and the rest of the application. +El código anterior modifica la ruta de la cookie de sesión para incluir la carpeta principal de su aplicación. De esta manera, la cookie de sesión se compartirá entre su página personalizada y el resto de la aplicación. -#### Grant access to one or more groups +#### Conceder acceso a uno o más grupos -In case you want all the users that belong to the "Admins" and "Data entry" groups (for example) to be able to access your custom page, let's edit the code to read like this +En caso de que desee que todos los usuarios que pertenecen a los grupos "Admins" y "Data entry" (por ejemplo) puedan acceder a su página personalizada, editemos el código para que quede así: ```php <?php @@ -80,21 +80,21 @@ In case you want all the users that belong to the "Admins" and "Data entry" grou $hooks_dir = __DIR__; include("$hooks_dir/../lib.php"); - /* grant access to the groups 'Admins' and 'Data entry' */ + /* conceder acceso a los grupos 'Admins' y 'Data entry' */ $mi = getMemberInfo(); if(!in_array($mi['group'], ['Admins', 'Data entry'])) { - echo "Access denied"; + echo "Acceso denegado"; exit; } - echo "You can access this page!"; + echo "¡Puede acceder a esta página!"; ``` -If you try accessing the above page from your browser while logged in as any user under the 'Admins' or 'Data entry' groups, you should see the message _You can access this page!_ ... Otherwise, you should see the error _Access denied_. +Si intenta acceder a la página anterior desde su navegador mientras está conectado como cualquier usuario de los grupos 'Admins' o 'Data entry', debería ver el mensaje _¡Puede acceder a esta página!_ ... De lo contrario, debería ver el error _Acceso denegado_. -#### Grant access to one or more users +#### Conceder acceso a uno o más usuarios -Another case is when you want one or more specific users, rather than a whole group, to access the page. We'll still use the getMemberInfo() function but the check will be slightly different: +Otro caso es cuando desea que uno o más usuarios específicos, en lugar de todo un grupo, accedan a la página. Seguiremos utilizando la función getMemberInfo() pero la comprobación será ligeramente diferente: ```php <?php @@ -102,21 +102,21 @@ Another case is when you want one or more specific users, rather than a whole gr $hooks_dir = __DIR__; include("$hooks_dir/../lib.php"); - /* grant access to the groups 'Admins' and 'Data entry' */ + /* conceder acceso a los grupos 'Admins' y 'Data entry' */ $mi = getMemberInfo(); if(!in_array($mi['username'], ['john.doe', 'jane.doe'])) { - echo "Access denied"; + echo "Acceso denegado"; exit; } - echo "You can access this page!"; + echo "¡Puede acceder a esta página!"; ``` -If you try accessing the above page from your browser while logged in as the user 'john.doe' or 'jane.doe', you should see the message _You can access this page!_ ... Otherwise, you should see the error _Access denied_. +Si intenta acceder a la página anterior desde su navegador mientras está conectado como el usuario 'john.doe' o 'jane.doe', debería ver el mensaje _¡Puede acceder a esta página!_ ... De lo contrario, debería ver el error _Acceso denegado_. -#### Grant access to any logged user +#### Conceder acceso a cualquier usuario conectado -Another case is to grant access to your page to all logged users. Here is the code for this scenario. +Otro caso es conceder acceso a su página a todos los usuarios conectados. Aquí está el código para este escenario. ```php <?php @@ -124,21 +124,21 @@ Another case is to grant access to your page to all logged users. Here is the co $hooks_dir = __DIR__; include("$hooks_dir/../lib.php"); - /* grant access to all logged users */ + /* conceder acceso a todos los usuarios conectados */ $mi = getMemberInfo(); if(!$mi['username'] || $mi['username'] == 'guest') { - echo "Access denied"; + echo "Acceso denegado"; exit; } - echo "You can access this page!"; + echo "¡Puede acceder a esta página!"; ``` -The above will deny access to anonymous users and allow access to any logged user. If you've changed the default anonymous username of 'guest' in the admin area, you should update it in line 9 above. +Lo anterior denegará el acceso a los usuarios anónimos y permitirá el acceso a cualquier usuario conectado. Si ha cambiado el nombre de usuario anónimo predeterminado de 'guest' en el área de administración, debe actualizarlo en la línea 9 anterior. -#### Integrate the page appearance into your AppGini application +#### Integrar la apariencia de la página en su aplicación AppGini -After controlling access to your custom page, the next step is to customize its appearance so that it matches the rest of the application pages. This can be very easily achieved by including the header and footer files as follows. +Después de controlar el acceso a su página personalizada, el siguiente paso es personalizar su apariencia para que coincida con el resto de las páginas de la aplicación. Esto se puede lograr muy fácilmente incluyendo los archivos de cabecera y pie de página de la siguiente manera. ```php <?php @@ -148,41 +148,40 @@ After controlling access to your custom page, the next step is to customize its include_once("$hooks_dir/../header.php"); - /* grant access to all logged users */ + /* conceder acceso a todos los usuarios conectados */ $mi = getMemberInfo(); if(!$mi['username'] || $mi['username'] == 'guest') { - echo "Access denied"; + echo "Acceso denegado"; exit; } - echo "You can access this page!"; + echo "¡Puede acceder a esta página!"; include_once("$hooks_dir/../footer.php"); ``` -#### Useful functions to use in your custom pages +#### Funciones útiles para usar en sus páginas personalizadas -AppGini provides a number of useful functions that you can use in your custom pages. For example, you can use the [`sql()`](programming-reference/useful-php-functions.md#sql) function to execute SQL queries, the [`sendmail()`](programming-reference/useful-php-functions.md#sendmail) function to send emails, and the [`sqlValue()`](programming-reference/useful-php-functions.md#sqlValue) function to retrieve a single value from the database. You can find more details about these functions in the [Useful AppGini PHP functions](programming-reference/useful-php-functions.md) page. +AppGini proporciona una serie de funciones útiles que puede utilizar en sus páginas personalizadas. Por ejemplo, puede utilizar la función [`sql()`](programming-reference/useful-php-functions.md#sql) para ejecutar consultas SQL, la función [`sendmail()`](programming-reference/useful-php-functions.md#sendmail) para enviar correos electrónicos y la función [`sqlValue()`](programming-reference/useful-php-functions.md#sqlValue) para recuperar un único valor de la base de datos. Puede encontrar más detalles sobre estas funciones en la página [Funciones PHP útiles de AppGini](programming-reference/useful-php-functions.md). -#### Link to the page from other pages +#### Enlazar a la página desde otras páginas -Finally, you want users to be able to easily reach your page. AppGini makes it easy to add links to the homepage and/or to the navigation menu. To do so, all you need to do is [add a few lines to the "hooks/links-home.php" and/or "hooks/links-navmenu.php" files](/appgini/help/advanced-topics/hooks/folder-contents/). +Finalmente, desea que los usuarios puedan llegar fácilmente a su página. AppGini facilita la adición de enlaces a la página de inicio y/o al menú de navegación. Para ello, todo lo que necesita hacer es [añadir unas pocas líneas a los archivos "hooks/links-home.php" y/o "hooks/links-navmenu.php"](/appgini/help/advanced-topics/hooks/folder-contents/). -> **Tip!** If you plan to add many custom pages to your application, it might not be very practical to place links to all of them directly into the navigation menu or the homepage. A more organized approach in this case is to create a page listing the custom links and add a link to that page rather than to each custom page. +> **¡Consejo!** Si planea añadir muchas páginas personalizadas a su aplicación, puede que no sea muy práctico colocar enlaces a todas ellas directamente en el menú de navegación o en la página de inicio. Un enfoque más organizado en este caso es crear una página que liste los enlaces personalizados y añadir un enlace a esa página en lugar de a cada página personalizada. -#### If you are using AppGini versions before 5.90 +#### Si está utilizando versiones de AppGini anteriores a la 5.90 -If you're using AppGini versions earlier than 5.90, you need to `include` language files when creating a custom page. In all of the above code snippets, change this part of the code: +Si está utilizando versiones de AppGini anteriores a la 5.90, necesita `incluir` archivos de idioma al crear una página personalizada. En todos los fragmentos de código anteriores, cambie esta parte del código: ```php include("$hooks_dir/../lib.php"); ``` -to: +a: ```php include("$hooks_dir/../defaultLang.php"); include("$hooks_dir/../language.php"); include("$hooks_dir/../lib.php"); ``` - diff --git a/pages/advanced-topics/customization-cookbook.md b/pages/advanced-topics/customization-cookbook.md index de7e6b3..1b47b01 100644 --- a/pages/advanced-topics/customization-cookbook.md +++ b/pages/advanced-topics/customization-cookbook.md @@ -1,34 +1,34 @@ --- -title: Customization Cookbook -linkTitle: Customization Cookbook +title: Libro de recetas de personalización +linkTitle: Libro de recetas de personalización slug: help/advanced-topics/customization-cookbook -keywords: customization, cookbook, recipes, hooks, footer-extras.php, tablename-dv.js -description: Quick recipes for common customizations. +keywords: personalización, libro de recetas, recetas, hooks, footer-extras.php, tablename-dv.js +description: Recetas rápidas para personalizaciones comunes. --- -# Customization Cookbook +# Libro de recetas de personalización -This page contains quick recipes for common customizations that you can apply to your AppGini applications. This is a dynamic page that will be updated with new recipes over time. -So, bookmark this page and check back often! +Esta página contiene recetas rápidas para personalizaciones comunes que puede aplicar a sus aplicaciones AppGini. Esta es una página dinámica que se actualizará con nuevas recetas con el tiempo. +¡Así que marque esta página como favorita y vuelva a consultarla a menudo! -## Disable the detail view layout buttons +## Desactivar los botones de diseño de la vista detallada -Add the following code to `hooks/footer-extras.php` to disable the detail view layout buttons (the buttons that allow users to switch single, double, and triple column layouts in the detail view) in all tables: +Añada el siguiente código a `hooks/footer-extras.php` para desactivar los botones de diseño de la vista detallada (los botones que permiten a los usuarios cambiar los diseños de una, dos y tres columnas en la vista detallada) en todas las tablas: ```html <script>AppGini.renderDVLayoutToolbar = () => {};</script> ``` -If you'd like to disable the layout buttons only in certain tables, you can instead create the file `hooks/tablename-dv.js` if it doesn't already exist (replace `tablename` with the actual name of the table), and add the following code to it: +Si desea desactivar los botones de diseño solo en ciertas tablas, puede crear el archivo `hooks/tablename-dv.js` si aún no existe (reemplace `tablename` con el nombre real de la tabla) y añadirle el siguiente código: ```js AppGini.renderDVLayoutToolbar = () => {}; ``` -## Change the clickable icon for links in a table +## Cambiar el icono en el que se puede hacer clic para los enlaces de una tabla -If you want to change the clickable icon for links in a specific table and avoid having to manually update the icon after every project build, you can use the following solution. Create a file named `tablename-tv.js` in the `hooks` folder (replace `tablename` with the actual name of the table containing the link field), and add the following JavaScript code to it: +Si desea cambiar el icono en el que se puede hacer clic para los enlaces de una tabla específica y evitar tener que actualizar manualmente el icono después de cada compilación del proyecto, puede utilizar la siguiente solución. Cree un archivo llamado `tablename-tv.js` en la carpeta `hooks` (reemplace `tablename` con el nombre real de la tabla que contiene el campo de enlace) y añádale el siguiente código JavaScript: ```js $j(() => { @@ -36,90 +36,89 @@ $j(() => { }); ``` -Replace `tablename` with the name of your table and `fieldname` with the name of your link field. This code changes the default globe icon (`glyphicon-globe`) to a shopping cart icon (`glyphicon-shopping-cart`). +Reemplace `tablename` por el nombre de su tabla y `fieldname` por el nombre de su campo de enlace. Este código cambia el icono de globo terráqueo predeterminado (`glyphicon-globe`) por un icono de carrito de la compra (`glyphicon-shopping-cart`). -By placing this code in the `hooks` folder, your changes will persist even if you regenerate the app later. +Al colocar este código en la carpeta `hooks`, sus cambios persistirán incluso si regenera la aplicación más tarde. -## Prepend a currency symbol to amount fields in the table view +## Anteponer un símbolo de moneda a los campos de importe en la vista de tabla -If you'd like to prepend a currency symbol (e.g., ₹ for Indian Rupee) to amount fields in the table view of your AppGini application, you can use CSS for a simple solution. This method is more user-friendly than using **Data format** tab in AppGini and editing the `dataFormats.cfg` file and allows you to customize the display without affecting your database queries. +Si desea anteponer un símbolo de moneda (por ejemplo, ₹ para la rupia india) a los campos de importe en la vista de tabla de su aplicación AppGini, puede utilizar CSS para una solución sencilla. Este método es más fácil de usar que utilizar la pestaña **Formato de datos** en AppGini y editar el archivo `dataFormats.cfg` y le permite personalizar la visualización sin afectar a sus consultas de base de datos. -Open the generated `hooks/footer-extras.php` file in your project and add the following code at the end of the file: +Abra el archivo generado `hooks/footer-extras.php` en su proyecto y añada el siguiente código al final del archivo: ```php <?php if(Request::val('Print_x')) : ?> <style> - /* format is: td.{tablename}-{fieldname} */ + /* el formato es: td.{tablename}-{fieldname} */ td.orders-Total::before, td.order_details-UnitPrice::before, - td.order_details-SubTotal::before /* Attention: no comma (,) after last field! */ + td.order_details-SubTotal::before /* Atención: ¡sin coma (,) después del último campo! */ { content: '₹'; } </style> <?php else : ?> <style> td.orders-Total > a::before, td.order_details-UnitPrice > a::before, - td.order_details-SubTotal > a::before /* Attention: no comma (,) after last field! */ + td.order_details-SubTotal > a::before /* Atención: ¡sin coma (,) después del último campo! */ { content: '₹'; } </style> <?php endif; ?> ``` -**Explanation of the Code** +**Explicación del código** -- The **first block** (lines 2-8) specifies the currency symbol (`₹`) for the amount fields in the **print view**. -- The **second block** (lines 10-15) specifies the currency symbol (`₹`) for the amount fields in the **table view**. +- El **primer bloque** (líneas 2-8) especifica el símbolo de moneda (`₹`) para los campos de importe en la **vista de impresión**. +- El **segundo bloque** (líneas 10-15) especifica el símbolo de moneda (`₹`) para los campos de importe en la **vista de tabla**. -You can replace `₹` with any currency symbol of your choice. For instance, `$` for USD or `€` for EUR. +Puede reemplazar `₹` por cualquier símbolo de moneda de su elección. Por ejemplo, `$` para USD o `€` para EUR. -To specify a currency symbol for a particular field, use the format `td.{tablename}-{fieldname}`. For example: +Para especificar un símbolo de moneda para un campo en particular, utilice el formato `td.{tablename}-{fieldname}`. Por ejemplo: -- For a table named `invoices` with an amount field named `total`, use the selector `td.invoices-total`. +- Para una tabla llamada `invoices` con un campo de importe llamado `total`, utilice el selector `td.invoices-total`. -Here’s an example of how the table view will look after applying the above code: +A continuación, se muestra un ejemplo de cómo se verá la vista de tabla después de aplicar el código anterior: -![Currency Symbol Example](https://cdn.bigprof.com/images/currency-symbol-in-table-view.png) +![Ejemplo de símbolo de moneda](https://cdn.bigprof.com/images/currency-symbol-in-table-view.png) -## Split radio button lookups into two columns +## Dividir las búsquedas de botones de opción en dos columnas -[Lookup fields](../working-with-projects/understanding-lookup-fields.md) in AppGini can be displayed either as a dropdown list or as radio buttons. If you have a lookup field with many options, displaying them as radio buttons can make the form too long and difficult to navigate. +Los [campos de búsqueda](../working-with-projects/understanding-lookup-fields.md) en AppGini se pueden mostrar como una lista desplegable o como botones de opción. Si tiene un campo de búsqueda con muchas opciones, mostrarlas como botones de opción puede hacer que el formulario sea demasiado largo y difícil de navegar. -![A radio button lookup field](https://cdn.bigprof.com/images/radio-button-lookup-field.png) +![Un campo de búsqueda de botones de opción](https://cdn.bigprof.com/images/radio-button-lookup-field.png) -To improve the user experience, you can split the radio button options into two columns. This can be done by adding a simple CSS rule to your `hooks/footer-extras.php` file. First, we need to identify the exact name of the lookup field(s) we want to modify, which we can find in the AppGini project. +Para mejorar la experiencia del usuario, puede dividir las opciones de los botones de opción en dos columnas. Esto se puede hacer añadiendo una regla CSS sencilla a su archivo `hooks/footer-extras.php`. Primero, debemos identificar el nombre exacto del campo o campos de búsqueda que queremos modificar, lo cual podemos encontrar en el proyecto AppGini. -In the above screenshot, for example, the lookup field is named `ReportsTo`. To split the radio buttons into two columns, we can add the following CSS rule to the `hooks/footer-extras.php` file: +En la captura de pantalla anterior, por ejemplo, el campo de búsqueda se llama `ReportsTo`. Para dividir los botones de opción en dos columnas, podemos añadir la siguiente regla CSS al archivo `hooks/footer-extras.php`: ```html <style> -/* CSS rule to split radio button lookup field into two columns */ -/* Replace 'ReportsTo' with the actual name of your lookup field */ +/* Regla CSS para dividir el campo de búsqueda de botones de opción en dos columnas */ +/* Reemplace 'ReportsTo' por el nombre real de su campo de búsqueda */ #ReportsTo-combo-list { br:nth-of-type(2n+1) { display: none; } - label { width: 200px; } /* Adjust the width as needed */ + label { width: 200px; } /* Ajuste el ancho según sea necesario */ } </style> ``` -Here is the same field after applying the above CSS rule: +Este es el mismo campo después de aplicar la regla CSS anterior: -![Radio button lookup field split into two columns](https://cdn.bigprof.com/images/radio-button-lookup-field-split.png) +![Campo de búsqueda de botones de opción dividido en dos columnas](https://cdn.bigprof.com/images/radio-button-lookup-field-split.png) -If you have multiple lookup fields that you want to modify, you can combine them into a single CSS rule. For example, if you have two lookup fields named `ReportsTo` and `Status`, you can use the following CSS rule: +Si tiene varios campos de búsqueda que desea modificar, puede combinarlos en una sola regla CSS. Por ejemplo, si tiene dos campos de búsqueda llamados `ReportsTo` y `Status`, puede utilizar la siguiente regla CSS: ```html <style> -/* CSS rule to split multiple radio button lookup fields into two columns */ -/* Replace 'ReportsTo' and 'Status' with the actual names of your lookup fields */ +/* Regla CSS para dividir varios campos de búsqueda de botones de opción en dos columnas */ +/* Reemplace 'ReportsTo' y 'Status' por los nombres reales de sus campos de búsqueda */ #ReportsTo-combo-list, #Status-combo-list { br:nth-of-type(2n+1) { display: none; } - label { width: 200px; } /* Adjust the width as needed */ + label { width: 200px; } /* Ajuste el ancho según sea necesario */ } </style> ``` -This will apply the same two-column layout to both lookup fields. You can adjust the width of the labels as needed to fit your design. - +Esto aplicará el mismo diseño de dos columnas a ambos campos de búsqueda. Puede ajustar el ancho de las etiquetas según sea necesario para que se ajusten a su diseño. diff --git a/pages/advanced-topics/gitignore.md b/pages/advanced-topics/gitignore.md index 9563748..4313a3a 100644 --- a/pages/advanced-topics/gitignore.md +++ b/pages/advanced-topics/gitignore.md @@ -1,57 +1,57 @@ --- -title: AppGini files to ignore in git repositories +title: Archivos de AppGini a ignorar en repositorios git linkTitle: gitignore slug: help/advanced-topics/gitignore -description: AppGini files to ignore in git repositories to avoid committing unnecessary/unsafe files to your repository. -keywords: gitignore, git, repository, AppGini, files, folders, ignore +description: Archivos de AppGini a ignorar en repositorios git para evitar confirmar archivos innecesarios/inseguros en su repositorio. +keywords: gitignore, git, repositorio, AppGini, archivos, carpetas, ignorar --- -# AppGini files to ignore in git repositories +# Archivos de AppGini a ignorar en repositorios git -If you plan to [use a version control system like git to manage your AppGini application](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes), -you should ignore certain files and folders to avoid committing unnecessary/unsafe files -to your repository. +Si planea [usar un sistema de control de versiones como git para administrar su aplicación AppGini](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes), +debe ignorar ciertos archivos y carpetas para evitar confirmar archivos innecesarios/inseguros +en su repositorio. -But first, let's discuss the recommended way to set up your repository for an AppGini application. -The instructions below assume you are using [git](https://git-scm.com/) as your version control system. -Git is the most popular version control system and is widely used by developers around the world. +Pero primero, analicemos la forma recomendada de configurar su repositorio para una aplicación AppGini. +Las siguientes instrucciones asumen que está utilizando [git](https://git-scm.com/) como su sistema de control de versiones. +Git es el sistema de control de versiones más popular y es ampliamente utilizado por desarrolladores de todo el mundo. -## Recommended repository structure for AppGini applications +## Estructura de repositorio recomendada para aplicaciones AppGini -When you generate an AppGini application, you are asked to select the output folder for the generated files. -When the application is generated inside that folder, it will create the following structure: +Cuando genera una aplicación AppGini, se le pide que seleccione la carpeta de salida para los archivos generados. +Cuando la aplicación se genera dentro de esa carpeta, creará la siguiente estructura: ``` -your-app-folder/ +su-carpeta-de-aplicacion/ admin/ hooks/ images/ resources/ templates/ index.php - .. # other files + .. # otros archivos ``` -Where `your-app-folder` is the folder you selected when generating the application. -**We don't recommend creating (initializing) the git repository inside this folder.** +Donde `su-carpeta-de-aplicacion` es la carpeta que seleccionó al generar la aplicación. +**No recomendamos crear (inicializar) el repositorio git dentro de esta carpeta.** -The reason is that the repository data is stored in a `.git` folder inside the repository root folder. -This folder might get uploaded to your server when you deploy your application, leading to exposing -your repository data to the public. This is a security risk. +La razón es que los datos del repositorio se almacenan en una carpeta `.git` dentro de la carpeta raíz del repositorio. +Esta carpeta podría cargarse en su servidor cuando implemente su aplicación, lo que provocaría la exposición +de los datos de su repositorio al público. Esto es un riesgo de seguridad. -Instead, we recommend setting the folder structure as follows before generating the application: +En su lugar, recomendamos configurar la estructura de carpetas de la siguiente manera antes de generar la aplicación: ``` -your-app-folder/ +su-carpeta-de-aplicacion/ app/ ``` -Then, generate the application inside the `app` folder. This way, the repository root folder will be -`your-app-folder`, and the `.git` folder will be at the root level, not inside the application folder. -Your folder structure after generating the application will look like this: +Luego, genere la aplicación dentro de la carpeta `app`. De esta manera, la carpeta raíz del repositorio será +`su-carpeta-de-aplicacion`, y la carpeta `.git` estará en el nivel raíz, no dentro de la carpeta de la aplicación. +Su estructura de carpetas después de generar la aplicación se verá así: ``` -your-app-folder/ +su-carpeta-de-aplicacion/ app/ admin/ hooks/ @@ -59,14 +59,14 @@ your-app-folder/ resources/ templates/ index.php - .. # other files + .. # otros archivos ``` -After initializing the git repository in `your-app-folder` using the command `git init`, your -folder structure will look like this: +Después de inicializar el repositorio git en `su-carpeta-de-aplicacion` usando el comando `git init`, su +estructura de carpetas se verá así: ``` -your-app-folder/ +su-carpeta-de-aplicacion/ .git/ app/ admin/ @@ -75,29 +75,29 @@ your-app-folder/ resources/ templates/ index.php - .. # other files + .. # otros archivos ``` -You can then safely upload the contents of the `app` folder to your server, without exposing your -repository data. +Luego puede cargar de forma segura el contenido de la carpeta `app` en su servidor, sin exponer los +datos de su repositorio. -## Files and folders to ignore in your git repository +## Archivos y carpetas a ignorar en su repositorio git -Some files and folders generated by AppGini are not meant to be committed to your repository. -This is either because they are generated dynamically by your AppGini application, or because they contain sensitive -information like database connection details. +Algunos archivos y carpetas generados por AppGini no están destinados a ser confirmados en su repositorio. +Esto se debe a que son generados dinámicamente por su aplicación AppGini, o porque contienen información confidencial +como los detalles de conexión a la base de datos. -To ignore these files and folders, you should create a `.gitignore` file in the root of your repository -and add the following lines to it: +Para ignorar estos archivos y carpetas, debe crear un archivo `.gitignore` en la raíz de su repositorio +y agregarle las siguientes líneas: ``` -# ignore files containing sensitive information +# ignorar archivos que contienen información confidencial app/config.php app/config.bak.php app/file-uploader.php app/admin/backups -# ignore files generated dynamically by AppGini application +# ignorar archivos generados dinámicamente por la aplicación AppGini app/setup.md5 app/tmp app/admin/tmp @@ -106,30 +106,30 @@ app/import-csv !app/import-csv/index.html !app/import-csv/.htaccess -# ignore user-uploaded files +# ignorar archivos cargados por el usuario app/images !app/images/index.html !app/images/blank.gif -# ignore other common artifacts +# ignorar otros artefactos comunes *.log *.cache *.zip ``` -This will tell git to ignore the listed files and folders when committing changes to your repository. +Esto le dirá a git que ignore los archivos y carpetas enumerados al confirmar cambios en su repositorio. -## TIP: Store your project file inside your repository +## CONSEJO: Almacene su archivo de proyecto dentro de su repositorio -Another advantage of setting up your repository as described above is that you can store your AppGini -project file (the `.axp` file) inside your repository. This way, you can easily keep track of changes -to your project file and revert to previous versions if needed. +Otra ventaja de configurar su repositorio como se describe anteriormente es que puede almacenar su archivo de proyecto AppGini +(el archivo `.axp`) dentro de su repositorio. De esta manera, puede realizar un seguimiento fácil de los cambios +en su archivo de proyecto y revertir a versiones anteriores si es necesario. -To do this, simply copy your `.axp` file to the root of your repository and commit it to your repository. -The folder structure of your repository will look like this: +Para hacer esto, simplemente copie su archivo `.axp` a la raíz de su repositorio y confírmelo en su repositorio. +La estructura de carpetas de su repositorio se verá así: ``` -your-app-folder/ +su-carpeta-de-aplicacion/ .git/ app/ admin/ @@ -138,16 +138,15 @@ your-app-folder/ resources/ templates/ index.php - .. # other files - your-app.axp + .. # otros archivos + su-aplicacion.axp ``` -Where `your-app.axp` is your AppGini project file. Please note that in the above example, the project file -is stored in the root of the repository, outside the `app` folder. This is recommended to avoid exposing -your project file to the public. The project file contains your entire database structure and settings, -so it's important to keep it secure. +Donde `su-aplicacion.axp` es su archivo de proyecto AppGini. Tenga en cuenta que en el ejemplo anterior, el archivo de proyecto +se almacena en la raíz del repositorio, fuera de la carpeta `app`. Esto se recomienda para evitar exponer +su archivo de proyecto al público. El archivo de proyecto contiene toda la estructura y configuración de su base de datos, +por lo que es importante mantenerlo seguro. -## Related topics - -* [Using git with AppGini to manage code changes](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes) +## Temas relacionados +* [Uso de git con AppGini para administrar cambios de código](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes) diff --git a/pages/advanced-topics/hooks/DataList-object.md b/pages/advanced-topics/hooks/DataList-object.md index 6e259d2..725085b 100644 --- a/pages/advanced-topics/hooks/DataList-object.md +++ b/pages/advanced-topics/hooks/DataList-object.md @@ -1,153 +1,153 @@ --- -title: DataList object -linkTitle: DataList object +title: Objeto DataList +linkTitle: Objeto DataList slug: help/advanced-topics/hooks/DataList-object -description: The DataList object is passed to the tablename_init hook function and exposes many options that you can control to affect the behavior and appearance of each of the AppGini-generated table pages that users see. -keywords: DataList object, tablename_init, hook function, table, appearance, behavior, DataList properties +description: El objeto DataList se pasa a la función hook tablename_init y expone muchas opciones que puede controlar para afectar el comportamiento y la apariencia de cada una de las páginas de tabla generadas por AppGini que ven los usuarios. +keywords: Objeto DataList, tablename_init, función hook, tabla, apariencia, comportamiento, propiedades de DataList --- -# DataList object +# Objeto DataList -The `DataList` object exposes many options that you can control to affect the behavior and appearance of each of the AppGini-generated table pages that users see. - -`DataList` object is passed to the [`tablename_init`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_init) hook function. This hook function is called before displaying data to users. So, you can control the various appearance and behavior options by modifying this object inside that hook function. - -## Here is a list of the editable properties of the `DataList` object +El objeto `DataList` expone muchas opciones que puede controlar para afectar el comportamiento y la apariencia de cada una de las páginas de tabla generadas por AppGini que ven los usuarios. + +El objeto `DataList` se pasa a la función hook [`tablename_init`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_init). Esta función hook se llama antes de mostrar los datos a los usuarios. Por lo tanto, puede controlar las diversas opciones de apariencia y comportamiento modificando este objeto dentro de esa función hook. + +## Aquí hay una lista de las propiedades editables del objeto `DataList` ### `AllowCSV` -Setting this property to `1` allows users to download table records as a CSV file. Setting it to `0` disables this. +Establecer esta propiedad en `1` permite a los usuarios descargar registros de tabla como un archivo CSV. Establecerlo en `0` deshabilita esto. ### `AllowDeleteOfParents` -Setting this property to `1` allows users who have delete permissions to delete a record even if it has child records in other tables. Setting it to `0` disables this. +Establecer esta propiedad en `1` permite a los usuarios que tienen permisos de eliminación eliminar un registro incluso si tiene registros secundarios en otras tablas. Establecerlo en `0` deshabilita esto. ### `AllowFilters` -Setting this property to `1` allows users to access the filters page to view and modify filters. Setting it to `0` disables this. +Establecer esta propiedad en `1` permite a los usuarios acceder a la página de filtros para ver y modificar filtros. Establecerlo en `0` deshabilita esto. ### `AllowPrinting` -Setting this property to `1` allows users to access the 'Print preview' page. Setting it to `0` disables this. +Establecer esta propiedad en `1` permite a los usuarios acceder a la página 'Vista previa de impresión'. Establecerlo en `0` deshabilita esto. ### `AllowSavingFilters` -Setting this property to `1` allows users to save filters as HTML code to access them quickly later. Setting it to `0` disables this. +Establecer esta propiedad en `1` permite a los usuarios guardar filtros como código HTML para acceder a ellos rápidamente más tarde. Establecerlo en `0` deshabilita esto. ### `AllowSorting` -Setting this property to `1` allows users to sort table records. Setting it to `0` disables this. +Establecer esta propiedad en `1` permite a los usuarios ordenar los registros de la tabla. Establecerlo en `0` deshabilita esto. ### `CSVSeparator` -Specifies the field separator to use when downloading data as a CSV file. The default is comma (,). +Especifica el separador de campos a utilizar al descargar datos como un archivo CSV. El valor predeterminado es coma (,). ### `ColCaption` -An array that specifies the titles of columns displayed in the table view. +Una matriz que especifica los títulos de las columnas que se muestran en la vista de tabla. ### `ColNumber` -An array that specifies which fields to use in the table view. It works by selecting some (or all) of the fields listed in the `QueryFieldsTV` property explained below. +Una matriz que especifica qué campos usar en la vista de tabla. Funciona seleccionando algunos (o todos) los campos enumerados en la propiedad `QueryFieldsTV` que se explica a continuación. ### `ColWidth` -An array that specifies the width of each column in the table view. If the `ShowTableHeader` property (explained below) is set to `1`, the `ColWidth` property is overridden by the width values specified in the table view template file (`templates/tablename_templateTV.html`). +Una matriz que especifica el ancho de cada columna en la vista de tabla. Si la propiedad `ShowTableHeader` (explicada a continuación) se establece en `1`, la propiedad `ColWidth` se anula con los valores de ancho especificados en el archivo de plantilla de la vista de tabla (`templates/tablename_templateTV.html`). ### `DefaultSortDirection` -A string that can be set to `'asc'` or `'desc'`. Please see the `DefaultSortField` property below. +Una cadena que se puede establecer en `'asc'` o `'desc'`. Consulte la propiedad `DefaultSortField` a continuación. ### `DefaultSortField` -Specifies the field to use for default sorting of the table view records. This property can be set to a number to specify which field to sort by from the `QueryFieldsTV` property explained below. Alternatively, it can be set to a string specifying an explicit field name or MySQL expression to use for default sorting. +Especifica el campo que se utilizará para la ordenación predeterminada de los registros de la vista de tabla. Esta propiedad se puede establecer en un número para especificar qué campo ordenar de la propiedad `QueryFieldsTV` que se explica a continuación. Alternativamente, se puede establecer en una cadena que especifique un nombre de campo explícito o una expresión MySQL para usar en la ordenación predeterminada. ### `DVClasses` -Was added in AppGini 5.60. Additional CSS classes to apply to the detail view container (space-separated) +Se agregó en AppGini 5.60. Clases CSS adicionales para aplicar al contenedor de la vista detallada (separadas por espacios). ### `FilterPage` -Specifies a custom search page to use when users click on the FILTERS button. If no value is provided, the default filters page is used. You can use this feature to create advanced search forms for your tables. Please see [Creating customized search forms](/appgini/tips-and-tutorials/customized-search-forms) for a detailed example. +Especifica una página de búsqueda personalizada para usar cuando los usuarios hacen clic en el botón FILTROS. Si no se proporciona ningún valor, se utiliza la página de filtros predeterminada. Puede utilizar esta función para crear formularios de búsqueda avanzada para sus tablas. Consulte [Creación de formularios de búsqueda personalizados](/appgini/tips-and-tutorials/customized-search-forms) para obtener un ejemplo detallado. ### `PrimaryKey` -A string that specifies the name of the primary key field for the table. You shouldn't change this value. +Una cadena que especifica el nombre del campo de clave principal de la tabla. No debe cambiar este valor. ### `QueryFieldsCSV` -An associative array specifying the fields used in the query that fetches data when users request to download a CSV file. The array keys represent the field names or MySQL expressions used in the query. The array values represent the column titles to display in the CSV file. +Una matriz asociativa que especifica los campos utilizados en la consulta que recupera datos cuando los usuarios solicitan descargar un archivo CSV. Las claves de la matriz representan los nombres de los campos o las expresiones MySQL utilizadas en la consulta. Los valores de la matriz representan los títulos de las columnas que se mostrarán en el archivo CSV. ### `QueryFieldsFilters` -An associative array specifying the fields used in the filters page. The array keys represent the field names. The array values represent the field titles to display in the filters page. +Una matriz asociativa que especifica los campos utilizados en la página de filtros. Las claves de la matriz representan los nombres de los campos. Los valores de la matriz representan los títulos de los campos que se mostrarán en la página de filtros. ### `QueryFieldsTV` -An associative array specifying the fields that can be displayed in the table view. The array keys represent the field names or MySQL expressions used in the query. The array values represent the column titles. The fields actually displayed in the table view are specified in the `ColNumber` array explained above. +Una matriz asociativa que especifica los campos que se pueden mostrar en la vista de tabla. Las claves de la matriz representan los nombres de los campos o las expresiones MySQL utilizadas en la consulta. Los valores de la matriz representan los títulos de las columnas. Los campos que realmente se muestran en la vista de tabla se especifican en la matriz `ColNumber` explicada anteriormente. ### `QueryFrom` -A string that specifies the contents of the FROM part of the query used in the table view and the CSV file. +Una cadena que especifica el contenido de la parte FROM de la consulta utilizada en la vista de tabla y el archivo CSV. ### `QuickSearch` -A number that specifies how to display the quick search box. It can take any of the following values: +Un número que especifica cómo mostrar el cuadro de búsqueda rápida. Puede tomar cualquiera de los siguientes valores: -* `0`: no quick search box shown. -* `1`: quick box shown on the top left of the table view. -* `2`: quick box shown on the top center of the table view. -* `3`: quick box shown on the top right of the table view. +* `0`: no se muestra ningún cuadro de búsqueda rápida. +* `1`: cuadro rápido que se muestra en la parte superior izquierda de la vista de tabla. +* `2`: cuadro rápido que se muestra en la parte superior central de la vista de tabla. +* `3`: cuadro rápido que se muestra en la parte superior derecha de la vista de tabla. -**Update:** As of AppGini 5.20 and above, setting this property to `0` hides the quick search box, and setting it to any non-zero value displays the quick search box. The position of the box is determined by the screen size. +**Actualización:** A partir de AppGini 5.20 y versiones posteriores, establecer esta propiedad en `0` oculta el cuadro de búsqueda rápida, y establecerla en cualquier valor distinto de cero muestra el cuadro de búsqueda rápida. La posición del cuadro está determinada por el tamaño de la pantalla. ### `QuickSearchText` -A string that specifies the title to display besides the quick search box. +Una cadena que especifica el título que se mostrará junto al cuadro de búsqueda rápida. ### `RecordsPerPage` -A number that specifies how many records to show per page in the table view. +Un número que especifica cuántos registros mostrar por página en la vista de tabla. ### `RedirectAfterInsert` -If users are allowed to add new records to the table, this property specifies the URL to which users will be redirected after adding the new record. +Si los usuarios pueden agregar nuevos registros a la tabla, esta propiedad especifica la URL a la que se redirigirá a los usuarios después de agregar el nuevo registro. ### `SelectedTemplate` -A string that specifies the path to the HTML template file to use for formatting a currently-selected record in the table view. +Una cadena que especifica la ruta al archivo de plantilla HTML que se utilizará para formatear un registro actualmente seleccionado en la vista de tabla. ### `SeparateDV` -A number that is set to `1` to display the detail view in a separate page, or `0` to display it below the table view. +Un número que se establece en `1` para mostrar la vista detallada en una página separada, o `0` para mostrarla debajo de la vista de tabla. ### `ShowTableHeader` -A number that is set to `1` (the default) to display column titles above the table view. Table titles are specified in the `ColCaption` property explained above. If set to `0`, column titles are not displayed (this is useful if you need to change the horizontal layout of fields in the template file `templates/tablename_templateTV.html` to a different non-horizontal layout). +Un número que se establece en `1` (el valor predeterminado) para mostrar los títulos de las columnas sobre la vista de tabla. Los títulos de las tablas se especifican en la propiedad `ColCaption` explicada anteriormente. Si se establece en `0`, no se muestran los títulos de las columnas (esto es útil si necesita cambiar el diseño horizontal de los campos en el archivo de plantilla `templates/tablename_templateTV.html` a un diseño no horizontal diferente). ### `TableTitle` -The title that will be displayed above the table view. +El título que se mostrará sobre la vista de tabla. ### `Template` -A string that specifies the path to the HTML template file to use for formatting all records in the table view except the currently-selected one. +Una cadena que especifica la ruta al archivo de plantilla HTML que se utilizará para formatear todos los registros en la vista de tabla, excepto el actualmente seleccionado. ### `TemplateDV` -Was added in AppGini 5.61. A string that specifies the path (relative to the main directory of the application) to the HTML template file to use for displaying the detail view. +Se agregó en AppGini 5.61. Una cadena que especifica la ruta (relativa al directorio principal de la aplicación) al archivo de plantilla HTML que se utilizará para mostrar la vista detallada. ### `TemplateDVP` -Was added in AppGini 5.61. A string that specifies the path (relative to the main directory of the application) to the HTML template file to use for displaying the print preview of the detail view. +Se agregó en AppGini 5.61. Una cadena que especifica la ruta (relativa al directorio principal de la aplicación) al archivo de plantilla HTML que se utilizará para mostrar la vista previa de impresión de la vista detallada. ### `TVClasses` -Was added in AppGini 5.60. Additional CSS classes to apply to the table view container (space-separated) +Se agregó en AppGini 5.60. Clases CSS adicionales para aplicar al contenedor de la vista de tabla (separadas por espacios). -## Inspecting the `DataList` object +## Inspeccionar el objeto `DataList` -For debugging purposes, you can inspect the contents of the `DataList` object by adding the following code into the `tablename_init` hook function in the generated `hooks/tablename.php` file (replace `tablename` by the actual name of the concerned table): +Para fines de depuración, puede inspeccionar el contenido del objeto `DataList` agregando el siguiente código en la función hook `tablename_init` en el archivo generado `hooks/tablename.php` (reemplace `tablename` por el nombre real de la tabla en cuestión): ```php function tablename_init(&$options, $memberInfo, &$args) { @@ -162,5 +162,4 @@ function tablename_init(&$options, $memberInfo, &$args) { } ``` -The above code will output the contents of the `DataList` object to the browser above the table view. You can use this to inspect, debug and change the various properties. But you should use this carefully in a protected environment for testing purposes only. - +El código anterior mostrará el contenido del objeto `DataList` en el navegador sobre la vista de tabla. Puede usar esto para inspeccionar, depurar y cambiar las diversas propiedades. Pero debe usar esto con cuidado en un entorno protegido solo para fines de prueba. diff --git a/pages/advanced-topics/hooks/WindowMessages-class.md b/pages/advanced-topics/hooks/WindowMessages-class.md index 3daa2bc..4e5f70b 100644 --- a/pages/advanced-topics/hooks/WindowMessages-class.md +++ b/pages/advanced-topics/hooks/WindowMessages-class.md @@ -1,102 +1,98 @@ --- -title: WindowMessages class -linkTitle: WindowMessages class +title: Clase WindowMessages +linkTitle: Clase WindowMessages slug: help/advanced-topics/hooks/WindowMessages-class --- -# WindowMessages class +# Clase WindowMessages +Una clase para mostrar mensajes al usuario en la próxima carga de página. -A class for displaying messages to the user on the next page load. - -To add a message, use the `WindowMessages::add()` method: +Para agregar un mensaje, use el método `WindowMessages::add()`: ```php -WindowMessages::add('Hello world!', 'alert alert-success'); +WindowMessages::add('¡Hola mundo!', 'alert alert-success'); ``` -The first parameter is the message to display, and the second parameter -is the CSS classes to apply to the message `<div>` container. The -second parameter is optional, and defaults to `alert alert-info` -if not specified. +El primer parámetro es el mensaje a mostrar, y el segundo parámetro +son las clases CSS para aplicar al contenedor `<div>` del mensaje. El +segundo parámetro es opcional, y por defecto es `alert alert-info` +si no se especifica. -The message(s) would be displayed on the next page load, and are -specific to the current browser window. That is, if you have multiple -browser windows open, each window will have its own set of messages. +El/los mensaje(s) se mostrarían en la próxima carga de página, y son +específicos de la ventana actual del navegador. Es decir, si tiene múltiples +ventanas del navegador abiertas, cada ventana tendrá su propio conjunto de mensajes. -To add a dismissable message, use the -`WindowMessages::addDismissable()` method: +Para agregar un mensaje descartable, use el +método `WindowMessages::addDismissable()`: ```php -WindowMessages::addDismissable('Hello world!', 'alert alert-success'); +WindowMessages::addDismissable('¡Hola mundo!', 'alert alert-success'); ``` -Parameters are the same as the `WindowMessages::add()` method. +Los parámetros son los mismos que el método `WindowMessages::add()`. -### How does it work? +### ¿Cómo funciona? -The `WindowMessages` class works by assigning a unique ID to each -browser window. The ID is submitted with each request, and the messages -are stored in the session under that ID. When the page is loaded, the -messages are retrieved from the session and displayed. +La clase `WindowMessages` funciona asignando un ID único a cada +ventana del navegador. El ID se envía con cada solicitud, y los mensajes +se almacenan en la sesión bajo ese ID. Cuando se carga la página, los +mensajes se recuperan de la sesión y se muestran. -The most significant part of this is that the messages are assigned to -the current browser window, and not the current session. This means that -if you have multiple browser windows open, each window will have its own -set of messages. +La parte más significativa de esto es que los mensajes se asignan a +la ventana actual del navegador, y no a la sesión actual. Esto significa que +si tiene múltiples ventanas del navegador abiertas, cada ventana tendrá su propio +conjunto de mensajes. -This is particularly useful after inserting a new record, where the user -is redirected to another page. In that case, if you'd like to display -some message to the user, you can use the `WindowMessages` class -to do so, and the message will be displayed on the redirected page. See -the example in [`tablename_after_insert()` hook -documentation](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_insert). +Esto es particularmente útil después de insertar un nuevo registro, donde el usuario +es redirigido a otra página. En ese caso, si desea mostrar +algún mensaje al usuario, puede usar la clase `WindowMessages` +para hacerlo, y el mensaje se mostrará en la página redirigida. Vea +el ejemplo en la documentación del hook [`tablename_after_insert()` +](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_insert). <video width="100%" controls> <source src="https://cdn.bigprof.com/screencasts/show-message-after-insert.mp4" type="video/mp4"> - Your browser does not support the video tag. + Su navegador no soporta la etiqueta de video. </video> -This is also useful for use in `tablename_after_update()` and -`tablename_after_delete()` hooks, where you can display a message -to the user after updating or deleting a record. +Esto también es útil para usar en los hooks `tablename_after_update()` y +`tablename_after_delete()`, donde puede mostrar un mensaje +al usuario después de actualizar o eliminar un registro. -### Including the window ID when redirecting to another page +### Incluir el ID de la ventana al redirigir a otra página -Your AppGini application already includes the window ID when redirecting -to another page, so you don't need to do anything special. But in case -you're using your own code to redirect to another page, you need to -include the window ID in the URL. You can do so by using the -`WindowMessages::windowIdQuery()` method, like this: +Su aplicación AppGini ya incluye el ID de la ventana al redirigir +a otra página, por lo que no necesita hacer nada especial. Pero en caso de +que esté usando su propio código para redirigir a otra página, necesita +incluir el ID de la ventana en la URL. Puede hacerlo usando el +método `WindowMessages::windowIdQuery()`, así: ```php $url = 'http://example.com/another-page.php?' . WindowMessages::windowIdQuery(); redirect($url); ``` -### Including the window ID in a form in custom pages +### Incluir el ID de la ventana en un formulario en páginas personalizadas -Built-in AppGini pages already include the window ID in forms, so you -don't need to do anything special. But in case you're using your own -code to create a form in a custom page, you need to include the window -ID as a hidden field in the form. You can do so using this code where -you want the hidden field in the form: +Las páginas integradas de AppGini ya incluyen el ID de la ventana en los formularios, por lo que +no necesita hacer nada especial. Pero en caso de que esté usando su propio +código para crear un formulario en una página personalizada, necesita incluir el ID de la ventana +como un campo oculto en el formulario. Puede hacerlo usando este código donde +desea el campo oculto en el formulario: ```php echo WindowMessages::includeWindowId(); ``` -### How to display the messages? +### ¿Cómo mostrar los mensajes? -Your AppGini application already includes the code to display the -messages, so you don't need to do anything special. In case of [custom -pages](/appgini/help/advanced-topics/custom-limited-access-pages/) -however, you need to include the following code in your page where you -want the messages to be displayed: +Su aplicación AppGini ya incluye el código para mostrar los +mensajes, por lo que no necesita hacer nada especial. En caso de [páginas +personalizadas](/appgini/help/advanced-topics/custom-limited-access-pages/) +sin embargo, necesita incluir el siguiente código en su página donde desea +que se muestren los mensajes: ```php WindowMessages::getHtml(); ``` - - - diff --git a/pages/advanced-topics/hooks/client-side-validation.md b/pages/advanced-topics/hooks/client-side-validation.md index 9be3401..b4a7252 100644 --- a/pages/advanced-topics/hooks/client-side-validation.md +++ b/pages/advanced-topics/hooks/client-side-validation.md @@ -1,64 +1,63 @@ --- -title: Client-side Custom JavaScript Validation Functions -linkTitle: Client-side validation +title: Funciones de validación JavaScript personalizadas del lado del cliente +linkTitle: Validación del lado del cliente slug: help/advanced-topics/hooks/client-side-validation -description: Learn how to add custom JavaScript validation functions to your AppGini app to validate data on the client side before submission. -keywords: client-side validation, custom validation, JavaScript validation, AppGini validation, customValidateData +description: Aprenda a agregar funciones de validación JavaScript personalizadas a su aplicación AppGini para validar datos en el lado del cliente antes de enviarlos. +keywords: validación del lado del cliente, validación personalizada, validación JavaScript, validación AppGini, customValidateData --- -# Client-side Custom JavaScript Validation Functions +# Funciones de validación JavaScript personalizadas del lado del cliente -> This feature is available in AppGini 24.18 and above. +> Esta función está disponible en AppGini 24.18 y versiones posteriores. -If you define a JavaScript function with the special name `{tablename}_customValidateData` -(where `{tablename}` is the name of a table in your app), it will automatically be called during detail view form submission. -And if it returns `false`, the form will not be submitted. You can define custom validation functions in any of -the following locations: +Si define una función JavaScript con el nombre especial `{tablename}_customValidateData` +(donde `{tablename}` es el nombre de una tabla en su aplicación), se llamará automáticamente durante el envío del formulario de la vista detallada. +Y si devuelve `false`, el formulario no se enviará. Puede definir funciones de validación personalizadas en cualquiera de las +siguientes ubicaciones: * `hooks/header-extras.php` * `hooks/footer-extras.php` * `{tablename}-dv.js` -* [`{tablename}_dv()` hook function](table-specific-hooks.md#tablename_dv) in `hooks/{tablename}.php` +* Función hook [`{tablename}_dv()`](table-specific-hooks.md#tablename_dv) en `hooks/{tablename}.php` -A boolean `insertMode` argument is passed to the function, which indicates the submission purpose as follows: +Se pasa un argumento booleano `insertMode` a la función, que indica el propósito del envío de la siguiente manera: -* `true`: submission purpose is to insert a new record. -* `false`: submission purpose is to update an existing record. +* `true`: el propósito del envío es insertar un nuevo registro. +* `false`: el propósito del envío es actualizar un registro existente. -The function should return a boolean (`true` or `false`), which determines whether the form would be submitted or not. +La función debe devolver un booleano (`true` o `false`), que determina si el formulario se enviará o no. -### Usage notes +### Notas de uso -* Built-in validation functios are *still* called and processed. So, if your custom validation function returns `true` while the -built-in validation doesn't pass, the form *will not* be submitted. +* Las funciones de validación integradas *aún* se llaman y procesan. Por lo tanto, si su función de validación personalizada devuelve `true` mientras que la +validación integrada no pasa, el formulario *no* se enviará. -* Before returning `false`, you should indicate to the user the reason for the failed check. We recommend using -the `AppGini.modalError()` function for that. +* Antes de devolver `false`, debe indicar al usuario el motivo de la comprobación fallida. Recomendamos usar +la función `AppGini.modalError()` para eso. -* This function is run in *synchronous* mode. So if you need to issue an ajax/fetch request during validation, make sure -to run it in synchronous mode as well (for example, set `async` parameter to `false` if using `jQuery.ajax`) otherwise -it won't be evaluated before form submission. +* Esta función se ejecuta en modo *sincrónico*. Por lo tanto, si necesita emitir una solicitud ajax/fetch durante la validación, asegúrese +de ejecutarla también en modo sincrónico (por ejemplo, establezca el parámetro `async` en `false` si usa `jQuery.ajax`); de lo contrario +, no se evaluará antes del envío del formulario. -* This function runs in the client-side to provide a better user experience during submission, but it can be easily -circumvented by the user. You should implement server-side validation as well to enforce data integrity by adding -validation checks in `hooks/{tablename}.php` in the [`{tablename}_before_insert()`](table-specific-hooks.md#tablename_before_insert) -and [`{tablename}_before_update()`](table-specific-hooks.md#tablename_before_update) hook functions. +* Esta función se ejecuta en el lado del cliente para proporcionar una mejor experiencia de usuario durante el envío, pero puede ser fácilmente +eludida por el usuario. También debe implementar la validación del lado del servidor para hacer cumplir la integridad de los datos agregando +comprobaciones de validación en `hooks/{tablename}.php` en las funciones hook [`{tablename}_before_insert()`](table-specific-hooks.md#tablename_before_insert) +y [`{tablename}_before_update()`](table-specific-hooks.md#tablename_before_update). -### Example +### Ejemplo -Let's say we have a table named `customers` with a phone number field named `phone`. We want to make sure that the phone number -is in the format `+1234567890` where `+` is a required prefix followed by 10 digits. To implement this, add the following code -to `hooks/orders-dv.js` (create it if it doesn't exist): +Supongamos que tenemos una tabla llamada `customers` con un campo de número de teléfono llamado `phone`. Queremos asegurarnos de que el número de teléfono +tenga el formato `+1234567890` donde `+` es un prefijo obligatorio seguido de 10 dígitos. Para implementar esto, agregue el siguiente código +a `hooks/orders-dv.js` (créelo si no existe): ```javascript function customers_customValidateData(insertMode) { var phone = $j('#phone').val(); if(!phone.match(/^\+\d{10}$/)) { - AppGini.modalError('Phone number must be in the format +1234567890'); + AppGini.modalError('El número de teléfono debe tener el formato +1234567890'); return false; } return true; } ``` - diff --git a/pages/advanced-topics/hooks/folder-contents.md b/pages/advanced-topics/hooks/folder-contents.md index a2bd743..44be445 100644 --- a/pages/advanced-topics/hooks/folder-contents.md +++ b/pages/advanced-topics/hooks/folder-contents.md @@ -1,129 +1,127 @@ --- -title: Contents of the generated `hooks` folder -linkTitle: The `hooks` folder +title: Contenido de la carpeta `hooks` generada +linkTitle: La carpeta `hooks` slug: help/advanced-topics/hooks/folder-contents -description: The hooks folder is where all your custom-defined code should be placed. AppGini generates the hook files into this folder only if they don't exist. AppGini doesn't overwrite these files later. So, your customized code is retained safely no matter how many times you regenerate your project code. -keywords: hooks, folder, contents, customizing, code, global hooks, table-specific hooks, links-home, links-navmenu, footer-extras, header-extras +description: La carpeta hooks es donde debe colocarse todo su código definido por el usuario. AppGini genera los archivos hook en esta carpeta solo si no existen. AppGini no sobrescribe estos archivos más tarde. Por lo tanto, su código personalizado se conserva de forma segura sin importar cuántas veces regenere el código de su proyecto. +keywords: hooks, carpeta, contenido, personalización, código, hooks globales, hooks específicos de tabla, links-home, links-navmenu, footer-extras, header-extras --- -# Contents of the generated `hooks` folder +# Contenido de la carpeta `hooks` generada -![hooks folder contents](https://cdn.bigprof.com/images/hooks-folder.png "hooks folder contents") +![contenido de la carpeta hooks](https://cdn.bigprof.com/images/hooks-folder.png "contenido de la carpeta hooks") -The hooks folder is where all your custom-defined code should be placed. AppGini generates the hook files into this folder only if they don't exist. AppGini doesn't overwrite these files later. So, your customized code is retained safely no matter how many times you regenerate your project code. +La carpeta `hooks` es donde debe colocarse todo su código definido por el usuario. AppGini genera los archivos hook en esta carpeta solo si no existen. AppGini no sobrescribe estos archivos más tarde. Por lo tanto, su código personalizado se conserva de forma segura sin importar cuántas veces regenere el código de su proyecto. -## Contents of the `hooks` folder +## Contenido de la carpeta `hooks` ### `__global.php` -This file contains hook functions that get called when a new member signs up, when a member signs in successfully and when a member fails to sign in. [_Read more_](/appgini/help/advanced-topics/hooks/global-hooks/). +Este archivo contiene funciones hook que se llaman cuando un nuevo miembro se registra, cuando un miembro inicia sesión correctamente y cuando un miembro no puede iniciar sesión. [_Leer más_](/appgini/help/advanced-topics/hooks/global-hooks/). ### `__bootstrap.php` -This file, if present, is included at the very beginning of each page of your application (including the setup page, the admin area and of course the users area). You can use it to define global functions, classes, or constants that you want to be available in all pages of your application.You could also override any of the constants defined in the generated `definitions.php` file here. For example, you can display the navigation menus in the homepage by adding this code to `__bootstrap.php`: +Este archivo, si está presente, se incluye al principio de cada página de su aplicación (incluida la página de configuración, el área de administración y, por supuesto, el área de usuarios). Puede usarlo para definir funciones, clases o constantes globales que desee que estén disponibles en todas las páginas de su aplicación. También podría anular cualquiera de las constantes definidas en el archivo `definitions.php` generado aquí. Por ejemplo, puede mostrar los menús de navegación en la página de inicio agregando este código a `__bootstrap.php`: ```php define('HOMEPAGE_NAVMENUS', true); ``` -#### Modifying session behavior via `session_options` function in `__bootstrap.php` +#### Modificar el comportamiento de la sesión mediante la función `session_options` en `__bootstrap.php` -Another common use case for the `__bootstrap.php` file is to modify the session behavior. To do so, define a function `session_options` in this file like so: +Otro caso de uso común para el archivo `__bootstrap.php` es modificar el comportamiento de la sesión. Para ello, defina una función `session_options` en este archivo de la siguiente manera: ```php function session_options(&$options) { - // change session behavior here - // example: set session lifetime to 1 week - $options['cookie_lifetime'] = 60 * 60 * 24 * 7; // 1 week + // cambiar el comportamiento de la sesión aquí + // ejemplo: establecer la vida útil de la sesión en 1 semana + $options['cookie_lifetime'] = 60 * 60 * 24 * 7; // 1 semana } ``` -In the above example, we set the session lifetime to 1 week. Other session options you can set are listed and explained at [php.net/manual/en/session.configuration.php](https://www.php.net/manual/en/session.configuration.php). Remove the initial `session.` prefix from the option name when setting it in the `session_options` function. For example, to set the `session.gc_maxlifetime` option, you should set `$options['gc_maxlifetime'] = ...`. +En el ejemplo anterior, establecemos la vida útil de la sesión en 1 semana. Otras opciones de sesión que puede establecer se enumeran y explican en [php.net/manual/en/session.configuration.php](https://www.php.net/manual/en/session.configuration.php). Elimine el prefijo inicial `session.` del nombre de la opción al configurarla en la función `session_options`. Por ejemplo, para establecer la opción `session.gc_maxlifetime`, debe establecer `$options['gc_maxlifetime'] = ...`. ### `{tablename}.php` -For each table in your project, a hook file named the same as the table name is created. This file contains hook functions that get called when a new record is added, when a record is edited, when a record is deleted, … etc. These hooks are table-specific. That's why each table in your project has its own hook file. [_Read more_](/appgini/help/advanced-topics/hooks/table-specific-hooks/) +Para cada tabla de su proyecto, se crea un archivo hook con el mismo nombre que el nombre de la tabla. Este archivo contiene funciones hook que se llaman cuando se agrega un nuevo registro, cuando se edita un registro, cuando se elimina un registro, etc. Estos hooks son específicos de la tabla. Es por eso que cada tabla en su proyecto tiene su propio archivo hook. [_Leer más_](/appgini/help/advanced-topics/hooks/table-specific-hooks/) ### `links-home.php` -You can add custom links in the home page of your application by appending them to this file. The format for each link is: +Puede agregar enlaces personalizados en la página de inicio de su aplicación agregándolos a este archivo. El formato para cada enlace es: ```php $homeLinks[] = [ - 'url' => 'path/to/link', - 'title' => 'Link title', - 'description' => 'Link text', - 'groups' => ['group1', 'group2'], + 'url' => 'ruta/al/enlace', + 'title' => 'Título del enlace', + 'description' => 'Texto del enlace', + 'groups' => ['grupo1', 'grupo2'], 'grid_column_classes' => '', 'panel_classes' => '', 'link_classes' => '', - 'icon' => 'path/to/icon', + 'icon' => 'ruta/al/icono', 'table_group' => '' ]; ``` -*Where:* +*Donde:* -* `url` is the path to the link. This can be a relative path within your application or an external URL. -* `title` is the title of the link as it appears in the home page. -* `description` is the text that appears below the title. HTML is allowed. -* `groups` defines the groups allowed to see this link. Set to `['*']` if you want to show the link to all groups. -* `grid_column_classes` (optional) lists CSS classes to apply to the link block to control its width in different screen sizes. Example valid classes: `col-lg-4`, `col-sm-6`, ... etc. See: [getbootstrap.com/css/#grid](https://getbootstrap.com/css/#grid). -* `panel_classes` (optional) lists CSS classes to apply to the panel. Example valid classes: `panel-warning`, `panel-success`, ... etc. See: [getbootstrap.com/components/#panels](https://getbootstrap.com/components/#panels). -* `link_classes` (optional) lists CSS classes to apply to link. Example valid classes: `btn-danger`, `btn-primary`, ... etc. See: [getbootstrap.com/css/#buttons](https://getbootstrap.com/css/#buttons). -* `icon` is the path to an optional icon to use with the link. -* `table_group` is the ***name*** of the table group you wish to add the link to (if you are using table groups). The value should be set to the exact name of the group. If the table group name contains non-Latin characters, you should convert them to html entities. For example, the character ૫ should be written as `૫` +* `url` es la ruta al enlace. Puede ser una ruta relativa dentro de su aplicación o una URL externa. +* `title` es el título del enlace tal como aparece en la página de inicio. +* `description` es el texto que aparece debajo del título. Se permite HTML. +* `groups` define los grupos autorizados a ver este enlace. Establezca en `['*']` si desea mostrar el enlace a todos los grupos. +* `grid_column_classes` (opcional) enumera las clases CSS que se aplicarán al bloque de enlaces para controlar su ancho en diferentes tamaños de pantalla. Clases válidas de ejemplo: `col-lg-4`, `col-sm-6`, ... etc. Ver: [getbootstrap.com/css/#grid](https://getbootstrap.com/css/#grid). +* `panel_classes` (opcional) enumera las clases CSS que se aplicarán al panel. Clases válidas de ejemplo: `panel-warning`, `panel-success`, ... etc. Ver: [getbootstrap.com/components/#panels](https://getbootstrap.com/components/#panels). +* `link_classes` (opcional) enumera las clases CSS que se aplicarán al enlace. Clases válidas de ejemplo: `btn-danger`, `btn-primary`, ... etc. Ver: [getbootstrap.com/css/#buttons](https://getbootstrap.com/css/#buttons). +* `icon` es la ruta a un icono opcional para usar con el enlace. +* `table_group` es el ***nombre*** del grupo de tablas al que desea agregar el enlace (si está utilizando grupos de tablas). El valor debe establecerse en el nombre exacto del grupo. Si el nombre del grupo de tablas contiene caracteres no latinos, debe convertirlos a entidades html. Por ejemplo, el carácter ૫ debe escribirse como `૫` ### `links-navmenu.php` -You can add custom links to the navigation menu ("Jump to" menu) of your application by appending them to this file. The format for each link is: +Puede agregar enlaces personalizados al menú de navegación (menú "Saltar a") de su aplicación agregándolos a este archivo. El formato para cada enlace es: ```php $navLinks[] = [ - 'url' => 'path/to/link', - 'title' => 'Link title', - 'groups' => ['group1', 'group2'], - 'icon' => 'path/to/icon', + 'url' => 'ruta/al/enlace', + 'title' => 'Título del enlace', + 'groups' => ['grupo1', 'grupo2'], + 'icon' => 'ruta/al/icono', 'table_group' => 0 ]; ``` -*Where:* +*Donde:* -* `groups` defines the groups allowed to see this link. Set to `['*']` if you want to show the link to all groups. -* `icon` is the path to an optional icon to use with the link. -* `table_group` is the ***index*** of table group, default is `0` (first table group). +* `groups` define los grupos autorizados a ver este enlace. Establezca en `['*']` si desea mostrar el enlace a todos los grupos. +* `icon` es la ruta a un icono opcional para usar con el enlace. +* `table_group` es el ***índice*** del grupo de tablas, el valor predeterminado es `0` (primer grupo de tablas). -### `footer-extras.php` and `header-extras.php` +### `footer-extras.php` y `header-extras.php` -Both files allow you to insert additional content to the footer and header (respectively) of all user area pages. -You can add HTML, CSS, JavaScript and/or PHP code into those two files, provided you wrap each type of code in the appropriate tags. +Ambos archivos le permiten insertar contenido adicional en el pie de página y el encabezado (respectivamente) de todas las páginas del área de usuario. +Puede agregar código HTML, CSS, JavaScript y/o PHP en esos dos archivos, siempre que ajuste cada tipo de código en las etiquetas apropiadas. -That is, to add custom CSS, insert it inside `<style>` tags. To add custom JavaScript, insert it inside `<script>` tags. -To add custom PHP code, insert it inside `<?php ... ?>` tags. For HTML, just insert it as is. +Es decir, para agregar CSS personalizado, insértelo dentro de las etiquetas `<style>`. Para agregar JavaScript personalizado, insértelo dentro de las etiquetas `<script>`. +Para agregar código PHP personalizado, insértelo dentro de las etiquetas `<?php ... ?>`. Para HTML, simplemente insértelo tal cual. -> When inserting JavaScript code that makes use of jQuery, make sure to wrap your code in a jQuery `ready` function. For example: +> Al insertar código JavaScript que utiliza jQuery, asegúrese de envolver su código en una función `ready` de jQuery. Por ejemplo: ```javascript <script> $j(() => { - // your code here + // su código aquí }); </script> ``` ### `{tablename}-dv.js` -This file, if present, is included in the detail view of the specified table. You can use it to add custom JavaScript code to the detail view of the specified table. +Este archivo, si está presente, se incluye en la vista detallada de la tabla especificada. Puede usarlo para agregar código JavaScript personalizado a la vista detallada de la tabla especificada. ### `{tablename}-tv.js` -This file, if present, is included in the table view of the specified table. You can use it to add custom JavaScript code to the table view of the specified table. +Este archivo, si está presente, se incluye en la vista de tabla de la tabla especificada. Puede usarlo para agregar código JavaScript personalizado a la vista de tabla de la tabla especificada. ### `index.html` -This file should not be edited. It just redirects visitors who try to access the hooks folder to the main page. - - +Este archivo no debe editarse. Simplemente redirige a los visitantes que intentan acceder a la carpeta `hooks` a la página principal. diff --git a/pages/advanced-topics/hooks/global-hooks.md b/pages/advanced-topics/hooks/global-hooks.md index 311aa99..4e76ea8 100644 --- a/pages/advanced-topics/hooks/global-hooks.md +++ b/pages/advanced-topics/hooks/global-hooks.md @@ -1,16 +1,16 @@ --- -title: Global hooks -linkTitle: Global hooks +title: Hooks globales +linkTitle: Hooks globales slug: help/advanced-topics/hooks/global-hooks -description: Global hook functions are defined in the generated `hooks/__global.php` file. This file contains hook functions that get called when a new member signs up, when a member signs in successfully and when a member fails to sign in. You could also define your own PHP functions here and they'll be visible to all your AppGini application pages. -keywords: global hooks, login_ok, login_failed, member_activity, sendmail_handler, child_records_config +description: Las funciones de hook globales se definen en el archivo `hooks/__global.php` generado. Este archivo contiene funciones de hook que se llaman cuando un nuevo miembro se registra, cuando un miembro inicia sesión correctamente y cuando un miembro no puede iniciar sesión. También podría definir sus propias funciones PHP aquí y serán visibles para todas las páginas de su aplicación AppGini. +keywords: hooks globales, login_ok, login_failed, member_activity, sendmail_handler, child_records_config --- -# Global hooks +# Hooks globales -Global hook functions are defined in the generated `hooks/__global.php` file. This file contains hook functions that get called when a new member signs up, when a member signs in successfully and when a member fails to sign in. You could also define your own PHP functions here and they'll be visible to all your AppGini application pages. - -_The following hook functions are defined in this file:_ +Las funciones de hook globales se definen en el archivo `hooks/__global.php` generado. Este archivo contiene funciones de hook que se llaman cuando un nuevo miembro se registra, cuando un miembro inicia sesión correctamente y cuando un miembro no puede iniciar sesión. También podría definir sus propias funciones PHP aquí y serán visibles para todas las páginas de su aplicación AppGini. + +_Las siguientes funciones de hook se definen en este archivo:_ * [`login_ok()`](#login_ok) * [`login_failed()`](#login_failed) @@ -20,7 +20,7 @@ _The following hook functions are defined in this file:_ ## `login_ok()` -This hook function is called when a member successfully signs in. It can be used for example to redirect members to specific pages rather than the home page, or to save a log of members' activity, … etc. If you open the generated `hooks/__global.php` file in a text editor, you can see this function defined as follows: +Esta función de hook se llama cuando un miembro inicia sesión correctamente. Se puede usar, por ejemplo, para redirigir a los miembros a páginas específicas en lugar de la página de inicio, o para guardar un registro de la actividad de los miembros, etc. Si abre el archivo `hooks/__global.php` generado en un editor de texto, puede ver esta función definida de la siguiente manera: ```php function login_ok($memberInfo, &$args) { @@ -29,33 +29,32 @@ function login_ok($memberInfo, &$args) { } ``` -### Parameters: +### Parámetros: + +* `$memberInfo` es una matriz que contiene detalles del miembro que inició sesión. Consulte [`memberInfo`](/appgini/help/advanced-topics/hooks/memberInfo-array/) para obtener más detalles. +* `$args` actualmente no está implementado pero está reservado para uso futuro. -* `$memberInfo` is an array containing details of the member who signed in. Please refer to [`memberInfo`](/appgini/help/advanced-topics/hooks/memberInfo-array/) for more details. -* `$args` is currently not implemented but is reserved for future use. +### Valor devuelto: - -### Return value: +Una cadena que contiene la URL a la que redirigir al miembro. Puede ser una URL relativa o absoluta. Si la cadena de devolución está vacía, el miembro es redirigido a la página de inicio (`index.php`), que es el comportamiento predeterminado. -A string containing the URL to redirect the member to. It can be a relative or absolute URL. If the return string is empty, the member is redirected to the homepage (`index.php`), which is the default behavior. - - -### Example: -Let's add code to save a log of members' login activity. Each time a member signs in, we'll record his username, IP address, login date and time into a log file. Here's how the hook function looks like after adding this code: +### Ejemplo: + +Agreguemos código para guardar un registro de la actividad de inicio de sesión de los miembros. Cada vez que un miembro inicia sesión, registraremos su nombre de usuario, dirección IP, fecha y hora de inicio de sesión en un archivo de registro. Así es como se ve la función de hook después de agregar este código: ```php function login_ok($memberInfo, &$args) { - // the log file where we'll save member activity + // el archivo de registro donde guardaremos la actividad de los miembros $logFile = 'members.log'; - // the member details we'll be saving into the file + // los detalles del miembro que guardaremos en el archivo $username = $memberInfo['username']; $ip = $memberInfo['IP']; $date = date('m/d/Y'); $time = date('h:i:s a'); - // open the log file and append member login details + // abrir el archivo de registro y agregar los detalles de inicio de sesión del miembro file_put_contents($logFile, "$date,$time,$username,$ip\n", FILE_APPEND); return ''; @@ -64,7 +63,7 @@ function login_ok($memberInfo, &$args) { ## `login_failed()` -This hook function is called when a login attempt fails. It can be used for example to log login errors. If you open the generated `hooks/__global.php` file in a text editor, you can see this function defined as follows: +Esta función de hook se llama cuando falla un intento de inicio de sesión. Se puede usar, por ejemplo, para registrar errores de inicio de sesión. Si abre el archivo `hooks/__global.php` generado en un editor de texto, puede ver esta función definida de la siguiente manera: ```php function login_failed($attempt, &$args) { @@ -72,36 +71,36 @@ function login_failed($attempt, &$args) { } ``` -### Parameters: +### Parámetros: -* `$attempt` is an associative array containing details of the failed login attempt. It contains the following keys: - * `username`: the username entered during the login attempt. - * `password`: the password entered during the login attempt. - * `IP`: the IP address of the client attempting to log in. -* `$args` is currently not implemented but is reserved for future use. +* `$attempt` es una matriz asociativa que contiene detalles del intento de inicio de sesión fallido. Contiene las siguientes claves: + * `username`: el nombre de usuario ingresado durante el intento de inicio de sesión. + * `password`: la contraseña ingresada durante el intento de inicio de sesión. + * `IP`: la dirección IP del cliente que intenta iniciar sesión. +* `$args` actualmente no está implementado pero está reservado para uso futuro. -### Return value: +### Valor devuelto: -None. +Ninguno. -### Example: +### Ejemplo: -To notify the admin when a user fails to log in, we can add this code into the `login_failed()` function: +Para notificar al administrador cuando un usuario no puede iniciar sesión, podemos agregar este código a la función `login_failed()`: ```php function login_failed($attempt, &$args){ - // email of admin + // correo electrónico del administrador $adminEmail = 'admin@domain.com'; - // someone trying to log as admin? + // ¿alguien intenta iniciar sesión como administrador? if($attempt['username'] == 'admin'){ - // send the email + // enviar el correo electrónico @mail( - $adminEmail, // email recipient - "Failed login attempt", // email subject - "Someone from {$attempt['IP']} tried to log in ". - "as admin using the password {$attempt['password']}.", // message + $adminEmail, // destinatario del correo electrónico + "Intento de inicio de sesión fallido", // asunto del correo electrónico + "Alguien desde {$attempt['IP']} intentó iniciar sesión ". + "como administrador usando la contraseña {$attempt['password']}.", // mensaje "From: $adminEmail" ); } @@ -110,7 +109,7 @@ function login_failed($attempt, &$args){ ## `member_activity()` -This hook function is called when a new member signs up. If you open the generated `hooks/__global.php` file in a text editor, you can see this function defined as follows: +Esta función de hook se llama cuando un nuevo miembro se registra. Si abre el archivo `hooks/__global.php` generado en un editor de texto, puede ver esta función definida de la siguiente manera: ```php function member_activity($memberInfo, $activity, &$args){ @@ -131,53 +130,53 @@ function member_activity($memberInfo, $activity, &$args){ } ``` -### Parameters: +### Parámetros: -* `$memberInfo` is an associative array containing details of the member who signed up. Please refer to [`memberInfo`](/appgini/help/advanced-topics/hooks/memberInfo-array/) for more details. -* `$activity` is a string indicating the type of activity. It can be one of the following values: - * `pending`: the member signed up but his account is pending approval by the admin. - * `automatic`: the member signed up and his account is automatically approved. - * `profile`: the member updated his profile. - * `password`: the member changed his password. -* `$args` is currently not implemented but is reserved for future use. +* `$memberInfo` es una matriz asociativa que contiene detalles del miembro que se registró. Consulte [`memberInfo`](/appgini/help/advanced-topics/hooks/memberInfo-array/) para obtener más detalles. +* `$activity` es una cadena que indica el tipo de actividad. Puede ser uno de los siguientes valores: + * `pending`: el miembro se registró pero su cuenta está pendiente de aprobación por parte del administrador. + * `automatic`: el miembro se registró y su cuenta se aprueba automáticamente. + * `profile`: el miembro actualizó su perfil. + * `password`: el miembro cambió su contraseña. +* `$args` actualmente no está implementado pero está reservado para uso futuro. -### Return value: +### Valor devuelto: -None. +Ninguno. -### Example: +### Ejemplo: -This example sends a welcome email to new users who were automatically approved, and a 'please wait' email for new users pending approval. +Este ejemplo envía un correo electrónico de bienvenida a los nuevos usuarios que fueron aprobados automáticamente y un correo electrónico de "espere por favor" para los nuevos usuarios pendientes de aprobación. ```php function member_activity($memberInfo, $activity, &$args){ switch($activity){ case 'pending': - // send 'please wait' email to new user + // enviar correo electrónico de "espere por favor" al nuevo usuario @mail( - $memberInfo['email'], // email recipient - "Thank you for signing up at our website!", // subject + $memberInfo['email'], // destinatario del correo electrónico + "¡Gracias por registrarse en nuestro sitio web!", // asunto - "Dear {$memberInfo['username']}, \n\n". - "We'll review and approve your new account within a few hours.\n\n". - "Thank you.", // message + "Estimado {$memberInfo['username']}, \n\n". + "Revisaremos y aprobaremos su nueva cuenta en unas pocas horas.\n\n". + "Gracias.", // mensaje - "From: support@domain.com" // the "From" address the user will see + "From: support@domain.com" // la dirección "De" que verá el usuario ); break; case 'automatic': - // send 'welcome' email to new user + // enviar correo electrónico de "bienvenida" al nuevo usuario @mail( - $memberInfo['email'], // email recipient - "Thank you for signing up at our website!", // subject + $memberInfo['email'], // destinatario del correo electrónico + "¡Gracias por registrarse en nuestro sitio web!", // asunto - "Dear {$memberInfo['username']}, \n\n". - "You can now log into our website from this page:\n". + "Estimado {$memberInfo['username']}, \n\n". + "Ahora puede iniciar sesión en nuestro sitio web desde esta página:\n". "http://www.domain.com/appgini\n\n". - "Thank you.", // message + "Gracias.", // mensaje - "From: support@domain.com" // the "From" address the user will see + "From: support@domain.com" // la dirección "De" que verá el usuario ); break; @@ -193,7 +192,7 @@ function member_activity($memberInfo, $activity, &$args){ ## `sendmail_handler()` -This hook function is called when AppGini sends an email using the `sendmail()` function. It can be used to modify the email before it's sent. If you open the generated `hooks/__global.php` file in a text editor, you can see this function defined as follows: +Esta función de hook se llama cuando AppGini envía un correo electrónico utilizando la función `sendmail()`. Se puede utilizar para modificar el correo electrónico antes de que se envíe. Si abre el archivo `hooks/__global.php` generado en un editor de texto, puede ver esta función definida de la siguiente manera: ```php function sendmail_handler(&$pm) { @@ -201,20 +200,20 @@ function sendmail_handler(&$pm) { } ``` -### Parameters: +### Parámetros: -* `$pm` is a PHPMailer object, passed by reference. Please refer to [PHPMailer project on Github](https://github.com/PHPMailer/PHPMailer) for more details. +* `$pm` es un objeto PHPMailer, pasado por referencia. Consulte el [proyecto PHPMailer en Github](https://github.com/PHPMailer/PHPMailer) para obtener más detalles. -### Return value: +### Valor devuelto: -None. +Ninguno. ## `child_records_config()` -This hook function was added in AppGini 22.14, and can be used to modify the default configuration of -the [child records section in the detail view](/appgini/help/working-with-projects/understanding-lookup-fields/#parent-children-settings). +Esta función de hook se agregó en AppGini 22.14 y se puede usar para modificar la configuración predeterminada de +la [sección de registros secundarios en la vista detallada](/appgini/help/working-with-projects/understanding-lookup-fields/#parent-children-settings). -If you open the generated `hooks/__global.php` file in a text editor, you can see this function defined as follows: +Si abre el archivo `hooks/__global.php` generado en un editor de texto, puede ver esta función definida de la siguiente manera: ```php function child_records_config($childTable, $childLookupField, &$config) { @@ -222,13 +221,12 @@ function child_records_config($childTable, $childLookupField, &$config) { } ``` -### Parameters: - -* `$childTable` is the name of the child table. -* `$childLookupField` is the name of the lookup field in the child table. -* `$config` is an associative array containing the configuration for displaying child records for the current user, passed by reference. The default configuration, is stored in the `$pcConfig` array defined in the generated `parent-children.php` file. +### Parámetros: -### Return value: +* `$childTable` es el nombre de la tabla secundaria. +* `$childLookupField` es el nombre del campo de búsqueda en la tabla secundaria. +* `$config` es una matriz asociativa que contiene la configuración para mostrar los registros secundarios del usuario actual, pasada por referencia. La configuración predeterminada se almacena en la matriz `$pcConfig` definida en el archivo `parent-children.php` generado. -None. +### Valor devuelto: +Ninguno. diff --git a/pages/advanced-topics/hooks/index.md b/pages/advanced-topics/hooks/index.md index 84f86e1..32844f1 100644 --- a/pages/advanced-topics/hooks/index.md +++ b/pages/advanced-topics/hooks/index.md @@ -1,20 +1,19 @@ --- -title: Hooks (AKA events) -linkTitle: Hooks/events +title: Hooks (también conocidos como eventos) +linkTitle: Hooks/eventos slug: help/advanced-topics/hooks -description: Hooks (events) are means of advanced customization of AppGini-generated apps. They allow you to customize your application behavior in a way that is separate from the generated code. This way, your custom code doesn't get overwritten if you regenerate your app later, and your project is ready for use directly after code generation without any further modifications. -keywords: hooks, events, customization, advanced, code, generated, app, persistent, custom code, code generation, insert, delete, edit, select, records, actions, behavior, appearance, DataList object, tablename_init, hook function, table, DataList properties, global hooks, table-specific hooks, links-home, links-navmenu, footer-extras, header-extras +description: Los hooks (eventos) son medios de personalización avanzada de las aplicaciones generadas por AppGini. Le permiten personalizar el comportamiento de su aplicación de una manera que está separada del código generado. De esta manera, su código personalizado no se sobrescribe si regenera su aplicación más tarde, y su proyecto está listo para usar directamente después de la generación del código sin ninguna modificación adicional. +keywords: hooks, eventos, personalización, avanzado, código, generado, aplicación, persistente, código personalizado, generación de código, insertar, eliminar, editar, seleccionar, registros, acciones, comportamiento, apariencia, objeto DataList, tablename_init, función hook, tabla, propiedades de DataList, hooks globales, hooks específicos de tabla, links-home, links-navmenu, footer-extras, header-extras --- -# Hooks (AKA events) +# Hooks (también conocidos como eventos) -AppGini Hooks (events) are means of advanced customization of AppGini-generated apps. They allow you to customize your application behavior in a way that is separate from the generated code. This way, your custom code doesn't get overwritten if you regenerate your app later, and your project is ready for use directly after code generation without any further modifications. +Los Hooks (eventos) de AppGini son medios de personalización avanzada de las aplicaciones generadas por AppGini. Le permiten personalizar el comportamiento de su aplicación de una manera que está separada del código generado. De esta manera, su código personalizado no se sobrescribe si regenera su aplicación más tarde, y su proyecto está listo para usar directamente después de la generación del código sin ninguna modificación adicional. -> ***Hooks work by intercepting users' actions (inserts, deletes, edits, selection of records, ... etc), and controlling what happens before and after these actions.*** +> ***Los hooks funcionan interceptando las acciones de los usuarios (inserciones, eliminaciones, ediciones, selección de registros, etc.) y controlando lo que sucede antes y después de estas acciones.*** -## How do hooks work? +## ¿Cómo funcionan los hooks? -To use hooks, you should place your code modifications in the generated `hooks` folder. This folder contains a set of files that AppGini creates only once and they don't get overwritten later. These files contain hook functions that you can define. Your AppGini app calls these functions when performing specific tasks and executes the code you define in them. - -For example, to send a notification email when a new order is added to the `orders` table, you should add the mail sending code in the `orders_after_insert()` function inside the `hooks/orders.php` file. This function is automatically called by the AppGini-generated application whenever a new record is created in the `orders` table. Any code you place inside that function is executed when a new record is added to that table through the AppGini-generated interface. +Para utilizar los hooks, debe colocar las modificaciones de su código en la carpeta `hooks` generada. Esta carpeta contiene un conjunto de archivos que AppGini crea solo una vez y que no se sobrescriben más tarde. Estos archivos contienen funciones hook que puede definir. Su aplicación AppGini llama a estas funciones al realizar tareas específicas y ejecuta el código que usted define en ellas. +Por ejemplo, para enviar un correo electrónico de notificación cuando se agrega un nuevo pedido a la tabla `orders`, debe agregar el código de envío de correo en la función `orders_after_insert()` dentro del archivo `hooks/orders.php`. Esta función es llamada automáticamente por la aplicación generada por AppGini cada vez que se crea un nuevo registro en la tabla `orders`. Cualquier código que coloque dentro de esa función se ejecuta cuando se agrega un nuevo registro a esa tabla a través de la interfaz generada por AppGini. diff --git a/pages/advanced-topics/hooks/magic-files.md b/pages/advanced-topics/hooks/magic-files.md index 817a66d..5612c03 100644 --- a/pages/advanced-topics/hooks/magic-files.md +++ b/pages/advanced-topics/hooks/magic-files.md @@ -1,64 +1,63 @@ --- -title: Magic files in the hooks folder -linkTitle: Magic files +title: Archivos mágicos en la carpeta hooks +linkTitle: Archivos mágicos slug: help/advanced-topics/hooks/magic-files -description: Learn about the magic files in the hooks folder that you can create to alter the behavior of your AppGini-generated application. -keywords: hooks, events, customization, advanced, code, generated, app, persistent, custom code, code generation, insert, delete, edit, select, records, actions, behavior, appearance, DataList object, tablename_init, hook function, table, DataList properties, global hooks, table-specific hooks, links-home, links-navmenu, footer-extras, header-extras, tablename-dv.js, tablename-tv.js, tablename.fieldname.csv +description: Aprenda sobre los archivos mágicos en la carpeta hooks que puede crear para alterar el comportamiento de su aplicación generada por AppGini. +keywords: hooks, eventos, personalización, avanzado, código, generado, aplicación, persistente, código personalizado, generación de código, insertar, eliminar, editar, seleccionar, registros, acciones, comportamiento, apariencia, objeto DataList, tablename_init, función hook, tabla, propiedades DataList, hooks globales, hooks específicos de tabla, links-home, links-navmenu, footer-extras, header-extras, tablename-dv.js, tablename-tv.js, tablename.fieldname.csv --- -# Magic files in the hooks folder +# Archivos mágicos en la carpeta `hooks` -You can create some files with specific names inside the hooks folder that your AppGini-generated application would use to perform a specific task. These files are optional, meaning that if they exist, your application will automatically use them to alter a default behavior. But if they don't exist, the default behavior will apply. +Puede crear algunos archivos con nombres específicos dentro de la carpeta `hooks` que su aplicación generada por AppGini usaría para realizar una tarea específica. Estos archivos son opcionales, lo que significa que si existen, su aplicación los usará automáticamente para alterar un comportamiento predeterminado. Pero si no existen, se aplicará el comportamiento predeterminado. -## `tablename-dv.js`: modifying the behavior of the detail view through JavaScript +## `tablename-dv.js`: modificar el comportamiento de la vista detallada a través de JavaScript -If you create a file in the hooks folder and name it `tablename-dv.js` (where *`tablename`* is the name of a table in your application), AppGini will automatically load that file and execute it as a JavaScript file in the browser whenever the detail view of the specified table is displayed. This is very useful to execute JavaScript code in the detail view. +Si crea un archivo en la carpeta `hooks` y lo nombra `tablename-dv.js` (donde *`tablename`* es el nombre de una tabla en su aplicación), AppGini cargará automáticamente ese archivo y lo ejecutará como un archivo JavaScript en el navegador cada vez que se muestre la vista detallada de la tabla especificada. Esto es muy útil para ejecutar código JavaScript en la vista detallada. -For example, let's assume we have an *exams* table, and a score field in that table. We want to limit the contents of that field to a certain range of numbers, and warn the user if he enters a number outside that range. To do so, we could add some javascript code like the following in the magic `hooks/exams-dv.js` file. +Por ejemplo, supongamos que tenemos una tabla *exams* y un campo de puntuación en esa tabla. Queremos limitar el contenido de ese campo a un cierto rango de números y advertir al usuario si ingresa un número fuera de ese rango. Para hacerlo, podríamos agregar un código JavaScript como el siguiente en el archivo mágico `hooks/exams-dv.js`. ```javascript $j(function() { $j('#score').on('change', function() { var score = parseInt($j('score').val()); if(isNaN(score) || score > 100 || score < 0){ - alert('Score must be between 0 and 100!'); + alert('¡La puntuación debe estar entre 0 y 100!'); $j('#score').focus(); } }); }); ``` -Line 1 in the code above makes sure this code won't be executed until the page content and jQuery are loaded to avoid triggering an error. +La línea 1 en el código anterior se asegura de que este código no se ejecute hasta que el contenido de la página y jQuery se carguen para evitar activar un error. -## `tablename-tv.js`: modifying the behavior of a specific table through JavaScript +## `tablename-tv.js`: modificar el comportamiento de una tabla específica a través de JavaScript -If you create a file in the hooks folder and name it `tablename-tv.js` (where *`tablename`* is the name of a table in your application), AppGini will automatically load that file and execute it as a JavaScript file in the browser whenever the specified table is displayed. This is very useful to modify the page content/layout or add custom behavior. +Si crea un archivo en la carpeta `hooks` y lo nombra `tablename-tv.js` (donde *`tablename`* es el nombre de una tabla en su aplicación), AppGini cargará automáticamente ese archivo y lo ejecutará como un archivo JavaScript en el navegador cada vez que se muestre la tabla especificada. Esto es muy útil para modificar el contenido/diseño de la página o agregar un comportamiento personalizado. -For an example of how this can be used to add new batch actions, please see the [`batch_actions()` hook documentation](/appgini/help/advanced-topics/hooks/multiple-record-batch-actions/). +Para ver un ejemplo de cómo se puede usar esto para agregar nuevas acciones por lotes, consulte la [documentación del hook `batch_actions()`](/appgini/help/advanced-topics/hooks/multiple-record-batch-actions/). -Please note that despite the `-tv` suffix, this file is always loaded when the specific table is being viewed, whether the table view is being displayed or not. If you want to execute code *only if* the table view is visible, you can perform this check in the `tablename-tv.js` file: +Tenga en cuenta que, a pesar del sufijo `-tv`, este archivo siempre se carga cuando se visualiza la tabla específica, ya sea que se muestre la vista de tabla o no. Si desea ejecutar código *solo si* la vista de tabla está visible, puede realizar esta verificación en el archivo `tablename-tv.js`: ```javascript $j(() => { if(!$j('.table_view').length) return; - // any code added below will be executed only in table view + // cualquier código agregado a continuación se ejecutará solo en la vista de tabla }); ``` -## `tablename.fieldname.csv`: changing the contents of options lists +## `tablename.fieldname.csv`: cambiar el contenido de las listas de opciones -![Option list example in an AppGini-generated application](https://cdn.bigprof.com/appgini-desktop/help/options-list-in-detail-view.png) +![Ejemplo de lista de opciones en una aplicación generada por AppGini](https://cdn.bigprof.com/appgini-desktop/help/options-list-in-detail-view.png) -In AppGini, you can define a field as an options list so that your application users can select the value of the field from a set of options. For example, the Country field in the screenshot to the left is an options list. +En AppGini, puede definir un campo como una lista de opciones para que los usuarios de su aplicación puedan seleccionar el valor del campo de un conjunto de opciones. Por ejemplo, el campo País en la captura de pantalla de la izquierda es una lista de opciones. -Now, what happens if you want to modify the contents of that options list, for example to limit the list to some countries and remove the others? Normally, you would have to open your project in AppGini, go to the Country field, modify the list contents, regenerate your application, and upload it. That's a long way to go. +Ahora, ¿qué sucede si desea modificar el contenido de esa lista de opciones, por ejemplo, para limitar la lista a algunos países y eliminar los demás? Normalmente, tendría que abrir su proyecto en AppGini, ir al campo País, modificar el contenido de la lista, regenerar su aplicación y cargarla. Es un camino largo. -So, we provide an easier method that doesn't involve regenerating the application. Simply, create a text file in the generated hooks folder and name it like this pattern: `tablename.fieldname.csv` .. For example, for the Countries list in the screenshot, the file should be named `customers.Country.csv`. Next, fill this file with all the options you want the user to be able to choose from, separated by double semi-colons. Here are the file contents for a choice of just 3 countries as an example: +Por lo tanto, proporcionamos un método más fácil que no implica regenerar la aplicación. Simplemente, cree un archivo de texto en la carpeta `hooks` generada y nómbrelo con este patrón: `tablename.fieldname.csv`. Por ejemplo, para la lista de Países en la captura de pantalla, el archivo debe llamarse `customers.Country.csv`. A continuación, complete este archivo con todas las opciones que desea que el usuario pueda elegir, separadas por dos puntos y coma. Aquí están los contenidos del archivo para una selección de solo 3 países como ejemplo: ``` -United States;;United Kingdom;;France +Estados Unidos;;Reino Unido;;Francia ``` -It's now very easy to edit this file using any text editor to add/remove/modify options, without having to regenerate your application. However, please beware that this file takes precedence over the options provided in your AppGini project. So, if you decide later to modify the options in your project file and regenerate your application, you should either delete the `tablename.fieldname.csv` hook file or update it with the new options. - +Ahora es muy fácil editar este archivo usando cualquier editor de texto para agregar/eliminar/modificar opciones, sin tener que regenerar su aplicación. Sin embargo, tenga en cuenta que este archivo tiene prioridad sobre las opciones proporcionadas en su proyecto AppGini. Por lo tanto, si decide más tarde modificar las opciones en su archivo de proyecto y regenerar su aplicación, debe eliminar el archivo hook `tablename.fieldname.csv` o actualizarlo con las nuevas opciones. diff --git a/pages/advanced-topics/hooks/memberInfo-array.md b/pages/advanced-topics/hooks/memberInfo-array.md index eaf3a18..6c04291 100644 --- a/pages/advanced-topics/hooks/memberInfo-array.md +++ b/pages/advanced-topics/hooks/memberInfo-array.md @@ -1,24 +1,23 @@ --- -title: memberInfo array -linkTitle: memberInfo array +title: Matriz memberInfo +linkTitle: Matriz memberInfo slug: help/advanced-topics/hooks/memberInfo-array -description: Learn about the memberInfo array that is passed to many hook functions in AppGini, and contains the info of the currently logged member. -keywords: memberInfo, array, logged member, username, groupID, group, admin, email, IP, custom fields, getMemberInfo +description: Aprenda sobre la matriz memberInfo que se pasa a muchas funciones hook en AppGini y que contiene la información del miembro actualmente conectado. +keywords: memberInfo, matriz, miembro conectado, nombre de usuario, groupID, grupo, admin, correo electrónico, IP, campos personalizados, getMemberInfo --- -# memberInfo array +# Matriz memberInfo -`$memberInfo` is an associative array containing logged member's info. The array contains the following keys: +`$memberInfo` es una matriz asociativa que contiene la información del miembro conectado. La matriz contiene las siguientes claves: -* `username`: the member username. -* `groupID`: the numeric ID of the member's group. -* `group`: the name of the member's group. -* `admin`: true for admin member, false for others. -* `email`: the email address of the member. -* `IP`: the IP address from where the member is currently logged. -* `custom`: a numeric array containing the values of custom fields for the member. Custom fields can be defined via the admin settings page in the admin area of your AppGini application. Currently up to 4 custom fields are supported. So, to access the value of the first custom field for the member, you can use `$memberInfo['custom'][0]`. +* `username`: el nombre de usuario del miembro. +* `groupID`: el ID numérico del grupo del miembro. +* `group`: el nombre del grupo del miembro. +* `admin`: verdadero para el miembro administrador, falso para los demás. +* `email`: la dirección de correo electrónico del miembro. +* `IP`: la dirección IP desde la que el miembro está actualmente conectado. +* `custom`: una matriz numérica que contiene los valores de los campos personalizados para el miembro. Los campos personalizados se pueden definir a través de la página de configuración de administración en el área de administración de su aplicación AppGini. Actualmente se admiten hasta 4 campos personalizados. Por lo tanto, para acceder al valor del primer campo personalizado para el miembro, puede usar `$memberInfo['custom'][0]`. -The `$memberInfo` array is passed to many hook functions, both [global](/appgini/help/advanced-topics/hooks/global-hooks/) and [table-specific](/appgini/help/advanced-topics/hooks/table-specific-hooks/). For example, you can access the username of the currently logged member in a hook function by using `$memberInfo['username']`. - -> **Tip:** You can retrieve this array in your own code by calling the function `getMemberInfo()`, which returns this array. +La matriz `$memberInfo` se pasa a muchas funciones hook, tanto [globales](/appgini/help/advanced-topics/hooks/global-hooks/) como [específicas de tabla](/appgini/help/advanced-topics/hooks/table-specific-hooks/). Por ejemplo, puede acceder al nombre de usuario del miembro actualmente conectado en una función hook usando `$memberInfo['username']`. +> **Consejo:** Puede recuperar esta matriz en su propio código llamando a la función `getMemberInfo()`, que devuelve esta matriz. diff --git a/pages/advanced-topics/hooks/multiple-record-batch-actions.md b/pages/advanced-topics/hooks/multiple-record-batch-actions.md index 0e0b68c..e8a489e 100644 --- a/pages/advanced-topics/hooks/multiple-record-batch-actions.md +++ b/pages/advanced-topics/hooks/multiple-record-batch-actions.md @@ -1,50 +1,49 @@ --- -title: Adding custom "batch actions" that apply to multiple records -linkTitle: Batch actions +title: Agregar "acciones por lotes" personalizadas que se aplican a múltiples registros +linkTitle: Acciones por lotes slug: help/advanced-topics/hooks/multiple-record-batch-actions -description: Learn how to add custom batch actions to your AppGini-generated application that apply to multiple records at once. -keywords: batch actions, multiple records, table view, hooks, tablename_batch_actions, tablename-tv.js, print mailing labels, Northwind +description: Aprenda cómo agregar acciones por lotes personalizadas a su aplicación generada por AppGini que se aplican a múltiples registros a la vez. +keywords: acciones por lotes, múltiples registros, vista de tabla, hooks, tablename_batch_actions, tablename-tv.js, imprimir etiquetas de correo, Northwind --- -# Adding custom "batch actions" that apply to multiple records +# Agregar "acciones por lotes" personalizadas que se aplican a múltiples registros -When you select one or more records in the table view, a "More" button is displayed above the table. If you click that button, it opens the batch actions menu. This menu displays some actions that you can perform on the records you selected -- see the screenshot below. Which actions show up in the menu depends on the permissions you have. +Cuando selecciona uno o más registros en la vista de tabla, se muestra un botón "Más" encima de la tabla. Si hace clic en ese botón, se abre el menú de acciones por lotes. Este menú muestra algunas acciones que puede realizar en los registros que seleccionó; consulte la captura de pantalla a continuación. Las acciones que aparecen en el menú dependen de los permisos que tenga. -![Batch actions menu](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/select-multiple-records-show-batch-actions.png) +![Menú de acciones por lotes](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/select-multiple-records-show-batch-actions.png) -For example, if you are an admin, you can change the owner of the records. If you have delete permissions, and you've enabled mass-delete in AppGini, you can delete the records. +Por ejemplo, si es un administrador, puede cambiar el propietario de los registros. Si tiene permisos de eliminación y ha habilitado la eliminación masiva en AppGini, puede eliminar los registros. -## Adding custom batch actions +## Agregar acciones por lotes personalizadas -> **TIP!** -> -> Don't have the time or programming knowledge to write your own batch actions? We have a plugin for that now! Check our [Mass Update plugin](/appgini/applications/mass-update-plugin). This plugin allows you to add as many batch actions as you want in a very short time, without writing a single line of code. - -You can define your own batch actions inside the body of the `tablename_batch_actions()` function in the generated `hooks/tablename.php` file. In this function, you just define the name of the batch action. You can add the details and functionality of the batch action in another place that we'll come to in a moment. The `tablename_batch_actions()` hook works by returning an array of actions. Your AppGini application receives this array and displays the actions in the "More" menu. +> **¡CONSEJO!** +> +> ¿No tiene el tiempo o los conocimientos de programación para escribir sus propias acciones por lotes? ¡Ahora tenemos un complemento para eso! Consulte nuestro [complemento de Actualización masiva](/appgini/applications/mass-update-plugin). Este complemento le permite agregar tantas acciones por lotes como desee en muy poco tiempo, sin escribir una sola línea de código. -When a user chooses an action from the "More" menu, your AppGini application calls the javascript function linked to that action. The name of this javascript function is part of the data in the array we mentioned above (the array returned from the `tablename_batch_actions` hook). +Puede definir sus propias acciones por lotes dentro del cuerpo de la función `tablename_batch_actions()` en el archivo `hooks/tablename.php` generado. En esta función, solo define el nombre de la acción por lotes. Puede agregar los detalles y la funcionalidad de la acción por lotes en otro lugar al que llegaremos en un momento. El hook `tablename_batch_actions()` funciona devolviendo una matriz de acciones. Su aplicación AppGini recibe esta matriz y muestra las acciones en el menú "Más". -You should define the javascript function in the file `tablename-tv.js` inside the `hooks` folder. This function could do anything you want to apply to the selected records. It could open a new page, or make an ajax request, or any other action you wish to do. There is no specific implementation that you have to follow here. We'll discuss an example action with all these details below so you can use it as a guideline. +Cuando un usuario elige una acción del menú "Más", su aplicación AppGini llama a la función javascript vinculada a esa acción. El nombre de esta función javascript es parte de los datos en la matriz que mencionamos anteriormente (la matriz devuelta por el hook `tablename_batch_actions`). -This diagram explains how this all works. +Debe definir la función javascript en el archivo `tablename-tv.js` dentro de la carpeta `hooks`. Esta función podría hacer cualquier cosa que desee aplicar a los registros seleccionados. Podría abrir una nueva página, realizar una solicitud ajax o cualquier otra acción que desee realizar. No hay una implementación específica que deba seguir aquí. Discutiremos una acción de ejemplo con todos estos detalles a continuación para que pueda usarla como guía. -![Batch actions diagram](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/appgini-record-action-hook.png) +Este diagrama explica cómo funciona todo esto. -So, here is the sequence of events: +![Diagrama de acciones por lotes](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/appgini-record-action-hook.png) -1. The user opens the table view of a table in your AppGini application. -2. The application calls the hook function `tablename_batch_actions()`. This is where you define the extra actions users can choose. -3. This function returns an array that describes one or more actions and the name of the javascript function to call if the user selects an action. The application adds those actions to the "More" menu. -4. If the user selects one or more records, opens the "More" menu, and chooses one of the actions you defined in the `tablename_batch_actions()` hook, the application passes the IDs of the selected records to the javascript function you associated with that action. +Entonces, aquí está la secuencia de eventos: -## Example: Adding a batch action to print mailing labels for selected records +1. El usuario abre la vista de tabla de una tabla en su aplicación AppGini. +2. La aplicación llama a la función hook `tablename_batch_actions()`. Aquí es donde define las acciones adicionales que los usuarios pueden elegir. +3. Esta función devuelve una matriz que describe una o más acciones y el nombre de la función javascript a la que llamar si el usuario selecciona una acción. La aplicación agrega esas acciones al menú "Más". +4. Si el usuario selecciona uno o más registros, abre el menú "Más" y elige una de las acciones que definió في el hook `tablename_batch_actions()`, la aplicación pasa los ID de los registros seleccionados a la función javascript que asoció con esa acción. +## Ejemplo: Agregar una acción por lotes para imprimir etiquetas de correo para los registros seleccionados -Back to the customers table example: +Volviendo al ejemplo de la tabla de clientes: -![Customers table](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/select-multiple-records-show-batch-actions.png) +![Tabla de clientes](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/select-multiple-records-show-batch-actions.png) -Let's say you want to add a batch action to print mailing labels for the selected customers. Here is how you can do it: the first step is to add the action into the `customers_batch_actions()` hook. To do so, we'll open the `hooks/customers.php` file, we should find our hook function: +Digamos que desea agregar una acción por lotes para imprimir etiquetas de correo para los clientes seleccionados. Así es como puede hacerlo: el primer paso es agregar la acción al hook `customers_batch_actions()`. Para hacerlo, abriremos el archivo `hooks/customers.php`, deberíamos encontrar nuestra función hook: ```php function customers_batch_actions(&$args){ @@ -53,14 +52,14 @@ function customers_batch_actions(&$args){ } ``` -The function above is empty (we call this a skeleton function). We need to add our action to it. So, let's modify it to read: +La función anterior está vacía (la llamamos función esqueleto). Necesitamos agregarle nuestra acción. Entonces, modifiquémosla para que diga: ```php function customers_batch_actions(&$args){ return [ [ - 'title' => 'Print mail labels', + 'title' => 'Imprimir etiquetas de correo', 'function' => 'print_mail_labels', 'icon' => 'th-list' ] @@ -68,47 +67,47 @@ function customers_batch_actions(&$args){ } ``` -The code above tells our application to display an extra action in the "More" menu labeled "Print mail labels". If a user chooses that action, the application will pass the IDs (primary key values) of the selected records to a javascript function named `print_mail_labels()`. We didn't write this function yet. We'll do so in a moment. But before we do so, let's take a look on the "More" menu after adding the code above. +El código anterior le dice a nuestra aplicación que muestre una acción adicional en el menú "Más" con la etiqueta "Imprimir etiquetas de correo". Si un usuario elige esa acción, la aplicación pasará los ID (valores de clave principal) de los registros seleccionados a una función javascript llamada `print_mail_labels()`. Aún no hemos escrito esta función. Lo haremos en un momento. Pero antes de hacerlo, echemos un vistazo al menú "Más" después de agregar el código anterior. -![More menu with print mail labels action](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/new-batch-action-defined.png) +![Menú Más con la acción de imprimir etiquetas de correo](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/new-batch-action-defined.png) -We've specified an icon name in the code above. So, the icon shows up to the left of the new action. For a full list of supported icon names, please refer to the [Bootstrap Glyphicons list](https://getbootstrap.com/components/#glyphicons). All icons there have a name like "glyphicon-xyz" ... just use the xyz part in our hook code to specify an icon. +Hemos especificado un nombre de icono en el código anterior. Por lo tanto, el icono aparece a la izquierda de la nueva acción. Para obtener una lista completa de los nombres de iconos admitidos, consulte la [lista de Glyphicons de Bootstrap](https://getbootstrap.com/components/#glyphicons). Todos los iconos allí tienen un nombre como "glyphicon-xyz"... simplemente use la parte xyz en nuestro código de hook para especificar un icono. -> **TIP!** +> **¡CONSEJO!** > -> To display the batch action only to users from a specific group, you can add a conditional check in the hook function. For example, to display the action only to users in the 'Admins' group, you can add the following code: +> Para mostrar la acción por lotes solo a los usuarios de un grupo específico, puede agregar una verificación condicional en la función hook. Por ejemplo, para mostrar la acción solo a los usuarios del grupo 'Admins', puede agregar el siguiente código: > ```php > $memberInfo = getMemberInfo(); -> // if the current user is not an admin, return an empty array +> // si el usuario actual no es un administrador, devuelve una matriz vacía > if($memberInfo['group'] != 'Admins') return []; -> -> return [ ... ]; // your batch actions array here +> +> return [ ... ]; // su matriz de acciones por lotes aquí > ``` -The next step is to define the `print_mail_labels()` javascript function. This is the function that our application would call if the user clicks the "Print mail labels" item in the menu. We should write this function in the `customers-tv.js` file in the `hooks` folder ... If you don't find that file in the folder, just create it there .. the format is `tablename-tv.js` (where `tablename` is the name of the concerned table). If the file exists in the hooks folder, it's loaded in the table view. So, whatever javascript code you put there will get executed in the table view of the concerned table. +El siguiente paso es definir la función javascript `print_mail_labels()`. Esta es la función a la que nuestra aplicación llamaría si el usuario hace clic en el elemento "Imprimir etiquetas de correo" en el menú. Deberíamos escribir esta función en el archivo `customers-tv.js` en la carpeta `hooks`... Si no encuentra ese archivo en la carpeta, simplemente créelo allí... el formato es `tablename-tv.js` (donde `tablename` es el nombre de la tabla en cuestión). Si el archivo existe en la carpeta `hooks`, se carga en la vista de tabla. Por lo tanto, cualquier código javascript que coloque allí se ejecutará en la vista de tabla de la tabla en cuestión. -Let's write our code in the `customers-tv.js` file as follows: +Escribamos nuestro código en el archivo `customers-tv.js` de la siguiente manera: ```javascript function print_mail_labels(table_name, ids) { - alert("IDs selected from " + table_name + ": " + ids); + alert("ID seleccionados de " + table_name + ": " + ids); } ``` -Here is what happens when we choose the "Print mail labels" action after adding the above code: +Esto es lo que sucede cuando elegimos la acción "Imprimir etiquetas de correo" después de agregar el código anterior: -![Alert showing selected IDs](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/testing-new-batch-action-javascript-function-parameters.png) +![Alerta que muestra los ID seleccionados](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/testing-new-batch-action-javascript-function-parameters.png) -The above code simply displays the parameters passed to the `print_mail_labels()` function. When you write the javascript function, you should write it so that it receives two parameters. The first one is a string containing the table name (this is useful if you have one function for handling multiple tables), and the second one is an array of selected record IDs (primary key values of selected records). +El código anterior simplemente muestra los parámetros pasados a la función `print_mail_labels()`. Cuando escriba la función javascript, debe escribirla para que reciba dos parámetros. El primero es una cadena que contiene el nombre de la tabla (esto es útil si tiene una función para manejar múltiples tablas), y el segundo es una matriz de ID de registros seleccionados (valores de clave principal de los registros seleccionados). -Let's change the javascript code to do something more useful. We'll pass the selected IDs to a PHP script to display the mail labels for those records. So let's rewrite the `print_mail_labels()` function as follows. +Cambiemos el código javascript para hacer algo más útil. Pasaremos los ID seleccionados a un script PHP para mostrar las etiquetas de correo de esos registros. Así que reescribamos la función `print_mail_labels()` de la siguiente manera. ```javascript function print_mail_labels(table_name, ids) { - /* - we'll open the mail labels page in a new window - that page is a server-side PHP script named mail-labels.php - but first, let's prepare the parameters to send to that script + /* + abriremos la página de etiquetas de correo en una nueva ventana + esa página es un script PHP del lado del servidor llamado mail-labels.php + pero primero, preparemos los parámetros para enviar a ese script */ var url = 'mail-labels.php?table=' + table_name; for(var i = 0; i < ids.length; i++){ @@ -121,35 +120,35 @@ function print_mail_labels(table_name, ids) { } ``` -Finally, let's write the server-side `mail-labels.php` script. Based on the code above, we assumed the location of this script to be the main folder of our AppGini application. Here is how this script might look like: +Finalmente, escribamos el script `mail-labels.php` del lado del servidor. Según el código anterior, asumimos que la ubicación de este script es la carpeta principal de nuestra aplicación AppGini. Así es como podría verse este script: ```php <?php /* - Including the following files allows us to use many shortcut - functions provided by AppGini. Here, we'll be using the - following functions: + Incluir los siguientes archivos nos permite usar muchos accesos directos + funciones proporcionadas por AppGini. Aquí, usaremos las + siguientes funciones: makeSafe() - protect against malicious SQL injection attacks + proteger contra ataques maliciosos de inyección SQL sql() - connect to the database and execute a SQL query + conectarse a la base de datos y ejecutar una consulta SQL db_fetch_assoc() - same as PHP built-in mysqli_fetch_assoc() function + igual que la función mysqli_fetch_assoc() integrada de PHP */ include(__DIR__ . "/lib.php"); - /* receive calling parameters */ + /* recibir parámetros de llamada */ $table = $_REQUEST['table']; - $ids = $_REQUEST['ids']; /* this is an array of IDs */ + $ids = $_REQUEST['ids']; /* esto es una matriz de ID */ - /* a comma-separated list of IDs to use in the query */ + /* una lista de ID separada por comas para usar en la consulta */ $cs_ids = ''; foreach($ids as $id){ $cs_ids .= "'" . makeSafe($id) . "',"; } - $cs_ids = substr($cs_ids, 0, -1); /* remove last comma */ + $cs_ids = substr($cs_ids, 0, -1); /* eliminar la última coma */ - /* retrieve the records and display mail labels */ + /* recuperar los registros y mostrar las etiquetas de correo */ $eo = ['silentErrors' => true]; $res = sql("select * from customers " . "where CustomerID in ({$cs_ids})", $eo); @@ -169,16 +168,14 @@ Finally, let's write the server-side `mail-labels.php` script. Based on the code } ``` -Here is a sample of the output from the above script. +Aquí hay una muestra de la salida del script anterior. -![Sample mail labels](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/sample-output-from-mail-labels.png) +![Muestra de etiquetas de correo](https://cdn.bigprof.com/appgini-desktop/wp-content/uploads/sample-output-from-mail-labels.png) -We chose to implement the action handling using a javascript function to allow a lot of flexibility for customizations. In the above example, we prepared some parameters and opened a new page. You might instead wish to do something in the background by using an Ajax request without opening a new page. It's all up to you. - - Note: The above example used the Northwind project, which is the same one used for our [online demo](https://northwind.demos.appgini.com/). You can [download the Northwind project file, application files and the sample data](https://github.com/bigprof-software/northwind-demo/releases/latest) to experiment on your own. - -> **TIP!** -> -> Don't have the time or programming knowledge to write your own batch actions? We have a plugin for that now! Check our [Mass Update plugin](/appgini/applications/mass-update-plugin). This plugin allows you to add as many batch actions as you want in a very short time, without writing a single line of code. +Elegimos implementar el manejo de acciones usando una función javascript para permitir mucha flexibilidad para las personalizaciones. En el ejemplo anterior, preparamos algunos parámetros y abrimos una nueva página. En su lugar, es posible que desee hacer algo en segundo plano utilizando una solicitud Ajax sin abrir una nueva página. Todo depende de usted. +Nota: El ejemplo anterior utilizó el proyecto Northwind, que es el mismo que se utilizó para nuestra [demostración en línea](https://northwind.demos.appgini.com/). Puede [descargar el archivo del proyecto Northwind, los archivos de la aplicación y los datos de muestra](https://github.com/bigprof-software/northwind-demo/releases/latest) para experimentar por su cuenta. +> **¡CONSEJO!** +> +> ¿No tiene el tiempo o los conocimientos de programación para escribir sus propias acciones por lotes? ¡Ahora tenemos un complemento para eso! Consulte nuestro [complemento de Actualización masiva](/appgini/applications/mass-update-plugin). Este complemento le permite agregar tantas acciones por lotes como desee en muy poco tiempo, sin escribir una sola línea de código. diff --git a/pages/advanced-topics/hooks/table-specific-hooks.md b/pages/advanced-topics/hooks/table-specific-hooks.md index 1b7d725..19b4efb 100644 --- a/pages/advanced-topics/hooks/table-specific-hooks.md +++ b/pages/advanced-topics/hooks/table-specific-hooks.md @@ -1,20 +1,20 @@ --- -title: Table-specific hooks -linkTitle: Table-specific hooks +title: Hooks específicos de tabla +linkTitle: Hooks específicos de tabla slug: help/advanced-topics/hooks/table-specific-hooks -description: Table-specific hooks are functions that get called when a new record is added, when a record is edited, when a record is deleted, ... etc. These hooks are table-specific. That's why each table in your project has its own hook file. -keywords: table-specific hooks, hooks, table, insert, update, delete, record, edit, add, new, data, memberInfo, args, options, header, footer, init, before_insert, after_insert, before_update, after_update, before_delete, after_delete, dv, csv, batch_actions, multiple record batch actions +description: Los hooks específicos de tabla son funciones que se llaman cuando se agrega un nuevo registro, cuando se edita un registro, cuando se elimina un registro, etc. Estos hooks son específicos de tabla. Es por eso que cada tabla en su proyecto tiene su propio archivo hook. +keywords: hooks específicos de tabla, hooks, tabla, insertar, actualizar, eliminar, registro, editar, agregar, nuevo, datos, memberInfo, args, options, header, footer, init, before_insert, after_insert, before_update, after_update, before_delete, after_delete, dv, csv, batch_actions, acciones por lotes de múltiples registros --- -# Table-specific hooks +# Hooks específicos de tabla -For each table in your project, AppGini generates a hook file named the same as the table -name inside the `hooks` folder. This file contains hook functions that get called when -a new record is added, when a record is edited, when a record is -deleted, ... etc. These hooks are table-specific. That's why each -table in your project has its own hook file. +Para cada tabla de su proyecto, AppGini genera un archivo hook con el mismo nombre que el nombre de la tabla +dentro de la carpeta `hooks`. Este archivo contiene funciones hook que se llaman cuando +se agrega un nuevo registro, cuando se edita un registro, cuando se elimina un registro +, etc. Estos hooks son específicos de tabla. Es por eso que cada +tabla en su proyecto tiene su propio archivo hook. -*The following hook functions are defined in this file:* +*Las siguientes funciones de hook se definen en este archivo:* - [`tablename_before_insert()`](#tablename_before_insert) - [`tablename_after_insert()`](#tablename_after_insert) @@ -35,47 +35,47 @@ table in your project has its own hook file. ## `tablename_init()` -Called before rendering the page. This is a very powerful hook that -allows you to control all aspects of how the page is rendered. If you -open the generated `hooks/tablename.php` file in a text editor (where -tablename is the name of the concerned table), you can see this function -defined as follows: +Llamado antes de representar la página. Este es un hook muy poderoso que +le permite controlar todos los aspectos de cómo se representa la página. Si +abre el archivo `hooks/tablename.php` generado en un editor de texto (donde +tablename es el nombre de la tabla en cuestión), puede ver esta función +definida de la siguiente manera: ```php function tablename_init(&$options, $memberInfo, &$args) { return true; -} +} ``` -### Parameters +### Parámetros -- `$options` (passed by reference so that it can be modified - inside this hook function) a DataList object that sets options for - rendering the page. Please refer to - [DataList](/appgini/help/advanced-topics/hooks/DataList-object/) for more - details. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$options` (pasado por referencia para que pueda modificarse + dentro de esta función hook) un objeto DataList que establece opciones para + representar la página. Consulte + [DataList](/appgini/help/advanced-topics/hooks/DataList-object/) para obtener más + detalles. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -`true` to render the page. `false` to cancel the operation -(which could be useful for error handling to display an error message to -the user and stop displaying any data). +`true` para representar la página. `false` para cancelar la operación +(lo que podría ser útil para el manejo de errores para mostrar un mensaje de error al +usuario y dejar de mostrar cualquier dato). -### Example +### Ejemplo -The following example checks that the logged user belongs to the admin -group and accordingly allows CSV downloading of records. If the user is -not a member of the admin group, CSV downloads are disabled. +El siguiente ejemplo comprueba que el usuario conectado pertenece al grupo de administradores +y, en consecuencia, permite la descarga CSV de registros. Si el usuario no es +miembro del grupo de administradores, las descargas CSV están deshabilitadas. ```php function tablename_init(&$options, $memberInfo, &$args) { @@ -87,25 +87,24 @@ function tablename_init(&$options, $memberInfo, &$args) { } return true; -} +} ``` -> There is another example in the [Tips and tutorials -section](/appgini/tips-and-tutorials) that uses the `tablename_init` hook -to [modify part of the table view -query](/appgini/tips-and-tutorials/customize-tableview-data). Another -example uses the `tablename_init` hook to [apply a default filter to a -table](/appgini/tips-and-tutorials/apply-default-filter). +> Hay otro ejemplo en la sección [Consejos y tutoriales](/appgini/tips-and-tutorials) +que usa el hook `tablename_init` +para [modificar parte de la consulta de la vista de tabla](/appgini/tips-and-tutorials/customize-tableview-data). Otro +ejemplo usa el hook `tablename_init` para [aplicar un filtro predeterminado a una +tabla](/appgini/tips-and-tutorials/apply-default-filter). ## `tablename_header()` -Called before displaying page content. Can be used to return a -customized header template for the table. If you open the generated -`hooks/tablename.php` file in a text editor (where `tablename` is the name -of the concerned table), you can see this function defined as follows: +Llamado antes de mostrar el contenido de la página. Se puede usar para devolver una +plantilla de encabezado personalizada para la tabla. Si abre el archivo +`hooks/tablename.php` generado en un editor de texto (donde `tablename` es el nombre +de la tabla en cuestión), puede ver esta función definida de la siguiente manera: ```php function tablename_header($contentType, $memberInfo, &$args) { @@ -142,39 +141,38 @@ function tablename_header($contentType, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$contentType` specifies the type of view that will be - displayed. Takes one of the following values: `tableview`, +- `$contentType` especifica el tipo de vista que se + mostrará. Toma uno de los siguientes valores: `tableview`, `detailview`, `tableview+detailview`, `print-tableview`, - `print-detailview` or `filters`. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to + `print-detailview` o `filters`. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -String containing the HTML header code. If empty, the default -`header.php` is used. If you want to include the default header -besides your customized header, include the `<%%HEADER%%>` placeholder -in the returned string. Note: If you have a customized header-extras.php -file (see [the contents of the hooks -folder](/appgini/help/advanced-topics/hooks/folder-contents/) for more -info), it won't be included in the page if you don't include the -`<%%HEADER%%>` placeholder in the return string. +Cadena que contiene el código de encabezado HTML. Si está vacío, se usa el +`header.php` predeterminado. Si desea incluir el encabezado predeterminado +además de su encabezado personalizado, incluya el marcador de posición `<%%HEADER%%>` +en la cadena devuelta. Nota: Si tiene un archivo header-extras.php +personalizado (consulte [el contenido de la carpeta `hooks`](/appgini/help/advanced-topics/hooks/folder-contents/) para obtener más +información), no se incluirá en la página si no incluye el +marcador de posición `<%%HEADER%%>` en la cadena de devolución. -### Example +### Ejemplo -The following example displays today's date and current time above the -print-preview pages, so that the printed document shows this data. -Notice that the placeholder \<%%HEADER%%\> is included so that the -original header is still output to users. The modified code is at lines -18 and 22. +El siguiente ejemplo muestra la fecha de hoy y la hora actual sobre las +páginas de vista previa de impresión, para que el documento impreso muestre estos datos. +Observe que se incluye el marcador de posición `<%%HEADER%%>` para que el +encabezado original todavía se muestre a los usuarios. El código modificado está en las líneas +18 y 22. ```php function tablename_header($contentType, $memberInfo, &$args) { @@ -216,10 +214,10 @@ function tablename_header($contentType, $memberInfo, &$args) { ## `tablename_footer()` -Called after displaying page content. Can be used to return a customized -footer template for the table. If you open the generated -`hooks/tablename.php` file in a text editor (where tablename is the name -of the concerned table), you can see this function defined as follows: +Llamado después de mostrar el contenido de la página. Se puede usar para devolver una plantilla de pie de página +personalizada para la tabla. Si abre el archivo `hooks/tablename.php` generado +en un editor de texto (donde tablename es el nombre +de la tabla en cuestión), puede ver esta función definida de la siguiente manera: ```php function tablename_footer($contentType, $memberInfo, &$args) { @@ -256,44 +254,43 @@ function tablename_footer($contentType, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$contentType` specifies the type of view that will be - displayed. Takes one of the following values: `tableview`, +- `$contentType` especifica el tipo de vista que se + mostrará. Toma uno de los siguientes valores: `tableview`, `detailview`, `tableview+detailview`, `print-tableview`, - `print-detailview` or `filters`. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to + `print-detailview` o `filters`. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -String containing the HTML footer code. If empty, the default -`footer.php` is used. If you want to include the default footer -besides your customized footer, include the `<%%FOOTER%%>` placeholder -in the returned string. Note: If you have a customized footer-extras.php -file (see [the contents of the hooks -folder](/appgini/help/advanced-topics/hooks/folder-contents/) for more -info), it won't be included in the page if you don't include the -`<%%FOOTER%%>` placeholder in the return string. +Cadena que contiene el código de pie de página HTML. Si está vacío, se usa el +`footer.php` predeterminado. Si desea incluir el pie de página predeterminado +además de su pie de página personalizado, incluya el marcador de posición `<%%FOOTER%%>` +en la cadena devuelta. Nota: Si tiene un archivo footer-extras.php +personalizado (consulte [el contenido de la carpeta `hooks`](/appgini/help/advanced-topics/hooks/folder-contents/) para obtener más +información), no se incluirá en la página si no incluye el +marcador de posición `<%%FOOTER%%>` en la cadena de devolución. -### Example +### Ejemplo -Please refer to the above example for tablename_header. +Consulte el ejemplo anterior para tablename_header. ## `tablename_before_insert()` -Called before executing the insert query. If you open the generated -`hooks/tablename.php` file in a text editor (where tablename is the name -of the concerned table), you can see this function defined as follows: +Llamado antes de ejecutar la consulta de inserción. Si abre el archivo +`hooks/tablename.php` generado en un editor de texto (donde tablename es el nombre +de la tabla en cuestión), puede ver esta función definida de la siguiente manera: ```php function tablename_before_insert(&$data, $memberInfo, &$args) { @@ -303,38 +300,38 @@ function tablename_before_insert(&$data, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$data` An associative array where the keys are field names - and the values are the field data values to be inserted into the new - record. This array is passed by reference so that modifications to - it apply to the insert query. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$data` Una matriz asociativa donde las claves son nombres de campo + y los valores son los valores de datos de campo que se insertarán en el nuevo + registro. Esta matriz se pasa por referencia para que las modificaciones en ella se apliquen + a la consulta de inserción. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` was not in use prior to AppGini 5.90. As of AppGini - 5.90, it's used for exchanging further data as follows: - - `$args['error_message']` can be set inside the hook - function to display an error message to user in case of - returning `false` . + para obtener más detalles. +- `$args` no se usaba antes de AppGini 5.90. A partir de AppGini + 5.90, se usa para intercambiar más datos de la siguiente manera: + - `$args['error_message']` se puede establecer dentro del hook + función para mostrar un mensaje de error al usuario en caso de + devolver `false`. -### Return value +### Valor devuelto -A boolean `true` to perform the insert operation, or `false` -to cancel it. +Un booleano `true` para realizar la operación de inserción, o `false` +para cancelarla. -*As of AppGini 5.90* , if returning `false` , an error message -string (no HTML tags allowed) can be displayed to users by passing it -through `$args['error_message']` . +*A partir de AppGini 5.90*, si devuelve `false`, se puede mostrar un mensaje de error +en cadena (no se permiten etiquetas HTML) a los usuarios pasándolo +a través de `$args['error_message']`. -### Example 1 +### Ejemplo 1 -In this example, let's assume that our table contains the fields: -unit_price, quantity and total. We want to automatically calculate the -value of the total field by multiplying quantity and unit_price. +En este ejemplo, supongamos que nuestra tabla contiene los campos: +precio_unitario, cantidad y total. Queremos calcular automáticamente el +valor del campo total multiplicando cantidad y precio_unitario. ```php function tablename_before_insert(&$data, $memberInfo, &$args) { @@ -345,20 +342,20 @@ function tablename_before_insert(&$data, $memberInfo, &$args) { } ``` -**See also:** [Using lookup fields in calculations](/appgini/help/advanced-topics/hooks/using-lookup-fields-in-calculations/). +**Ver también:** [Uso de campos de búsqueda en cálculos](/appgini/help/advanced-topics/hooks/using-lookup-fields-in-calculations/). -### Example 2 (AppGini 5.90+) +### Ejemplo 2 (AppGini 5.90+) -In this example, let's assume that we have a `job_orders` table, -and we want to make sure the `duration` field value must be higher -than 3. If not, we'll reject the record with an error message. +En este ejemplo, supongamos que tenemos una tabla `job_orders`, +y queremos asegurarnos de que el valor del campo `duration` debe ser mayor +que 3. Si no, rechazaremos el registro con un mensaje de error. ```php function job_orders_before_insert(&$data, $memberInfo, &$args) { if($data['duration'] <= 3) { - $args['error_message'] = 'Error: Duration must be higher than 3.'; + $args['error_message'] = 'Error: La duración debe ser mayor que 3.'; return false; } @@ -372,10 +369,10 @@ function job_orders_before_insert(&$data, $memberInfo, &$args) { ## `tablename_after_insert()` -Called after executing the insert query (but before executing the -ownership insert query). If you open the generated `hooks/tablename.php` -file in a text editor (where tablename is the name of the concerned -table), you can see this function defined as follows: +Llamado después de ejecutar la consulta de inserción (pero antes de ejecutar la +consulta de inserción de propiedad). Si abre el archivo `hooks/tablename.php` generado +en un editor de texto (donde tablename es el nombre de la tabla en cuestión +), puede ver esta función definida de la siguiente manera: ```php function tablename_after_insert($data, $memberInfo, &$args) { @@ -385,85 +382,84 @@ function tablename_after_insert($data, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$data` is an associative array where the keys are field - names and the values are the field data values that were inserted - into the new record. It also includes the item - `$data['selectedID']` which stores the value of the primary key - for the new record. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$data` es una matriz asociativa donde las claves son nombres de campo + y los valores son los valores de datos de campo que se insertaron + en el nuevo registro. También incluye el elemento + `$data['selectedID']` que almacena el valor de la clave principal + para el nuevo registro. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -A boolean `true` to perform the ownership insert operation or -`false` to cancel it. Warning: if a `false` is returned, the -new record will have no ownership info. +Un booleano `true` para realizar la operación de inserción de propiedad o +`false` para cancelarla. Advertencia: si se devuelve `false`, el +nuevo registro no tendrá información de propiedad. -### Example 1 +### Ejemplo 1 -The following example sends a notification email to an employee when a -user submits a new record. The email contains the record data. +El siguiente ejemplo envía un correo electrónico de notificación a un empleado cuando un +usuario envía un nuevo registro. El correo electrónico contiene los datos del registro. ```php function tablename_after_insert($data, $memberInfo, &$args) { - // to compose a message containing the submitted data, - // we need to iterate through the $data array + // para componer un mensaje que contenga los datos enviados, + // necesitamos iterar a través de la matriz $data foreach($data as $field => $value) { $messageData .= "$field: $value \n"; } sendmail([ 'to' => 'employee@company.com', - 'name' => 'Recipient Name', - 'subject' => 'A new record needs your attention', - 'message' => "The following new record was submitted by {$memberInfo['username']}: \n\n" . $messageData + 'name' => 'Nombre del destinatario', + 'subject' => 'Un nuevo registro necesita su atención', + 'message' => "El siguiente nuevo registro fue enviado por {$memberInfo['username']}: \n\n" . $messageData ]); return true; } ``` -### Example 2 +### Ejemplo 2 -The following example works with apps created by AppGini 23.17 or above. -It uses the [`WindowMessages` -class](https://bigprof.com/appgini/help/advanced-topics/hooks/WindowMessages-class) -to display a custom message to the user after a record is inserted. In -this example, we're displaying a sample instruction for the user to -follow after he's added a new record to the orders table reminding him -to add order items. +El siguiente ejemplo funciona con aplicaciones creadas por AppGini 23.17 o superior. +Utiliza la clase [`WindowMessages`](https://bigprof.com/appgini/help/advanced-topics/hooks/WindowMessages-class) +para mostrar un mensaje personalizado al usuario después de insertar un registro. En +este ejemplo, mostramos una instrucción de muestra para que el usuario la +siga después de haber agregado un nuevo registro a la tabla de pedidos recordándole +que agregue artículos de pedido. ```php function orders_after_insert($data, $memberInfo, &$args) { - WindowMessages::add('Next step: Add order items for this order!'); + WindowMessages::add('Siguiente paso: ¡Agregue artículos de pedido para este pedido!'); return true; } ``` -Here is a video showing how the above example works: +Aquí hay un video que muestra cómo funciona el ejemplo anterior: <video width="100%" controls> <source src="https://cdn.bigprof.com/screencasts/show-message-after-insert.mp4" type="video/mp4"> - Your browser does not support the video tag. + Su navegador no es compatible con la etiqueta de video. </video> ## `tablename_before_update()` -Called before executing the update query. If you open the generated -`hooks/tablename.php` file in a text editor (where tablename is the name -of the concerned table), you can see this function defined as follows: +Llamado antes de ejecutar la consulta de actualización. Si abre el archivo +`hooks/tablename.php` generado en un editor de texto (donde tablename es el nombre +de la tabla en cuestión), puede ver esta función definida de la siguiente manera: ```php function tablename_before_update(&$data, $memberInfo, &$args) { @@ -473,56 +469,55 @@ function tablename_before_update(&$data, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$data` An associative array where the keys are field names - and the values are the new data values to update the field with. - This array is passed by reference so that modifications to it apply - to the update query. This array includes the item - `$data['selectedID']` which stores the value of the primary key - for the record to be updated. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$data` Una matriz asociativa donde las claves son nombres de campo + y los valores son los nuevos valores de datos con los que actualizar el campo. + Esta matriz se pasa por referencia para que las modificaciones en ella se apliquen + a la consulta de actualización. Esta matriz incluye el elemento + `$data['selectedID']` que almacena el valor de la clave principal + para el registro que se va a actualizar. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` was not in use prior to AppGini 5.90. As of AppGini - 5.90, it's used for exchanging further data as follows: - - `$args['error_message']` can be set inside the hook - function to display an error message to user in case of - returning `false` . - - `$args['old_data']` is an associative array - containing existing record values. This is useful for comparing - the new values passed through the `$data` parameter - to the stored values in the record before the actual update - operation is performed. + para obtener más detalles. +- `$args` no se usaba antes de AppGini 5.90. A partir de AppGini + 5.90, se usa para intercambiar más datos de la siguiente manera: + - `$args['error_message']` se puede establecer dentro del hook + función para mostrar un mensaje de error al usuario en caso de + devolver `false`. + - `$args['old_data']` es una matriz asociativa + que contiene los valores de registro existentes. Esto es útil para comparar + los nuevos valores pasados a través del parámetro `$data` + con los valores almacenados en el registro antes de que se realice la operación de actualización + real. -### Return value +### Valor devuelto -`true` to perform the update operation or `false` to cancel -it. +`true` para realizar la operación de actualización o `false` para cancelarla. -*As of AppGini 5.90* , if returning `false` , an error message -string (no HTML tags allowed) can be displayed to users by passing it -through `$args['error_message']` (See example 2 for -[tablename_before_insert](#tablename_before_insert) ). +*A partir de AppGini 5.90*, si devuelve `false`, se puede mostrar un mensaje de error +en cadena (no se permiten etiquetas HTML) a los usuarios pasándolo +a través de `$args['error_message']` (Consulte el ejemplo 2 para +[tablename_before_insert](#tablename_before_insert)). -### Example +### Ejemplo -Let's say we have an orders table. When a user makes changes to a -record and saves them, we want to automatically calculate the value of -the *total* field using the fields *subtotal* , *discount* and -*sales_tax* , where discount and sales_tax are stored as percentages -(i.e. a discount value of 10 means 10% of subtotal): +Supongamos que tenemos una tabla de pedidos. Cuando un usuario realiza cambios en un +registro y los guarda, queremos calcular automáticamente el valor del +campo *total* usando los campos *subtotal*, *descuento* y +*impuesto_ventas*, donde el descuento y el impuesto_ventas se almacenan como porcentajes +(es decir, un valor de descuento de 10 significa 10% del subtotal): ```php function tablename_before_update(&$data, $memberInfo, &$args) { - // calculate total after applying discount + // calcular el total después de aplicar el descuento $data['total'] = $data['subtotal'] * (1 - $data['discount'] / 100); - // calculate total after applying sales tax + // calcular el total después de aplicar el impuesto sobre las ventas $data['total'] = $data['total'] * (1 + $data['sales_tax'] / 100); return true; @@ -531,37 +526,37 @@ function tablename_before_update(&$data, $memberInfo, &$args) { -### Another example +### Otro ejemplo -Let's say that we want to prevent updates to any records in a -particular table that are older than 30 days. To do so, we would -customize the *tablename* _before_update() hooks like this: +Supongamos que queremos evitar actualizaciones a cualquier registro en una +tabla en particular que tenga más de 30 días. Para hacerlo, +personalizaríamos los hooks *tablename* _before_update() de esta manera: ```php function tablename_before_update(&$data, $memberInfo, &$args) { - // get the creation date of the record + // obtener la fecha de creación del registro $creationDate=sqlValue("select dateAdded from membership_userrecords where tableName='tablename' and pkValue='{$data['selectedID']}'"); - // if the record is older than 30 days, deny changes + // si el registro tiene más de 30 días, denegar los cambios if($creationDate < strtotime('30 days ago')) return false; return true; } ``` -*Don't forget to replace `tablename` at line 5 above, with the actual -name of your table.* +*No olvide reemplazar `tablename` en la línea 5 anterior, con el nombre real +de su tabla.* ## `tablename_after_update()` -Called after executing the update query and before executing the -ownership update query. If you open the generated `hooks/tablename.php` -file in a text editor (where tablename is the name of the concerned -table), you can see this function defined as follows: +Llamado después de ejecutar la consulta de actualización y antes de ejecutar la +consulta de actualización de propiedad. Si abre el archivo `hooks/tablename.php` generado +en un editor de texto (donde tablename es el nombre de la tabla en cuestión +), puede ver esta función definida de la siguiente manera: ```php function tablename_after_update($data, $memberInfo, &$args) { @@ -571,46 +566,46 @@ function tablename_after_update($data, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$data` is an associative array where the keys are field - names and the values are the field data values that were inserted - into the new record. It also includes the item - `$data['selectedID']` which stores the value of the primary key - for the new record. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$data` es una matriz asociativa donde las claves son nombres de campo + y los valores son los valores de datos de campo que se insertaron + en el nuevo registro. También incluye el elemento + `$data['selectedID']` que almacena el valor de la clave principal + para el nuevo registro. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` was not in use prior to AppGini 5.90. As of AppGini - 5.90, it's used for exchanging further data as follows: - - `$args['old_data']` is an associative array - containing old record values that existed before the update - operation. This is useful for comparing the new values passed - through the `$data` parameter to the old values of - the record that existed before the update operation. You could - use this for example for auditing purposes. + para obtener más detalles. +- `$args` no se usaba antes de AppGini 5.90. A partir de AppGini + 5.90, se usa para intercambiar más datos de la siguiente manera: + - `$args['old_data']` es una matriz asociativa + que contiene los valores de registro antiguos que existían antes de la operación de actualización + . Esto es útil para comparar los nuevos valores pasados + a través del parámetro `$data` con los valores antiguos del + registro que existían antes de la operación de actualización. Podría + usar esto, por ejemplo, para fines de auditoría. -### Return value +### Valor devuelto -`true` to perform the ownership update operation or `false` to -cancel it. +`true` para realizar la operación de actualización de propiedad o `false` para +cancelarla. -### Example +### Ejemplo -Please refer to the example for `tablename_after_insert` hook above. +Consulte el ejemplo para el hook `tablename_after_insert` anterior. ## `tablename_before_delete()` -Called before deleting a record (and before performing child records -check). If you open the generated `hooks/tablename.php` file in a text -editor (where tablename is the name of the concerned table), you can see -this function defined as follows: +Llamado antes de eliminar un registro (y antes de realizar la verificación de registros +secundarios). Si abre el archivo `hooks/tablename.php` generado en un editor de texto +(donde tablename es el nombre de la tabla en cuestión), puede ver +esta función definida de la siguiente manera: ```php function tablename_before_delete($selectedID, &$skipChecks, $memberInfo, &$args) { @@ -620,47 +615,46 @@ function tablename_before_delete($selectedID, &$skipChecks, $memberInfo, &$args) ``` -### Parameters +### Parámetros -- `$selectedID` is the primary key value of the record to be - deleted. -- `$skipChecks` is a flag passed by reference that determines - whether child records check should be performed or not. If you set - \$skipChecks to `true` inside this hook function, no child - records check will be made. If you set it to `false` , the - check will be performed. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$selectedID` es el valor de la clave principal del registro que se va a + eliminar. +- `$skipChecks` es una bandera pasada por referencia que determina + si se debe realizar o no la verificación de registros secundarios. Si establece + `$skipChecks` en `true` dentro de esta función hook, no se realizará ninguna verificación de + registros secundarios. Si lo establece en `false`, se realizará + la verificación. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -`true` to perform the delete operation or `false` to cancel -it. +`true` para realizar la operación de eliminación o `false` para cancelarla. -### Example +### Ejemplo -In this example, we'll assume that our table contains a checkbox field -named *approved* . We want to allow deleting of the record only if that -field is not checked (set to 0). If the field is checked (set to 1), it -won't be deleted unless the user is a member of the Admins group. +En este ejemplo, asumiremos que nuestra tabla contiene un campo de casilla de verificación +llamado *aprobado*. Queremos permitir la eliminación del registro solo si ese +campo no está marcado (establecido en 0). Si el campo está marcado (establecido en 1), +no se eliminará a menos que el usuario sea miembro del grupo Administradores. ```php function tablename_before_delete($selectedID, &$skipChecks, $memberInfo, &$args) { - // We'll perform the 'approved' check only if the user - // is not a member of the 'Admins' group. + // Realizaremos la verificación 'aprobado' solo si el usuario + // no es miembro del grupo 'Administradores'. if($memberInfo['group']!='Admins') { $id=makeSafe($SelectedID); $approved=sqlValue("select `approved` from `tablename` where `id`='$id'"); - // if the record is approved, don't allow deleting it + // si el registro está aprobado, no permitir su eliminación if($approved) return false; } @@ -668,12 +662,12 @@ function tablename_before_delete($selectedID, &$skipChecks, $memberInfo, &$args) } ``` -We assumed in the above example that the primary key field of the table -is named *id*. Also, notice in line 7 the use of the `makeSafe()` -function, which prepares variables to be used safely inside SQL queries. -In line 8, we used the `sqlValue()` function which performs a SQL query -that we know returns a single value. It's a shortcut function that -saves us the effort of processing a MySQL result set. +Asumimos en el ejemplo anterior que el campo de clave principal de la tabla +se llama *id*. Además, observe en la línea 7 el uso de la función `makeSafe()`, +que prepara las variables para que se usen de forma segura dentro de las consultas SQL. +En la línea 8, usamos la función `sqlValue()` que realiza una consulta SQL +que sabemos que devuelve un solo valor. Es una función de acceso directo que +nos ahorra el esfuerzo de procesar un conjunto de resultados de MySQL. @@ -681,9 +675,9 @@ saves us the effort of processing a MySQL result set. ## `tablename_after_delete()` -Called after deleting a record. If you open the generated -`hooks/tablename.php` file in a text editor (where tablename is the name -of the concerned table), you can see this function defined as follows: +Llamado después de eliminar un registro. Si abre el archivo `hooks/tablename.php` generado +en un editor de texto (donde tablename es el nombre de la tabla en cuestión), +puede ver esta función definida de la siguiente manera: ```php function tablename_after_delete($selectedID, $memberInfo, &$args) { @@ -692,37 +686,36 @@ function tablename_after_delete($selectedID, $memberInfo, &$args) { ``` -### Parameters +### Parámetros -- `$selectedID` is the primary key value of the deleted - record. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$selectedID` es el valor de la clave principal del registro + eliminado. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -None. +Ninguno. -### Example +### Ejemplo -This example logs the date and time a record was deleted and who deleted -it. +Este ejemplo registra la fecha y hora en que se eliminó un registro y quién lo eliminó. ```php function tablename_after_delete($selectedID, $memberInfo, &$args) { - // log file + // archivo de registro $logFile='deletes.log'; - // attempt to open the log file for appending + // intentar abrir el archivo de registro para agregar if(!$fp = @fopen($logFile, 'a')) return; - // write log data: date/time, username, IP, record ID + // escribir datos de registro: fecha/hora, nombre de usuario, IP, ID de registro $datetime=date('r'); fwrite($fp, "$datetime,{$memberInfo['username']},{$memberInfo['IP']},$selectedID\n"); fclose($fp); @@ -735,10 +728,10 @@ function tablename_after_delete($selectedID, $memberInfo, &$args) { ## `tablename_dv()` -Called when a user requests to view the detail view (before displaying -the detail view). If you open the generated `hooks/tablename.php` file -in a text editor (where tablename is the name of the concerned table), -you can see this function defined as follows: +Llamado cuando un usuario solicita ver la vista detallada (antes de mostrar +la vista detallada). Si abre el archivo `hooks/tablename.php` generado +en un editor de texto (donde tablename es el nombre de la tabla en cuestión), +puede ver esta función definida de la siguiente manera: ```php function tablename_dv($selectedID, $memberInfo, &$html, &$args) { @@ -747,41 +740,40 @@ function tablename_dv($selectedID, $memberInfo, &$html, &$args) { ``` -### Parameters +### Parámetros -- `$selectedID` The primary key value of the record selected. - It's set to `false` if no record is selected (i.e. the - detail view will be displayed to enter a new record). -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$selectedID` El valor de la clave principal del registro seleccionado. + Se establece en `false` si no se selecciona ningún registro (es decir, la + vista detallada se mostrará para ingresar un nuevo registro). +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$html` (passed by reference so that it can be modified - inside this hook function) the HTML code of the form ready to be - displayed. This could be useful for manipulating the code before - displaying it using regular expressions, \... etc. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$html` (pasado por referencia para que pueda modificarse + dentro de esta función hook) el código HTML del formulario listo para ser + mostrado. Esto podría ser útil para manipular el código antes de + mostrarlo usando expresiones regulares, etc. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -None. +Ninguno. -### Example +### Ejemplo -The following example sets the price field as read-only for non-admin -users. The example demonstrates how to \"inject\" JavaScript code to the -detail view to change its behavior. Please note that setting a field as -read-only via JavaScript is not sufficient to prevent modifying it. -Power users can easily circumvent this. So, you have to also force this -server-side, for example using the [before_update -hook](#tablename_before_update) . +El siguiente ejemplo establece el campo de precio como de solo lectura para usuarios que no son administradores. +El ejemplo demuestra cómo "inyectar" código JavaScript en la +vista detallada para cambiar su comportamiento. Tenga en cuenta que establecer un campo como +de solo lectura a través de JavaScript no es suficiente para evitar su modificación. +Los usuarios avanzados pueden eludir esto fácilmente. Por lo tanto, también debe forzar esto +del lado del servidor, por ejemplo, usando el hook [before_update](#tablename_before_update). ```php function tablename_dv($selectedID, $memberInfo, &$html, &$args) { - /* current user is not an admin? */ + /* ¿el usuario actual no es un administrador? */ if($mi['group'] != 'Admins') { ob_start(); ?> @@ -802,10 +794,10 @@ function tablename_dv($selectedID, $memberInfo, &$html, &$args) { ## `tablename_csv()` -Called when a user requests to download table data as a CSV file (by -clicking the SAVE CSV button). If you open the generated -`hooks/tablename.php` file in a text editor (where tablename is the name -of the concerned table), you can see this function defined as follows: +Llamado cuando un usuario solicita descargar datos de la tabla como un archivo CSV (haciendo +clic en el botón GUARDAR CSV). Si abre el archivo `hooks/tablename.php` generado +en un editor de texto (donde tablename es el nombre de la tabla en cuestión), +puede ver esta función definida de la siguiente manera: ```php function tablename_csv($query, $memberInfo, $args) { @@ -815,34 +807,34 @@ function tablename_csv($query, $memberInfo, $args) { ``` -### Parameters +### Parámetros -- `$query` contains the query that will be executed to return - the data in the CSV file. -- `$memberInfo` is an array containing details of the member - who signed in. Please refer to +- `$query` contiene la consulta que se ejecutará para devolver + los datos en el archivo CSV. +- `$memberInfo` es una matriz que contiene detalles del miembro + que inició sesión. Consulte [memberInfo](/appgini/help/advanced-topics/hooks/memberInfo-array/) - for more details. -- `$args` is currently not used but is reserved for future - uses. + para obtener más detalles. +- `$args` actualmente no se usa pero está reservado para usos + futuros. -### Return value +### Valor devuelto -A string containing the query to use for fetching the CSV data. If -`false` or empty is returned, the default query is used. +Una cadena que contiene la consulta que se usará para obtener los datos CSV. Si +se devuelve `false` o vacío, se usa la consulta predeterminada. -### Example +### Ejemplo -The following example modifies the SQL query used to limit records -retrieved to 10 records only if the user requesting the CSV file is not -an admin. +El siguiente ejemplo modifica la consulta SQL utilizada para limitar los registros +recuperados a solo 10 registros si el usuario que solicita el archivo CSV no es +un administrador. ```php function tablename_csv($query, $memberInfo, $args) { - // return only the first 10 records for non-admin users. + // devolver solo los primeros 10 registros para usuarios que no son administradores. if($memberInfo['group']!='Admins') { $query.=" limit 10"; } @@ -850,6 +842,3 @@ function tablename_csv($query, $memberInfo, $args) { return $query; } ``` - - - diff --git a/pages/advanced-topics/hooks/using-lookup-fields-in-calculations.md b/pages/advanced-topics/hooks/using-lookup-fields-in-calculations.md index b62fd9e..4a15947 100644 --- a/pages/advanced-topics/hooks/using-lookup-fields-in-calculations.md +++ b/pages/advanced-topics/hooks/using-lookup-fields-in-calculations.md @@ -1,176 +1,171 @@ --- -title: Using lookup fields in calculations -linkTitle: Using lookup fields in calculations +title: Uso de campos de búsqueda en cálculos +linkTitle: Uso de campos de búsqueda en cálculos slug: help/advanced-topics/hooks/using-lookup-fields-in-calculations --- -# Using lookup fields in calculations - -When customizing the [`before_insert`, `after_insert`, `before_update` or -`after_update` -hooks](/appgini/help/advanced-topics/hooks/table-specific-hooks/) to make -a calculation, you might encounter a case where one or more fields in -the formula you're calculating is a [lookup field (foreign -key)](/appgini/help/working-with-projects/understanding-lookup-fields/) . -In this case, the value of `$data['fieldname']` (where `fieldname` -is the name of the concerned lookup field) is probably NOT the value -you'd like to use for your calculation. - -To explain that, let's have a brief look at how lookup fields work. A -lookup field is a way of referencing a value from one table in another -table. For example, we might be storing product unit price in the -`products` table and want to use that same unit price in the -`order_items` table without having to manually re-type the price ... -this is important not just to save a few keystrokes during data entry, -but to also ensure referential integrity ... If you throw the same -product price into every table in your database, it will be a nightmare -to update the price later and make sure all tables see the updated -price. - -To avoid that mess, we use lookup fields. A unit price lookup field in -the `order_items` table doesn't store the actual price value but -rather a reference value that points to the location of the unit price -in the `products` table. The best possible reference to use is the -primary key of the product. Let's have an example with numbers to see -this in action. - -### Products table - - | ID | Product | Unit price | - | ---- | ----------------------------- | ------------ | - | 15 | Lindt HELLO Crunchy Nougat | 2.05 | - | 16 | Lindt CREATION Crème Brûlée | 2.35 | - | 18 | Lindt EXCELLENCE Mint | 3.25 | - | 19 | Lindt CREATION Pistachio | 3.25 | - -That was yummy! Each entry in the above table has a primary key `ID` -value, which doesn't tell much about the item itself but is used as a -reference to it. So, if we talk about product #18, we know we are -referring to *Lindt EXCELLENCE Mint* priced at $3.25. Primary key -fields are usually (but not necessarily) named `ID`. - -Let's now have a look at some data from the `order_items` table. - -### Order Items table - - | ID | Order ID | Product | Unit price | Quantity | Subtotal | - | ---- | -------- | ------- | ---------- | -------- | -------- | - | 2024 | 305 | 15 | 15 | 1 | | - | 2025 | 305 | 18 | 18 | 3 | | - | 2026 | 306 | 18 | 18 | 1 | | - | 2027 | 307 | 19 | 19 | 2 | | - -Similar to the `products` table, the `ID` column above is the -primary key field of the `order_items` table, a way of uniquely -identifying each row. `OrderID` is a lookup field to the orders table -(not shown here as it's irrelevant to our discussion). `Product` and -'Unit Price' are both lookup fields to the products table. To -understand this with an example, order item #2024 is an order for -product #15, which is *Lindt HELLO Crunchy Nougat* and its price is of -course that of product #15 which is $2.05. And the quantity of *Lindt -HELLO Crunchy Nougat* ordered in this record is 1. - -When your AppGini application displays the `order_items` table, it -doesn't display reference values like the above. It automatically -*joins* both tables and displays more human-readable results like the -ones below - -### Order Items table joined with Products table - - | ID | Order ID | Product | Unit price | Quantity | Subtotal | - | ---- | -------- | ---------------------------- | ------------ | -------- | -------- | - | 2024 | 305 | Lindt HELLO Crunchy Nougat | 2.05 | 1 | | - | 2025 | 305 | Lindt EXCELLENCE Mint | 3.25 | 3 | | - | 2026 | 306 | Lindt EXCELLENCE Mint | 3.25 | 1 | | - | 2027 | 307 | Lindt CREATION Pistachio | 3.25 | 2 | | - -If we later make any modifications to any product in the `products` -table, like changing its name or unit price, the changes are -automatically reflected in the `order_items` table without having to -perform any manual data entry. - -What remains now is to write code for calculating the subtotal column of -the `order_items` table. We want this calculation to be applied -whenever we add a new order item and also whenever we make changes to -any existing order item. Therefore, we should perform the calculation in -both the before_insert and before_update hook functions. - -The initial code I see many AppGini users write usually looks something -like this: +# Uso de campos de búsqueda en cálculos + +Al personalizar los hooks [`before_insert`, `after_insert`, `before_update` o +`after_update`](/appgini/help/advanced-topics/hooks/table-specific-hooks/) para realizar +un cálculo, es posible que se encuentre con un caso en el que uno o más campos de +la fórmula que está calculando sea un [campo de búsqueda (clave externa)](/appgini/help/working-with-projects/understanding-lookup-fields/). +En este caso, el valor de `$data['nombrecampo']` (donde `nombrecampo` +es el nombre del campo de búsqueda en cuestión) probablemente NO sea el valor +que le gustaría usar para su cálculo. + +Para explicar esto, echemos un vistazo breve a cómo funcionan los campos de búsqueda. Un +campo de búsqueda es una forma de hacer referencia a un valor de una tabla en otra +tabla. Por ejemplo, podríamos estar almacenando el precio unitario del producto en la +tabla `productos` y querer usar ese mismo precio unitario en la +tabla `items_pedido` sin tener que volver a escribir manualmente el precio... +esto es importante no solo para ahorrar algunas pulsaciones de teclas durante la entrada de datos, +sino también para garantizar la integridad referencial... Si introduce el mismo +precio del producto en todas las tablas de su base de datos, será una pesadilla +actualizar el precio más tarde y asegurarse de que todas las tablas vean el precio actualizado. + +Para evitar ese desorden, usamos campos de búsqueda. Un campo de búsqueda de precio unitario en +la tabla `items_pedido` no almacena el valor real del precio, sino +un valor de referencia que apunta a la ubicación del precio unitario +en la tabla `productos`. La mejor referencia posible a utilizar es la +clave principal del producto. Veamos un ejemplo con números para ver +esto en acción. + +### Tabla de productos + + | ID | Producto | Precio unitario | + | ---- | ----------------------------- | --------------- | + | 15 | Lindt HELLO Crunchy Nougat | 2.05 | + | 16 | Lindt CREATION Crème Brûlée | 2.35 | + | 18 | Lindt EXCELLENCE Menta | 3.25 | + | 19 | Lindt CREATION Pistacho | 3.25 | + +¡Eso estuvo delicioso! Cada entrada en la tabla anterior tiene un valor de clave principal `ID`, +que no dice mucho sobre el artículo en sí, pero se usa como +referencia a él. Entonces, si hablamos del producto n.º 18, sabemos que nos estamos +refiriendo a *Lindt EXCELLENCE Menta* con un precio de 3,25 $. Los campos de clave principal +generalmente (pero no necesariamente) se denominan `ID`. + +Echemos ahora un vistazo a algunos datos de la tabla `items_pedido`. + +### Tabla de artículos de pedido + + | ID | ID de pedido | Producto | Precio unitario | Cantidad | Subtotal | + | ---- | ----------- | -------- | --------------- | -------- | -------- | + | 2024 | 305 | 15 | 15 | 1 | | + | 2025 | 305 | 18 | 18 | 3 | | + | 2026 | 306 | 18 | 18 | 1 | | + | 2027 | 307 | 19 | 19 | 2 | | + +Al igual que en la tabla `productos`, la columna `ID` anterior es el +campo de clave principal de la tabla `items_pedido`, una forma de identificar +de forma única cada fila. `IDPedido` es un campo de búsqueda de la tabla de pedidos +(no se muestra aquí ya que es irrelevante para nuestra discusión). `Producto` y +'Precio unitario' son ambos campos de búsqueda de la tabla de productos. Para +entender esto con un ejemplo, el artículo de pedido n.º 2024 es un pedido del +producto n.º 15, que es *Lindt HELLO Crunchy Nougat* y su precio es, +por supuesto, el del producto n.º 15, que es 2,05 $. Y la cantidad de *Lindt +HELLO Crunchy Nougat* pedida en este registro es 1. + +Cuando su aplicación AppGini muestra la tabla `items_pedido`, no +muestra valores de referencia como los anteriores. Automáticamente +*une* ambas tablas y muestra resultados más legibles para humanos como los +siguientes + +### Tabla de artículos de pedido unida con la tabla de productos + + | ID | ID de pedido | Producto | Precio unitario | Cantidad | Subtotal | + | ---- | ----------- | ---------------------------- | --------------- | -------- | -------- | + | 2024 | 305 | Lindt HELLO Crunchy Nougat | 2.05 | 1 | | + | 2025 | 305 | Lindt EXCELLENCE Menta | 3.25 | 3 | | + | 2026 | 306 | Lindt EXCELLENCE Menta | 3.25 | 1 | | + | 2027 | 307 | Lindt CREATION Pistacho | 3.25 | 2 | | + +Si más tarde realizamos alguna modificación en cualquier producto de la tabla `productos`, +como cambiar su nombre o precio unitario, los cambios se +reflejan automáticamente en la tabla `items_pedido` sin tener que +realizar ninguna entrada manual de datos. + +Lo que queda ahora es escribir el código para calcular la columna de subtotal de +la tabla `items_pedido`. Queremos que este cálculo se aplique +cada vez que agreguemos un nuevo artículo de pedido y también cada vez que realicemos cambios en +cualquier artículo de pedido existente. Por lo tanto, debemos realizar el cálculo en +las funciones hook before_insert y before_update. + +El código inicial que veo que muchos usuarios de AppGini escriben generalmente se parece a +esto: ```php -$data['Subtotal'] = $data['UnitPrice'] * $data['Quantity']; +$data['Subtotal'] = $data['PrecioUnitario'] * $data['Cantidad']; ``` -The problem with the above code is that `$data['UnitPrice']` -stores the primary key of the parent product (the value of the `ID` -field from the parent record in `products`). For example, if we're -calculating the subtotal of order item #2025, the above code would -display a subtotal of 18 x 3 = $54. This is of course not correct, as -the unit price for *Lindt EXCELLENCE Mint* is $3.25 and we have a -quantity of 3 units. Therefore, the correct subtotal should be $3.25 x -3 = $9.75. - -What's wrong with the above code is that we didn't take into -consideration the fact that `UnitPrice` field in `order_items` is -actually a lookup field. The stored value is not the unit price but -rather the primary key value of the parent product. Accordingly, we -should retrieve the actual unit price from the products table using this -code: +El problema con el código anterior es que `$data['PrecioUnitario']` +almacena la clave principal del producto principal (el valor del campo `ID` +del registro principal en `productos`). Por ejemplo, si estamos +calculando el subtotal del artículo de pedido n.º 2025, el código anterior mostraría +un subtotal de 18 x 3 = 54 $. Esto, por supuesto, no es correcto, ya que +el precio unitario de *Lindt EXCELLENCE Menta* es 3,25 $ y tenemos una +cantidad de 3 unidades. Por lo tanto, el subtotal correcto debería ser 3,25 $ x +3 = 9,75 $. + +Lo que está mal con el código anterior es que no tuvimos en +cuenta el hecho de que el campo `PrecioUnitario` en `items_pedido` es +en realidad un campo de búsqueda. El valor almacenado no es el precio unitario, sino +el valor de la clave principal del producto principal. En consecuencia, deberíamos +recuperar el precio unitario real de la tabla de productos usando este +código: ```php -$UnitPrice = sqlValue( - "SELECT UnitPrice FROM products where ID='{$data['UnitPrice']}'" -); +$PrecioUnitario = sqlValue( + "SELECT PrecioUnitario FROM productos where ID='{$data['PrecioUnitario']}'" +); ``` -The above code retrieves the unit price from the products table given -the primary key value stored in the child `order_items` table, -`$data['UnitPrice']` , and stores the actual unit price in -`$UnitPrice` . We can now perform the calculation as follows: +El código anterior recupera el precio unitario de la tabla de productos dado +el valor de la clave principal almacenado en la tabla secundaria `items_pedido`, +`$data['PrecioUnitario']`, y almacena el precio unitario real en +`$PrecioUnitario`. Ahora podemos realizar el cálculo de la siguiente manera: ```php -$data['Subtotal'] = $UnitPrice * $data['Quantity']; +$data['Subtotal'] = $PrecioUnitario * $data['Cantidad']; ``` -Putting it all together, whenever we are performing calculations that -involve lookup fields, we should first retrieve the actual values from -the parent table and use those retrieved values in the calculation -formula. It's very easy to write once we understand how it works. To -sum up, here is our subtotal code: +Poniéndolo todo junto, cada vez que realicemos cálculos que +involucren campos de búsqueda, primero debemos recuperar los valores reales de +la tabla principal y usar esos valores recuperados en la fórmula de cálculo. +Es muy fácil de escribir una vez que entendemos cómo funciona. Para +resumir, aquí está nuestro código de subtotal: ```php -$UnitPrice = sqlValue( - "SELECT UnitPrice FROM products where ID='{$data['UnitPrice']}'" +$PrecioUnitario = sqlValue( + "SELECT PrecioUnitario FROM productos where ID='{$data['PrecioUnitario']}'" ); -$data['Subtotal'] = $UnitPrice * $data['Quantity']; +$data['Subtotal'] = $PrecioUnitario * $data['Cantidad']; ``` -One final note ... some tables contain non-numeric primary key values. -For example, if the above `products` table stores primary keys as -`LHCN01`, `LEM01` ... etc rather than `18`, `19` and so on, -then we should escape those primary keys first to avoid query errors and -protect against SQL injection attacks: +Una nota final... algunas tablas contienen valores de clave principal no numéricos. +Por ejemplo, si la tabla `productos` anterior almacena claves principales como +`LHCN01`, `LEM01`... etc. en lugar de `18`, `19`, etc., +entonces primero debemos escapar esas claves principales para evitar errores de consulta y +proteger contra ataques de inyección SQL: ```php -/* Escape non-numeric lookup values before using them in SQL queries */ -$SafeUnitPriceLookup = makeSafe($data['UnitPrice']); +/* Escapar valores de búsqueda no numéricos antes de usarlos en consultas SQL */ +$SafeUnitPriceLookup = makeSafe($data['PrecioUnitario']); /* - Now it's safe to use $SafeUnitPriceLookup to - retrieve our unit price + Ahora es seguro usar $SafeUnitPriceLookup para + recuperar nuestro precio unitario */ -$UnitPrice = sqlValue( - "SELECT UnitPrice FROM products where ID='{$SafeUnitPriceLookup}'" +$PrecioUnitario = sqlValue( + "SELECT PrecioUnitario FROM productos where ID='{$SafeUnitPriceLookup}'" ); -/* And here is our calculation */ -$data['Subtotal'] = $UnitPrice * $data['Quantity']; +/* Y aquí está nuestro cálculo */ +$data['Subtotal'] = $PrecioUnitario * $data['Cantidad']; ``` -To summarize, whenever you are working with lookup fields in your -calculations, you should first retrieve the actual values from the parent -table and then use those values in your calculations. This is a simple -concept that can save you a lot of time and headaches in the future. - - +En resumen, cada vez que trabaje con campos de búsqueda en sus +cálculos, primero debe recuperar los valores reales de la tabla principal +y luego usar esos valores en sus cálculos. Este es un concepto simple +que puede ahorrarle mucho tiempo y dolores de cabeza en el futuro. diff --git a/pages/advanced-topics/index.md b/pages/advanced-topics/index.md index c812358..e9d9477 100644 --- a/pages/advanced-topics/index.md +++ b/pages/advanced-topics/index.md @@ -1,39 +1,38 @@ --- -title: Advanced topics -linkTitle: Advanced topics +title: Temas avanzados +linkTitle: Temas avanzados slug: help/advanced-topics --- -# Advanced topics +# Temas avanzados * [**Hooks**](/appgini/help/advanced-topics/hooks/) - * [**The "hooks" folder**](/appgini/help/advanced-topics/hooks/folder-contents/) - * [**Global hooks**](/appgini/help/advanced-topics/hooks/global-hooks/) - * [`login_failed()` hook](/appgini/help/advanced-topics/hooks/global-hooks/#login_failed) - * [`login_ok()` hook](/appgini/help/advanced-topics/hooks/global-hooks/#login_ok) - * [`member_activity()` hook](/appgini/help/advanced-topics/hooks/global-hooks/#member_activity) - * [**Table-specific hooks**](/appgini/help/advanced-topics/hooks/table-specific-hooks/) - * [`tablename_before_insert()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_before_insert) - * [`tablename_after_insert()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_insert) - * [`tablename_before_update()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_before_update) - * [`tablename_after_update()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_update) - * [`tablename_before_delete()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_before_delete) - * [`tablename_after_delete()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_delete) - * [`tablename_dv()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_dv) - * [`tablename_csv()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_csv) - * [`tablename_init()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_init) - * [`tablename_header()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_header) - * [`tablename_footer()` hook](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_footer) - * [`tablename_batch_actions()` hook](/appgini/help/advanced-topics/hooks/multiple-record-batch-actions/) - * [**`DataList` object**](/appgini/help/advanced-topics/hooks/DataList-object/) - * [**`memberInfo` array**](/appgini/help/advanced-topics/hooks/memberInfo-array/) - * [**Magic files**](/appgini/help/advanced-topics/hooks/magic-files/) - * [**`WindowMessages` class**](/appgini/help/advanced-topics/hooks/WindowMessages-class/ "A class for displaying messages to the user on the next page load.") -* [**Table and detail view classes**](/appgini/help/advanced-topics/table-and-detail-view-classes/) -* [**Custom pages**](/appgini/help/advanced-topics/custom-limited-access-pages/) -* [**Third party libraries**](/appgini/help/advanced-topics/third-party-libraries-and-resources/) -* [**Command-line parameters**](/appgini/help/advanced-topics/command-line-parameters/) -* [**URL parameters**](/appgini/help/advanced-topics/url-parameters/) -* [**Troublesooting errors and blank pages**](/appgini/help/advanced-topics/troubleshooting-errors-and-blank-pages/) -* [**AppGini files to ignore in git repositories**](/appgini/help/advanced-topics/gitignore/) - + * [**La carpeta "hooks"**](/appgini/help/advanced-topics/hooks/folder-contents/) + * [**Hooks globales**](/appgini/help/advanced-topics/hooks/global-hooks/) + * [Hook `login_failed()`](/appgini/help/advanced-topics/hooks/global-hooks/#login_failed) + * [Hook `login_ok()`](/appgini/help/advanced-topics/hooks/global-hooks/#login_ok) + * [Hook `member_activity()`](/appgini/help/advanced-topics/hooks/global-hooks/#member_activity) + * [**Hooks específicos de tabla**](/appgini/help/advanced-topics/hooks/table-specific-hooks/) + * [Hook `tablename_before_insert()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_before_insert) + * [Hook `tablename_after_insert()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_insert) + * [Hook `tablename_before_update()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_before_update) + * [Hook `tablename_after_update()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_update) + * [Hook `tablename_before_delete()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_before_delete) + * [Hook `tablename_after_delete()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_delete) + * [Hook `tablename_dv()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_dv) + * [Hook `tablename_csv()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_csv) + * [Hook `tablename_init()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_init) + * [Hook `tablename_header()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_header) + * [Hook `tablename_footer()`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_footer) + * [Hook `tablename_batch_actions()`](/appgini/help/advanced-topics/hooks/multiple-record-batch-actions/) + * [**Objeto `DataList`**](/appgini/help/advanced-topics/hooks/DataList-object/) + * [**Matriz `memberInfo`**](/appgini/help/advanced-topics/hooks/memberInfo-array/) + * [**Archivos mágicos**](/appgini/help/advanced-topics/hooks/magic-files/) + * [**Clase `WindowMessages`**](/appgini/help/advanced-topics/hooks/WindowMessages-class/ "Una clase para mostrar mensajes al usuario en la próxima carga de página.") +* [**Clases de vista de tabla y detallada**](/appgini/help/advanced-topics/table-and-detail-view-classes/) +* [**Páginas personalizadas**](/appgini/help/advanced-topics/custom-limited-access-pages/) +* [**Bibliotecas de terceros**](/appgini/help/advanced-topics/third-party-libraries-and-resources/) +* [**Parámetros de línea de comandos**](/appgini/help/advanced-topics/command-line-parameters/) +* [**Parámetros de URL**](/appgini/help/advanced-topics/url-parameters/) +* [**Solución de problemas de errores y páginas en blanco**](/appgini/help/advanced-topics/troubleshooting-errors-and-blank-pages/) +* [**Archivos de AppGini a ignorar en repositorios git**](/appgini/help/advanced-topics/gitignore/) diff --git a/pages/advanced-topics/programming-reference/useful-php-functions.md b/pages/advanced-topics/programming-reference/useful-php-functions.md index 6dded88..867ffa3 100644 --- a/pages/advanced-topics/programming-reference/useful-php-functions.md +++ b/pages/advanced-topics/programming-reference/useful-php-functions.md @@ -1,49 +1,49 @@ --- -title: Useful AppGini PHP functions for use in custom code -linkTitle: AppGini PHP functions +title: Funciones PHP útiles de AppGini para usar en código personalizado +linkTitle: Funciones PHP de AppGini slug: help/advanced-topics/programming-reference/useful-php-functions -keywords: AppGini PHP functions, sql(), sendmail(), PHPMailer, sendmail_handler(), sqlValue() -description: AppGini provides a number of useful PHP functions that you can use in your custom code to interact with your database and perform various tasks. +keywords: Funciones PHP de AppGini, sql(), sendmail(), PHPMailer, sendmail_handler(), sqlValue() +description: AppGini proporciona una serie de funciones PHP útiles que puede utilizar en su código personalizado para interactuar con su base de datos y realizar diversas tareas. --- -# Useful AppGini PHP functions for use in custom code +# Funciones PHP útiles de AppGini para usar en código personalizado -> **Note**: This page is a work in progress. We'll be adding more functions and examples soon. +> **Nota**: Esta página es un trabajo en progreso. Pronto agregaremos más funciones y ejemplos. -AppGini provides a number of useful PHP functions that you can use in your custom code to interact with your database and perform various tasks. Here's a list of some of these functions: +AppGini proporciona una serie de funciones PHP útiles que puede utilizar en su código personalizado para interactuar con su base de datos y realizar diversas tareas. Aquí hay una lista de algunas de estas funciones: ## `sql()` -This function is used to execute a SQL query. +Esta función se utiliza para ejecutar una consulta SQL. -### Syntax +### Sintaxis ```php $options = []; $result = sql($query, $options); ``` -### Parameters +### Parámetros -- `$query` (string): The SQL query to execute. -- **`$options`** (array): An associative array of options, passed by reference. This array is used to pass additional options to the function, but can also return error messages if the query fails. The following options are supported: - - `silentErrors`: If set to `true`, the function will not display an error message if the query fails. Default is `true`. - - `noSlowQueryLog`: If set to `true`, the function will not log slow queries. Default is `false`. - - `noErrorQueryLog`: If set to `true`, the function will not log errors. Default is `false`. +- `$query` (string): La consulta SQL a ejecutar. +- **`$options`** (array): Una matriz asociativa de opciones, pasada por referencia. Esta matriz se utiliza para pasar opciones adicionales a la función, pero también puede devolver mensajes de error si la consulta falla. Se admiten las siguientes opciones: + - `silentErrors`: Si se establece en `true`, la función no mostrará un mensaje de error si la consulta falla. El valor predeterminado es `true`. + - `noSlowQueryLog`: Si se establece en `true`, la función no registrará las consultas lentas. El valor predeterminado es `false`. + - `noErrorQueryLog`: Si se establece en `true`, la función no registrará errores. El valor predeterminado es `false`. -> **Note**: Slow and error queries can be accessed from the query log page in the admin area (Utilties menu > Query log). +> **Nota**: Se puede acceder a las consultas lentas y con errores desde la página de registro de consultas en el área de administración (Menú Utilidades > Registro de consultas). -### Return value +### Valor devuelto -The function returns a resultset object on success, or `false` on failure. The resultset object can be used to fetch rows returned by the query using the `db_fetch_assoc()`, `db_fetch_row()`, or `db_fetch_array()` functions. +La función devuelve un objeto de conjunto de resultados en caso de éxito, o `false` en caso de error. El objeto de conjunto de resultados se puede utilizar para obtener filas devueltas por la consulta utilizando las funciones `db_fetch_assoc()`, `db_fetch_row()` o `db_fetch_array()`. -### Example +### Ejemplo ```php $options = ['silentErrors' => true]; $result = sql("SELECT * FROM `books`", $options); if($result === false) { - echo 'Failed to execute query: ' . $options['error']; + echo 'Error al ejecutar la consulta: ' . $options['error']; } else { while($row = db_fetch_assoc($result)) { echo $row['title'] . '<br>'; @@ -53,71 +53,71 @@ if($result === false) { ## `sendmail()` -This function is used to send emails using the [PHPMailer library](https://github.com/PHPMailer/PHPMailer/) included as part of the generated files of AppGini apps. It supports sending emails to single or multiple recipients, and can use SMTP for sending emails, if configured via the Admin settings page under the Admin area. The function also supports adding CC, BCC recipients, and handling HTML content in the email body. +Esta función se utiliza para enviar correos electrónicos utilizando la [biblioteca PHPMailer](https://github.com/PHPMailer/PHPMailer/) incluida como parte de los archivos generados de las aplicaciones AppGini. Admite el envío de correos electrónicos a destinatarios únicos o múltiples, y puede usar SMTP para enviar correos electrónicos, si está configurado a través de la página de Configuración de administración en el área de Administración. La función también admite agregar destinatarios CC, CCO y manejar contenido HTML en el cuerpo del correo electrónico. -### Parameters +### Parámetros -- **`$mail`** (array): An associative array containing the email details. The following keys are supported: - - `to` (string|array): The recipient's email address or an array of recipients in the format `[[email, name]]`. - - `name` (string, optional): The recipient's name (used if 'to' is a string). - - `subject` (string, optional): The subject of the email. - - `message` (string, optional): The body of the email. - - `cc` (array, optional): An array of CC recipients in the format `[[email, name]]`. - - `bcc` (array, optional): An array of BCC recipients in the format `[[email, name]]`. - - `debug` (int, optional): Debug level for SMTP (0 to 4). - - `tag` (mixed, optional): Custom tag to pass to the [`sendmail_handler` hook function](../hooks/global-hooks.md#sendmail_handler). +- **`$mail`** (array): Una matriz asociativa que contiene los detalles del correo electrónico. Se admiten las siguientes claves: + - `to` (string|array): La dirección de correo electrónico del destinatario o una matriz de destinatarios en el formato `[[email, name]]`. + - `name` (string, opcional): El nombre del destinatario (se usa si 'to' es una cadena). + - `subject` (string, opcional): El asunto del correo electrónico. + - `message` (string, opcional): El cuerpo del correo electrónico. + - `cc` (array, opcional): Una matriz de destinatarios CC en el formato `[[email, name]]`. + - `bcc` (array, opcional): Una matriz de destinatarios CCO en el formato `[[email, name]]`. + - `debug` (int, opcional): Nivel de depuración para SMTP (0 a 4). + - `tag` (mixed, opcional): Etiqueta personalizada para pasar a la [función hook `sendmail_handler`](../hooks/global-hooks.md#sendmail_handler). -### Return value +### Valor devuelto -- `true` on success. -- (string) containing the error message on failure. +- `true` en caso de éxito. +- (string) que contiene el mensaje de error en caso de fallo. -### Examples +### Ejemplos -#### Sending a Single Email +#### Envío de un solo correo electrónico ```php $result = sendmail([ - 'to' => 'recipient@example.com', - 'name' => 'Recipient Name', - 'subject' => 'Test Email', - 'message' => 'This is a test email.' + 'to' => 'destinatario@ejemplo.com', + 'name' => 'Nombre del destinatario', + 'subject' => 'Correo electrónico de prueba', + 'message' => 'Este es un correo electrónico de prueba.' ]); if ($result === true) { - echo "Email sent successfully!"; + echo "¡Correo electrónico enviado con éxito!"; } else { - echo "Failed to send email: $result"; + echo "Error al enviar el correo electrónico: $result"; } ``` -#### Sending an Email to Multiple Recipients +#### Envío de un correo electrónico a múltiples destinatarios ```php $result = sendmail([ 'to' => [ - ['recipient1@example.com', 'Recipient One'], - ['recipient2@example.com', 'Recipient Two'] + ['destinatario1@ejemplo.com', 'Destinatario Uno'], + ['destinatario2@ejemplo.com', 'Destinatario Dos'] ], - 'subject' => 'Test Email to Multiple Recipients', - 'message' => 'This is a test email to multiple recipients.' + 'subject' => 'Correo electrónico de prueba para múltiples destinatarios', + 'message' => 'Este es un correo electrónico de prueba para múltiples destinatarios.' ]); if ($result === true) { - echo "Email sent successfully!"; + echo "¡Correo electrónico enviado con éxito!"; } else { - echo "Failed to send email: $result"; + echo "Error al enviar el correo electrónico: $result"; } ``` -#### Sending an Email with Attachments +#### Envío de un correo electrónico con archivos adjuntos -To handle attachments, you can use the [`sendmail_handler` hook function](../hooks/global-hooks.md#sendmail_handler), -which is defined in the `hooks/__global.php` file. You can modify the `sendmail_handler` function to add attachments handling as follows: +Para manejar archivos adjuntos, puede usar la [función hook `sendmail_handler`](../hooks/global-hooks.md#sendmail_handler), +que se define en el archivo `hooks/__global.php`. Puede modificar la función `sendmail_handler` para agregar el manejo de archivos adjuntos de la siguiente manera: ```php function sendmail_handler(&$pm) { - // Check if attachments are provided in the tag + // Comprobar si se proporcionan archivos adjuntos en la etiqueta if (!empty($pm->tag['attachments'])) { foreach ($pm->tag['attachments'] as $attachment) { $pm->addAttachment($attachment); @@ -126,66 +126,64 @@ function sendmail_handler(&$pm) { } ``` -You can then send an email with attachments as follows: +Luego puede enviar un correo electrónico con archivos adjuntos de la siguiente manera: ```php $result = sendmail([ - 'to' => 'recipient@example.com', - 'name' => 'Recipient Name', - 'subject' => 'Test Email with Attachment', - 'message' => 'This is a test email with an attachment.', + 'to' => 'destinatario@ejemplo.com', + 'name' => 'Nombre del destinatario', + 'subject' => 'Correo electrónico de prueba con archivo adjunto', + 'message' => 'Este es un correo electrónico de prueba con un archivo adjunto.', 'tag' => [ 'attachments' => [ - '/path/to/attachment1.pdf', - '/path/to/attachment2.jpg' + '/ruta/a/adjunto1.pdf', + '/ruta/a/adjunto2.jpg' ] ] ]); if ($result === true) { - echo "Email sent successfully!"; + echo "¡Correo electrónico enviado con éxito!"; } else { - echo "Failed to send email: $result"; + echo "Error al enviar el correo electrónico: $result"; } ``` ## `sqlValue()` -This function is used to execute a SQL query and return a single value from the first row of the result set. This is a very convenient way to quickly execute a query and get a single value, without having to iterate through the result set. +Esta función se utiliza para ejecutar una consulta SQL y devolver un solo valor de la primera fila del conjunto de resultados. Esta es una forma muy conveniente de ejecutar rápidamente una consulta y obtener un solo valor, sin tener que iterar a través del conjunto de resultados. -### Syntax +### Sintaxis ```php $value = sqlValue($query, $error); ``` -### Parameters +### Parámetros -- **`$query`** (string): The SQL query to execute. -- **`$error`** (string, optional): A variable passed by reference to store an error message if the query fails. If the query is successful, this variable will not be modified. +- **`$query`** (string): La consulta SQL a ejecutar. +- **`$error`** (string, opcional): Una variable pasada por referencia para almacenar un mensaje de error si la consulta falla. Si la consulta tiene éxito, esta variable no se modificará. -### Return value -- The function returns the value from the first row of the result set, or `false` if the query fails or returns no rows. In the case of failure, the `$error` variable (if provided) will contain the error message. +### Valor devuelto +- La función devuelve el valor de la primera fila del conjunto de resultados, o `false` si la consulta falla o no devuelve filas. En caso de fallo, la variable `$error` (si se proporciona) contendrá el mensaje de error. -### Examples +### Ejemplos -#### Basic Usage without error handling +#### Uso básico sin manejo de errores ```php $bookCount = sqlValue("SELECT COUNT(*) FROM `books`"); -echo "Total number of books: $bookCount"; +echo "Número total de libros: $bookCount"; ``` -#### Usage with error handling +#### Uso con manejo de errores ```php $error = ''; $bookCount = sqlValue("SELECT COUNT(*) FROM `books`", $error); if ($bookCount === false) { - echo "Failed to get book count: $error"; + echo "Error al obtener el recuento de libros: $error"; } else { - echo "Total number of books: $bookCount"; + echo "Número total de libros: $bookCount"; } ``` - - diff --git a/pages/advanced-topics/table-and-detail-view-classes.md b/pages/advanced-topics/table-and-detail-view-classes.md index 62450d6..a539348 100644 --- a/pages/advanced-topics/table-and-detail-view-classes.md +++ b/pages/advanced-topics/table-and-detail-view-classes.md @@ -1,37 +1,32 @@ --- -title: Table and detail view classes -linkTitle: Table and detail view classes +title: Clases de vista de tabla y detallada +linkTitle: Clases de vista de tabla y detallada slug: help/advanced-topics/table-and-detail-view-classes --- -# Table and detail view classes +# Clases de vista de tabla y detallada -As of AppGini 5.60, a new advanced option was added to allow you to -specify one or more space-separated CSS class names to apply to the -table view and the detail view of a table. This option can be found by -selecting a table in your project, then clicking the **Template** -button in the table properties pane. This would open a dialog as shown below. +A partir de AppGini 5.60, se agregó una nueva opción avanzada para permitirle +especificar uno o más nombres de clases CSS separados por espacios para aplicar a la +vista de tabla y la vista detallada de una tabla. Esta opción se puede encontrar +seleccionando una tabla en su proyecto, luego haciendo clic en el botón **Plantilla** +en el panel de propiedades de la tabla. Esto abriría un cuadro de diálogo como se muestra a continuación. -![How to open the template window in AppGini 5.60 and higher.](https://cdn.bigprof.com/images/table-view-template-dialog.png "How to open the template window in AppGini 5.60 and higher.") +![Cómo abrir la ventana de plantilla en AppGini 5.60 y superior.](https://cdn.bigprof.com/images/table-view-template-dialog.png "Cómo abrir la ventana de plantilla en AppGini 5.60 y superior.") -Clicking the **Advanced** button will reveal even more options. - -![](https://cdn.bigprof.com/images/table-view-template-dialog-advanced.png "The 'Advanced' button reveals options for changing table and detail view classes.") - -You can specify CSS classes to apply to the table view and the detail -view. Most of the time, these would be [Bootstrap grid -classes](https://getbootstrap.com/css/#grid) . You could also select -classes form the drop-down at the right. For example, to set the table -view to display on the left part of the page, while the detail view on -the right part, you could use the class `col-md-6` for each. The result -would look something like this when you generate your application. - -> TODO: Add a screenshot here. - -Of course, to display the table and detail view on the same page, the -option **Display detail view in a separate page** must be *unchecked* -for that table. +Al hacer clic en el botón **Avanzado** se revelarán aún más opciones. +![](https://cdn.bigprof.com/images/table-view-template-dialog-advanced.png "El botón 'Avanzado' revela opciones para cambiar las clases de vista de tabla y detallada.") +Puede especificar clases CSS para aplicar a la vista de tabla y la vista +detallada. La mayoría de las veces, estas serían [clases de cuadrícula de Bootstrap](https://getbootstrap.com/css/#grid). También podría seleccionar +clases del menú desplegable a la derecha. Por ejemplo, para configurar la vista de tabla +para que se muestre en la parte izquierda de la página, mientras que la vista detallada en +la parte derecha, podría usar la clase `col-md-6` para cada una. El resultado +se vería algo así cuando genere su aplicación. +> TODO: Añadir una captura de pantalla aquí. +Por supuesto, para mostrar la tabla y la vista detallada en la misma página, la +opción **Mostrar vista detallada en una página separada** debe estar *desmarcada* +para esa tabla. diff --git a/pages/advanced-topics/third-party-libraries-and-resources.md b/pages/advanced-topics/third-party-libraries-and-resources.md index 382651a..ecb590a 100644 --- a/pages/advanced-topics/third-party-libraries-and-resources.md +++ b/pages/advanced-topics/third-party-libraries-and-resources.md @@ -1,29 +1,26 @@ --- -title: Third party resources used by AppGini applications -linkTitle: 3rd party resources +title: Recursos de terceros utilizados por las aplicaciones AppGini +linkTitle: Recursos de terceros slug: help/advanced-topics/third-party-libraries-and-resources -description: List of third-party open source libraries and resources used by AppGini applications. -keywords: third party, libraries, resources, open source, jQuery, Bootstrap, Select2, Datepicker, Timepicker, Datetimepicker, Prototype, Scriptaculous, Lightbox2, NicEdit +description: Lista de bibliotecas y recursos de código abierto de terceros utilizados por las aplicaciones AppGini. +keywords: terceros, bibliotecas, recursos, código abierto, jQuery, Bootstrap, Select2, Datepicker, Timepicker, Datetimepicker, Prototype, Scriptaculous, Lightbox2, NicEdit --- -# Third party resources used by AppGini applications - - -This is a list of third-party open source libraries and resources used -by AppGini applications. - -- **jQuery** [Website](https://jquery.com/), [Documentation](https://api.jquery.com/) -- **Initializr** [Website](http://www.initializr.com/) -- **Bootstrap** [Website](https://getbootstrap.com/), [Documentation](https://getbootstrap.com/docs/3.4/css/) *(Bootstrap 3.4.1 -- will be updated to 5.x in future versions)* -- **Select2** [Website and documentation](https://select2.github.io/select2/) -- **Datepicker** [Website](https://github.com/freqdec/datePicker), [Documentation](https://freqdec.github.io/datePicker/) -- **Bootstrap Timepicker** [Website and documentation](https://github.com/jdewit/bootstrap-timepicker) -* **Bootstrap Datetimepicker** [Website and documentation](https://getdatepicker.com/4/) -- **Prototype** [Website](http://prototypejs.org/), [Documentation](http://api.prototypejs.org/) *(removed in AppGini 25.11 and above)* -- **Scriptaculous** [Website](https://script.aculo.us/), [Documentation](https://madrobby.github.io/scriptaculous/) *(removed in AppGini 25.11 and above)* -- **Lightbox2** [Website and documentation](http://lokeshdhakar.com/projects/lightbox2/) (removed in AppGini 25.11 and above) -- **NicEdit** [Website and documentation](http://nicedit.com/) -- **Moment.js** [Website and documentation](https://momentjs.com/docs/) -- **jQuery Hotkeys** [Website and documentation](https://github.com/jeresig/jquery.hotkeys) +# Recursos de terceros utilizados por las aplicaciones AppGini +Esta es una lista de bibliotecas y recursos de código abierto de terceros utilizados +por las aplicaciones AppGini. +- **jQuery** [Sitio web](https://jquery.com/), [Documentación](https://api.jquery.com/) +- **Initializr** [Sitio web](http://www.initializr.com/) +- **Bootstrap** [Sitio web](https://getbootstrap.com/), [Documentación](https://getbootstrap.com/docs/3.4/css/) *(Bootstrap 3.4.1 -- se actualizará a 5.x en futuras versiones)* +- **Select2** [Sitio web y documentación](https://select2.github.io/select2/) +- **Datepicker** [Sitio web](https://github.com/freqdec/datePicker), [Documentación](https://freqdec.github.io/datePicker/) +- **Bootstrap Timepicker** [Sitio web y documentación](https://github.com/jdewit/bootstrap-timepicker) +* **Bootstrap Datetimepicker** [Sitio web y documentación](https://getdatepicker.com/4/) +- **Prototype** [Sitio web](http://prototypejs.org/), [Documentación](http://api.prototypejs.org/) *(eliminado en AppGini 25.11 y versiones posteriores)* +- **Scriptaculous** [Sitio web](https://script.aculo.us/), [Documentación](https://madrobby.github.io/scriptaculous/) *(eliminado en AppGini 25.11 y versiones posteriores)* +- **Lightbox2** [Sitio web y documentación](http://lokeshdhakar.com/projects/lightbox2/) (eliminado en AppGini 25.11 y versiones posteriores) +- **NicEdit** [Sitio web y documentación](http://nicedit.com/) +- **Moment.js** [Sitio web y documentación](https://momentjs.com/docs/) +- **jQuery Hotkeys** [Sitio web y documentación](https://github.com/jeresig/jquery.hotkeys) diff --git a/pages/advanced-topics/troubleshooting-errors-and-blank-pages.md b/pages/advanced-topics/troubleshooting-errors-and-blank-pages.md index 29cc508..1eba825 100644 --- a/pages/advanced-topics/troubleshooting-errors-and-blank-pages.md +++ b/pages/advanced-topics/troubleshooting-errors-and-blank-pages.md @@ -1,81 +1,74 @@ --- -title: I see an error or a blank page in my AppGini app - how to troubleshoot? -linkTitle: Blank pages and errors +title: Veo un error o una página en blanco en mi aplicación AppGini - ¿cómo solucionarlo? +linkTitle: Páginas en blanco y errores slug: help/advanced-topics/troubleshooting-errors-and-blank-pages --- -# I see an error or a blank page in my AppGini app - how to troubleshoot? +# Veo un error o una página en blanco en mi aplicación AppGini - ¿cómo solucionarlo? +**En primer lugar:** ¿Ha realizado alguna personalización en su aplicación AppGini, +ya sea a través de +[hooks](https://bigprof.com/appgini/help/advanced-topics/hooks/) o +editando directamente algunos de los archivos generados fuera de los hooks? Si es así: -**First of all:** Have you made a customization to your AppGini app, -either through -[hooks](https://bigprof.com/appgini/help/advanced-topics/hooks/) , or by -directly editing some of the generated files outside hooks? If yes: +1. Abra su archivo de proyecto AXP en AppGini. +2. Genere la aplicación en una **nueva carpeta vacía**. Esto crearía una + aplicación limpia, sin ninguna personalización. +3. Ejecute su nueva aplicación en su navegador, intentando reproducir el error. Si + el error no ocurre, entonces sabemos que hay algo mal en + la personalización que ha realizado. +4. Puede deshacer la personalización o, si desea depurarla + más a fondo, siga leyendo a continuación los pasos para descubrir el error y + depurarlo. -1. Open your AXP project file in AppGini. -2. Generate the app to a **new empty folder** . This would create a - clean app, without any customizations. -3. Run your new app in your browser, trying to reproduce the error. If - the error doesn't occur, then we know there is something wrong in - the customization you've made. -4. You can either undo the customization, or if you want to debug it - further, keep reading below for steps to discover the error and - debug it. +**Los pasos siguientes son útiles para encontrar la causa exacta del error, +ya sea en su código personalizado o en el código generado de su +aplicación.** -**The steps below are helpful to find the exact cause of the error, -whether it's in your customized code, or in the generated code of your -app.** +- Presione F12 para abrir el inspector del navegador, luego haga clic en la + pestaña 'Consola'. ¿Hay algún error reportado allí? -- Please press F12 to open the browser's inspector, then click on the - 'Console' tab. Is there any error reported there? + ![Pestaña de la consola del inspector que muestra un error de ejemplo para una aplicación de AppGini.](https://cdn.bigprof.com/images/appgini-inspector-console-error.png) - ![Inspector console tab showing an example error for an AppGini - app.](https://cdn.bigprof.com/images/appgini-inspector-console-error.png) +- Si no es así, y si puede acceder al área de administración: -- If not, and if you are able to access the admin area: + - Vaya al menú *Utilidades* > *Ver/Reconstruir campos* y realice + las correcciones sugeridas, si las hubiera. - - Go to the *Utilities* menu \> *View/Rebuild fields* and perform - the suggested fixes, if any. + ![Página Ver/Reconstruir campos que muestra un botón de corrección](https://cdn.bigprof.com/images/appgini-rebuild-fields.png) - ![View/Rebuild fields page showing a fix - button](https://cdn.bigprof.com/images/appgini-rebuild-fields.png) + - Si no se informan problemas en la página *Ver/Reconstruir campos*, vaya al + menú *Utilidades* nuevamente > *Registros de consultas*. ¿Hay algún error + reportado? Si es así y se aplica alguna de las siguientes opciones: - - If no issues reported in *View/Rebuild fields* page, go to - *Utilities* menu again \> *Query logs* . Are there any errors - reported? If yes and any of the following applies: + - Ha realizado una personalización en el código generado, o + - tiene campos calculados en su aplicación, o + - tiene una o más consultas SQL personalizadas para campos de búsqueda, - - You've made a customization to the generated code, or - - you have calculated fields in your application, or - - you have one or more custom SQL queries for lookup fields, + si es así, intente revisar su código para asegurarse de que las consultas SQL sean + válidas. Puede utilizar la 'Herramienta interactiva de consultas SQL' en + el menú *Utilidades* para probar su consulta. O puede usar herramientas de terceros + como phpMyAdmin. - if so, try revising your code to make sure the SQL queries are - valid. You can use the 'Interactive SQL queries tool' under - the *Utilties* menu to test your query. Or you can use 3rd party - tools like phpMyAdmin. + ![Página de registros de consultas que muestra errores SQL de ejemplo](https://cdn.bigprof.com/images/appgini-query-logs-errors.png) - ![Query logs page showing example SQL - errors](https://cdn.bigprof.com/images/appgini-query-logs-errors.png) +- Si no encontró errores de SQL, abra el archivo `error_log` de su servidor y + verifique si se informa algún error relacionado con su aplicación AppGini + en él. -- If you found no SQL errors, open your server `error_log` file and - check to see if any errors related to your AppGini app are reported - in it. + - La ubicación de ese archivo varía según el software de su servidor web + y su sistema operativo. Debe consultar la documentación de su servidor web + para saber dónde encontrar el archivo de registro de errores. Por ejemplo, para + Apache en Linux, ese archivo está *normalmente* en + `/var/log/apache2/error.log` (pero eso podría variar + según la configuración de su entorno). - - The location of that file varies based on your web server - software and your OS. You should consult your web server - documentation to learn where to find the error log file. For - example, for Apache on linux, that file is *typically* at - `/var/log/apache2/error.log` (but that might vary - based on your environment configuration). + Si encuentra uno o más errores reportados en el archivo de registro de errores, y + ha realizado una personalización en el código generado, intente revisar + su código y corregir cualquier error de sintaxis. - If you find one or more errors reported in the error log file, and - you've made a customization to the generated code, try to revise - your code and fix any syntax errors. - -- If none of the above applies to your AppGini application, please - send us your AXP project file along with any error messages, - screenshots and/or any other details about the error and how to - reproduce it. You can send these via the contact form at +- Si ninguna de las opciones anteriores se aplica a su aplicación AppGini, envíenos + su archivo de proyecto AXP junto con cualquier mensaje de error, + capturas de pantalla y/o cualquier otro detalle sobre el error y cómo + reproducirlo. Puede enviarlos a través del formulario de contacto en <https://bigprof.com/appgini/support-request> - - - diff --git a/pages/advanced-topics/url-parameters.md b/pages/advanced-topics/url-parameters.md index e91fde8..f5c29aa 100644 --- a/pages/advanced-topics/url-parameters.md +++ b/pages/advanced-topics/url-parameters.md @@ -1,139 +1,134 @@ --- -title: Special links and URL parameters -linkTitle: URL parameters +title: Enlaces especiales y parámetros de URL +linkTitle: Parámetros de URL slug: help/advanced-topics/url-parameters --- -# Special links and URL parameters - - -By default, the links to various tables in your AppGini-generated -application pass no URL parameters, and thus display the default table -view \-- applying the default sorting and no filters. However, you can -add special parameters to the URL that allow you to control how the -table view data is displayed. - -The default way to link to a table is to link to -`tablename_view.php` (where `tablename` is the name of -the concerned table). For example, if you have a table named *customers* -, the default table view link would be `customers_view.php`. - -There are some special URL parameters that you can use as part of the -link to change what you are linking to. For example, if you want to link -to the customers table, sorted by country, rather than not sorted, the -link would be `customers_view.php?SortField=4` -(assuming country is the fourth field in the table as it appears in your -AppGini project). You can add other URL parameters to the link, -separating them by `&` character (note that only the first parameter you -add to the URL starts with a `?` character). You can add URL parameters in -any order. - -Here is a very easy way to obtain the table view link if you want to -apply specific filters and sorting: select the concerned table in -AppGini, then check the option **Allow users to save filters** . This -would add a button down the filters page labeled **Save and apply -filters** . You can then go to the filters page of your table, define -the filters and sorting you wish to link to, and then click that button. -This will display a *permalink* to the table view that you can copy and -use to link to the filtered and sorted table. See the illustration -below. - -![Obtain URL parameters from saved filters](https://cdn.bigprof.com/images/appgini/obtain-url-parameters-from-saved-filters.gif "Obtain URL parameters from saved filters") - -You can then add this link to the homepage and/or the navigation menu -for other users to access it without having to redefine the filters and -sorting. To do so, just edit the generated `hooks/links-home.php` -(for adding the link to the homepage), and -`hooks/links-navmenu.php` (for adding the link to the navigation -menu). - -## Here is a table listing common URL parameters and their usage +# Enlaces especiales y parámetros de URL + +De forma predeterminada, los enlaces a varias tablas en su aplicación generada por AppGini +no pasan parámetros de URL y, por lo tanto, muestran la vista de tabla predeterminada, +aplicando la ordenación predeterminada y sin filtros. Sin embargo, puede +agregar parámetros especiales a la URL que le permiten controlar cómo se muestran +los datos de la vista de tabla. + +La forma predeterminada de enlazar a una tabla es enlazar a +`nombretabla_view.php` (donde `nombretabla` es el nombre de +la tabla en cuestión). Por ejemplo, si tiene una tabla llamada *clientes*, +el enlace de vista de tabla predeterminado sería `clientes_view.php`. + +Hay algunos parámetros de URL especiales que puede usar como parte del +enlace para cambiar a qué está enlazando. Por ejemplo, si desea enlazar +a la tabla de clientes, ordenada por país, en lugar de no ordenada, el +enlace sería `clientes_view.php?SortField=4` +(suponiendo que el país es el cuarto campo de la tabla tal como aparece en su +proyecto AppGini). Puede agregar otros parámetros de URL al enlace, +separándolos con el carácter `&` (tenga en cuenta que solo el primer parámetro que +agregue a la URL comienza con un carácter `?`). Puede agregar parámetros de URL en +cualquier orden. + +Aquí hay una forma muy fácil de obtener el enlace de la vista de tabla si desea +aplicar filtros y ordenación específicos: seleccione la tabla en cuestión en +AppGini, luego marque la opción **Permitir a los usuarios guardar filtros**. Esto +agregaría un botón debajo de la página de filtros con la etiqueta **Guardar y aplicar +filtros**. Luego puede ir a la página de filtros de su tabla, definir +los filtros y la ordenación a los que desea enlazar, y luego hacer clic en ese botón. +Esto mostrará un *enlace permanente* a la vista de tabla que puede copiar y +usar para enlazar a la tabla filtrada y ordenada. Vea la ilustración +a continuación. + +![Obtener parámetros de URL de filtros guardados](https://cdn.bigprof.com/images/appgini/obtain-url-parameters-from-saved-filters.gif "Obtener parámetros de URL de filtros guardados") + +Luego puede agregar este enlace a la página de inicio y/o al menú de navegación +para que otros usuarios puedan acceder a él sin tener que redefinir los filtros y +la ordenación. Para hacerlo, simplemente edite el archivo `hooks/links-home.php` generado +(para agregar el enlace a la página de inicio) y +`hooks/links-navmenu.php` (para agregar el enlace al menú de navegación). + +## Aquí hay una tabla que enumera los parámetros de URL comunes y su uso ### `SortField` -* Default value: None -* Details: Specify the index of the field(s) to sort the table by. Examples: - * `customers_view.php?SortField=4` sorts the table by the fourth field. - * `customers_view.php?SortField=4,7` sorts the table by the fourth then the seventh field. +* Valor predeterminado: Ninguno +* Detalles: Especifique el índice del campo(s) por el cual ordenar la tabla. Ejemplos: + * `clientes_view.php?SortField=4` ordena la tabla por el cuarto campo. + * `clientes_view.php?SortField=4,7` ordena la tabla por el cuarto y luego por el séptimo campo. ### `SortDirection` -* Default value: `asc` -* Details: If a `SortField` is provided, `SortDirection` determines the direction of sorting. Possible values: `asc`, `desc`. Example: - * `customers_view.php?SortField=4&SortDirection=desc` sorts the table by the fourth field in descending order. +* Valor predeterminado: `asc` +* Detalles: Si se proporciona un `SortField`, `SortDirection` determina la dirección de la ordenación. Valores posibles: `asc`, `desc`. Ejemplo: + * `clientes_view.php?SortField=4&SortDirection=desc` ordena la tabla por el cuarto campo en orden descendente. ### `FilterAnd[x]` -* Default value: None -* Details: Please refer to [working with filters programmatically](/appgini/tips-and-tutorials/working-with-filters/part-1) +* Valor predeterminado: Ninguno +* Detalles: Consulte [trabajar con filtros mediante programación](/appgini/tips-and-tutorials/working-with-filters/part-1) ### `FilterField[x]` -* Default value: None -* Details: Please refer to [working with filters programmatically](/appgini/tips-and-tutorials/working-with-filters/part-1) +* Valor predeterminado: Ninguno +* Detalles: Consulte [trabajar con filtros mediante programación](/appgini/tips-and-tutorials/working-with-filters/part-1) ### `FilterOperator[x]` -* Default value: None -* Details: Please refer to [working with filters programmatically](/appgini/tips-and-tutorials/working-with-filters/part-1) +* Valor predeterminado: Ninguno +* Detalles: Consulte [trabajar con filtros mediante programación](/appgini/tips-and-tutorials/working-with-filters/part-1) ### `FilterValue[x]` -* Default value: None -* Details: Please refer to [working with filters programmatically](/appgini/tips-and-tutorials/working-with-filters/part-1) +* Valor predeterminado: Ninguno +* Detalles: Consulte [trabajar con filtros mediante programación](/appgini/tips-and-tutorials/working-with-filters/part-1) ### `SearchString` -* Default value: None -* Details: Displays records matching the provided search string. This is equivalent to typing a search term in the quick search box above the table view. Example: - * `customers_view.php?SearchString=germany` +* Valor predeterminado: Ninguno +* Detalles: Muestra los registros que coinciden con la cadena de búsqueda proporcionada. Esto equivale a escribir un término de búsqueda en el cuadro de búsqueda rápida sobre la vista de tabla. Ejemplo: + * `clientes_view.php?SearchString=alemania` ### `FirstRecord` -* Default value: 1 -* Details: This is equivalent to navigating the table view using the next/previous buttons or the *Go to page* drop-down. Thus, you could use it to jump to a specific page instead of the default first page of the table. Example: - * `customers_view.php?FirstRecord=21` jumps to page 3 (assuming 10 records per page). +* Valor predeterminado: 1 +* Detalles: Esto equivale a navegar por la vista de tabla utilizando los botones siguiente/anterior o el menú desplegable *Ir a la página*. Por lo tanto, podría usarlo para saltar a una página específica en lugar de la primera página predeterminada de la tabla. Ejemplo: + * `clientes_view.php?FirstRecord=21` salta a la página 3 (suponiendo 10 registros por página). ### `Print_x` -* Default value: None -* Details: Used for displaying the print preview page. Example: - * `customers_view.php?Print_x=1` displays the print preview of the table view. +* Valor predeterminado: Ninguno +* Detalles: Se utiliza para mostrar la página de vista previa de impresión. Ejemplo: + * `clientes_view.php?Print_x=1` muestra la vista previa de impresión de la vista de tabla. ### `addNew_x` -* Default value: None -* Details: If set to any non-zero value, displays the detail view for entering a new record if the user has insert permission to the table. +* Valor predeterminado: Ninguno +* Detalles: Si se establece en cualquier valor distinto de cero, muestra la vista detallada para ingresar un nuevo registro si el usuario tiene permiso de inserción en la tabla. -### `filterer_{fieldname}` +### `filterer_{nombrecampo}` -* Default value: None -* Details: `{fieldname}` is the name of a non-autofill lookup field (that is, a lookup field displaying a drop-down rather than being automatically filled). You should use this with `addNew_x` to set a default value for the specified lookup field. Set the value of this parameter to the value of the primary key of the parent record. For example, to start a new order, setting the customer to the one whose ID is 203: - * `orders_view.php?addNew_x=1&filterer_customer_id=203` +* Valor predeterminado: Ninguno +* Detalles: `{nombrecampo}` es el nombre de un campo de búsqueda sin autocompletar (es decir, un campo de búsqueda que muestra un menú desplegable en lugar de llenarse automáticamente). Debe usar esto con `addNew_x` para establecer un valor predeterminado para el campo de búsqueda especificado. Establezca el valor de este parámetro en el valor de la clave principal del registro principal. Por ejemplo, para iniciar un nuevo pedido, estableciendo el cliente en aquel cuyo ID es 203: + * `pedidos_view.php?addNew_x=1&filterer_id_cliente=203` ### `SelectedID` -* Default value: None -* Details: If provided, displays the detail view for editing the record identified by the given primary key value. If the user doesn't have edit permission for the given record, a read-only detail view is displayed. Example: - * `customers_view.php?SelectedID=203` displays the detail view for editing the customer whose primary key is 203. +* Valor predeterminado: Ninguno +* Detalles: Si se proporciona, muestra la vista detallada para editar el registro identificado por el valor de clave principal dado. Si el usuario no tiene permiso de edición para el registro dado, se muestra una vista detallada de solo lectura. Ejemplo: + * `clientes_view.php?SelectedID=203` muestra la vista detallada para editar el cliente cuya clave principal es 203. ### `dvprint_x` -* Default value: None -* Details: If set to any non-zero value, and a `SelectedID` value is also provided, displays the print preview of the detail view of the record specified. Example: - * `customers_view.php?SelectedID=203&dvprint_x=1` +* Valor predeterminado: Ninguno +* Detalles: Si se establece en cualquier valor distinto de cero, y también se proporciona un valor `SelectedID`, muestra la vista previa de impresión de la vista detallada del registro especificado. Ejemplo: + * `clientes_view.php?SelectedID=203&dvprint_x=1` ### `delete_x` -* Default value: None -* Details: If set to any non-zero value, and a `SelectedID` value is also provided, the specified record is *deleted* if the user has permission. - > **Use this with extreme caution!** +* Valor predeterminado: Ninguno +* Detalles: Si se establece en cualquier valor distinto de cero, y también se proporciona un valor `SelectedID`, el registro especificado se *elimina* si el usuario tiene permiso. + > **¡Use esto con extrema precaución!** ### `noQuickSearchFocus` -* Default value: None -* Details: AppGini 5.90 and above - * Passing `noQuickSearchFocus=1` when linking to a table view prevents auto-focusing of quick search button. This is useful for example when you embed a table view in another page and don't want the browser to "jump" down to the embedded page. - - - +* Valor predeterminado: Ninguno +* Detalles: AppGini 5.90 y superior + * Pasar `noQuickSearchFocus=1` al enlazar a una vista de tabla evita el enfoque automático del botón de búsqueda rápida. Esto es útil, por ejemplo, cuando incrusta una vista de tabla en otra página y no desea que el navegador "salte" a la página incrustada. diff --git a/pages/application-features/collaboration-multi-users.md b/pages/application-features/collaboration-multi-users.md index 9f61d02..ab8868e 100644 --- a/pages/application-features/collaboration-multi-users.md +++ b/pages/application-features/collaboration-multi-users.md @@ -1,274 +1,269 @@ --- -title: Collaboration and multi-user support -linkTitle: Collaboration +title: Colaboración y compatibilidad multiusuario +linkTitle: Colaboración slug: help/application-features/collaboration-multi-users -description: Learn how to manage user groups and permissions in your AppGini application, and how to configure record ownership. -keywords: collaboration, multi-user, user groups, permissions, record ownership +description: Aprenda a administrar grupos de usuarios y permisos en su aplicación AppGini, y cómo configurar la propiedad de los registros. +keywords: colaboración, multiusuario, grupos de usuarios, permisos, propiedad de registros --- -# Collaboration and multi-user support +# Colaboración y compatibilidad multiusuario -## **Quick overview** +## **Resumen rápido** -> * **AppGini applications support multiple users.** -> * **Users are organized into groups, and each group is assigned a granular set of permissions.** -> * **Permissions make it easy to manage access to different parts of the application.** -> * **Users can sign up for an account, and/or be added by the admin.** -> * **You can enable or disable anonymous access to your application.** +> * **Las aplicaciones AppGini admiten múltiples usuarios.** +> * **Los usuarios se organizan en grupos, y a cada grupo se le asigna un conjunto granular de permisos.** +> * **Los permisos facilitan la gestión del acceso a diferentes partes de la aplicación.** +> * **Los usuarios pueden registrarse para obtener una cuenta y/o ser agregados por el administrador.** +> * **Puede habilitar o deshabilitar el acceso anónimo a su aplicación.** -AppGini applications are designed to be used by multiple users simultaneously. Users belong to groups, -and each group is assigned a set of permissions to access different parts of the application. -This section provides an overview of the collaboration and multi-user support features in AppGini applications. +Las aplicaciones AppGini están diseñadas para ser utilizadas por múltiples usuarios simultáneamente. Los usuarios pertenecen a grupos, +y a cada grupo se le asigna un conjunto de permisos para acceder a diferentes partes de la aplicación. +Esta sección proporciona una descripción general de las funciones de colaboración y compatibilidad multiusuario en las aplicaciones AppGini. -There are two important concepts to understand when it comes to collaboration and multi-user support in AppGini applications: +Hay dos conceptos importantes que se deben comprender cuando se trata de colaboración y compatibilidad multiusuario en las aplicaciones AppGini: -1. [User groups](#user-groups) -2. [Record ownership](#record-ownership) +1. [Grupos de usuarios](#grupos-de-usuarios) +2. [Propiedad de los registros](#propiedad-de-los-registros) -## User groups +## Grupos de usuarios -Users in AppGini applications are organized into groups. Each group is assigned a set of permissions to access -different parts of the application. Permissions include the ability to view, add, edit, or delete records in a table, -as well as the ability to import data from CSV files. +Los usuarios en las aplicaciones AppGini se organizan en grupos. A cada grupo se le asigna un conjunto de permisos para acceder +a diferentes partes de la aplicación. Los permisos incluyen la capacidad de ver, agregar, editar o eliminar registros en una tabla, +así como la capacidad de importar datos desde archivos CSV. -Let's take a simple example of a small company that has a sales team, accountants and managers/admins. We can configure -the application to have three groups: Sales, Accountants, and Admins. And we can set different permissions for each group -for handling orders, customers and transactions, as shown in the following diagram: +Tomemos un ejemplo simple de una pequeña empresa que tiene un equipo de ventas, contadores y gerentes/administradores. Podemos configurar +la aplicación para que tenga tres grupos: Ventas, Contadores y Administradores. Y podemos establecer diferentes permisos para cada grupo +para manejar pedidos, clientes y transacciones, como se muestra en el siguiente diagrama: -![User groups example permissions](https://cdn.bigprof.com/images/appgini-group-permissions-diagram.png "User groups example permissions") +![Ejemplo de permisos de grupos de usuarios](https://cdn.bigprof.com/images/appgini-group-permissions-diagram.png "Ejemplo de permisos de grupos de usuarios") -Organizing users into groups makes it easy to manage permissions without having to set permissions for each user individually. -A user who is assigned to the Sales team group will inherit the permissions assigned to the Sales group, and so on. +Organizar a los usuarios en grupos facilita la gestión de permisos sin tener que establecer permisos para cada usuario individualmente. +Un usuario que está asignado al grupo del equipo de Ventas heredará los permisos asignados al grupo de Ventas, y así sucesivamente. -### Default user groups and the default super admin account +### Grupos de usuarios predeterminados y la cuenta de superadministrador predeterminada -When you create a new AppGini application, it comes with two default user groups: **Admins** and **anonymous**. The Admins group -is assigned full permissions to all tables in the application, while the anonymous group is assigned no permissions by default. +Cuando crea una nueva aplicación AppGini, viene con dos grupos de usuarios predeterminados: **Administradores** y **anónimo**. Al grupo de Administradores +se le asignan permisos completos para todas las tablas de la aplicación, mientras que al grupo anónimo no se le asignan permisos de forma predeterminada. -During [application setup](../working-with-generated-web-database-application/setup.md), you are asked to create an admin user account. -This account is automatically assigned to the Admins group and becomes the **super admin** account. The super admin account has full -permissions to all tables in the application and can manage user groups and permissions. +Durante la [configuración de la aplicación](../working-with-generated-web-database-application/setup.md), se le pide que cree una cuenta de usuario administrador. +Esta cuenta se asigna automáticamente al grupo de Administradores y se convierte en la cuenta de **superadministrador**. La cuenta de superadministrador tiene permisos completos +para todas las tablas de la aplicación y puede administrar grupos de usuarios y permisos. -## Record ownership +## Propiedad de los registros -In addition to user groups, AppGini applications support record ownership. When a user adds a record to a table, they become the **owner** -of that record, and their group becomes the **owner group** of the record. AppGini applications can be configured to provide record -owners (and/or members of the record owner group) with additional permissions, such as the ability to edit or delete their own records. +Además de los grupos de usuarios, las aplicaciones AppGini admiten la propiedad de los registros. Cuando un usuario agrega un registro a una tabla, se convierte en el **propietario** +de ese registro, y su grupo se convierte en el **grupo propietario** del registro. Las aplicaciones AppGini se pueden configurar para proporcionar a los +propietarios de registros (y/o miembros del grupo propietario del registro) permisos adicionales, como la capacidad de editar o eliminar sus propios registros. -Administrators can view and manage record ownership, as well as transfer ownership of records between users and groups. +Los administradores pueden ver y administrar la propiedad de los registros, así como transferir la propiedad de los registros entre usuarios y grupos. -## Configuring user groups and permissions +## Configuración de grupos de usuarios y permisos -You can configure user groups and permissions in your AppGini application by sigining in as the super admin account, -then navigating to the **Admin area**, opening the **Groups** menu and clicking on the **View groups** link. This -would display the **Groups** page, where you can view, add, edit, and delete user groups, as well as send emails -to group members, view group members, and view records owned by each group. +Puede configurar grupos de usuarios y permisos en su aplicación AppGini iniciando sesión como la cuenta de superadministrador, +luego navegando al **Área de administración**, abriendo el menú **Grupos** y haciendo clic en el enlace **Ver grupos**. Esto +mostrará la página **Grupos**, donde puede ver, agregar, editar y eliminar grupos de usuarios, así como enviar correos electrónicos +a los miembros del grupo, ver los miembros del grupo y ver los registros propiedad de cada grupo. -![Groups page](https://cdn.bigprof.com/images/appgini-groups-page-24.15.png "Groups page") +![Página de grupos](https://cdn.bigprof.com/images/appgini-groups-page-24.15.png "Página de grupos") -## Managing groups +## Gestión de grupos -If you click the group name link, or the pencil ✏️ icon to the right of a group row, you can edit the -group's details and permissions (privileges). This will open a page similar to this one below. +Si hace clic en el enlace del nombre del grupo, o en el icono del lápiz ✏️ a la derecha de una fila de grupo, puede editar los +detalles y permisos (privilegios) del grupo. Esto abrirá una página similar a la que se muestra a continuación. -![Editing group permissions in an AppGini application](https://cdn.bigprof.com/images/appgini-edit-group-permissions-24.15.png?1 "Editing group permissions in an AppGini application") +![Edición de permisos de grupo en una aplicación AppGini](https://cdn.bigprof.com/images/appgini-edit-group-permissions-24.15.png?1 "Edición de permisos de grupo en una aplicación AppGini") -Let's take a closer look at the different sections of the group editing page: +Echemos un vistazo más de cerca a las diferentes secciones de la página de edición de grupos: -### Group name -This is the name of the group. You can change it at any time. Use a descriptive name that reflects the role of the group in your application. +### Nombre del grupo +Este es el nombre del grupo. Puede cambiarlo en cualquier momento. Utilice un nombre descriptivo que refleje el rol del grupo en su aplicación. -### Description -This is an optional field where you can provide additional information about the group. +### Descripción +Este es un campo opcional donde puede proporcionar información adicional sobre el grupo. -### View group members -Clicking this button will display a list of all members of the group. You can add or remove members from the group on this page. +### Ver miembros del grupo +Al hacer clic en este botón se mostrará una lista de todos los miembros del grupo. Puede agregar o eliminar miembros del grupo en esta página. -### Add a new member to group -This button allows you to add a new member to the group. +### Agregar un nuevo miembro al grupo +Este botón le permite agregar un nuevo miembro al grupo. -### View group records -Clicking this button will display a list of all records owned by the group. You can view, edit, or delete these records on this page. -You can filter records by table, and you can also sort them creation date, last modification date, ascending or descending. +### Ver registros del grupo +Al hacer clic en este botón se mostrará una lista de todos los registros propiedad del grupo. Puede ver, editar o eliminar estos registros en esta página. +Puede filtrar registros por tabla, y también puede ordenarlos por fecha de creación, fecha de última modificación, ascendente o descendente. -### Allow importing CSV files -If checked, members of this group will be able to [import data from CSV files](importing-exporting-data.md) into the tables they have insert or edit permissions for. +### Permitir la importación de archivos CSV +Si está marcado, los miembros de este grupo podrán [importar datos desde archivos CSV](importing-exporting-data.md) a las tablas para las que tienen permisos de inserción o edición. -### Allow visitors to sign up -This options controls whether visitors to the application can sign up for an account. There are 3 possible values: +### Permitir que los visitantes se registren +Esta opción controla si los visitantes de la aplicación pueden registrarse para obtener una cuenta. Hay 3 valores posibles: -* **No. Only the admin can add users.** Visitors cannot sign up for an account. The admin must add users manually. -* **Yes, and the admin must approve them.** Visitors can sign up for an account, but the admin must approve their account before they can sign in. -* **Yes, and automatically approve them.** Visitors can sign up for an account, and their account is automatically approved. +* **No. Solo el administrador puede agregar usuarios.** Los visitantes no pueden registrarse para obtener una cuenta. El administrador debe agregar usuarios manualmente. +* **Sí, y el administrador debe aprobarlos.** Los visitantes pueden registrarse para obtener una cuenta, pero el administrador debe aprobar su cuenta antes de que puedan iniciar sesión. +* **Sí, y aprobarlos automáticamente.** Los visitantes pueden registrarse para obtener una cuenta, y su cuenta se aprueba automáticamente. -> **Note:** Anonymous visitors to your application will not have the ability to sign up for an account unless -> at least one user group is configured to allow visitors to sign up (with or without admin approval). +> **Nota:** Los visitantes anónimos de su aplicación no tendrán la posibilidad de registrarse para obtener una cuenta a menos que +> al menos un grupo de usuarios esté configurado para permitir que los visitantes se registren (con o sin la aprobación del administrador). -### Permissions +### Permisos -This section allows you to set permissions for the group. Permissions are set separately for each table in the application. -These permissions include the ability to insert, view, edit and delete records in a table. +Esta sección le permite establecer permisos para el grupo. Los permisos se establecen por separado para cada tabla de la aplicación. +Estos permisos incluyen la capacidad de insertar, ver, editar y eliminar registros en una tabla. -When a group has permission to insert records into a table, a member user who inserts a record into that table becomes the owner of that record. -And the group of the member user becomes the owner group of the record. +Cuando un grupo tiene permiso para insertar registros en una tabla, un usuario miembro que inserta un registro en esa tabla se convierte en el propietario de ese registro. +Y el grupo del usuario miembro se convierte en el grupo propietario del registro. -For view, edit and delete permissions, you can choose one of the following options: +Para los permisos de ver, editar y eliminar, puede elegir una de las siguientes opciones: -* **No** - Members of the group won't have that permission at all. -* **Owner** - Members of the group will have that permission only on records they own. -* **Group** - Members of the group will have that permission on all records owned by the group. -* **All** - Members of the group will have that permission on all records in the table. +* **No** - Los miembros del grupo no tendrán ese permiso en absoluto. +* **Propietario** - Los miembros del grupo tendrán ese permiso solo en los registros de los que son propietarios. +* **Grupo** - Los miembros del grupo tendrán ese permiso en todos los registros propiedad del grupo. +* **Todos** - Los miembros del grupo tendrán ese permiso en todos los registros de la tabla. -![Sales group permissions example](https://cdn.bigprof.com/images/appgini-group-permissions-example.png?24.15 "Sales group permissions example") +![Ejemplo de permisos del grupo Ventas](https://cdn.bigprof.com/images/appgini-group-permissions-example.png?24.15 "Ejemplo de permisos del grupo Ventas") -For example, in the above screenshot, members of the "Sales" group can insert records to the "Customers" table -(to define new customers), view all records in the "Customers" table, edit only records they own, and delete only records they own. +Por ejemplo, en la captura de pantalla anterior, los miembros del grupo "Ventas" pueden insertar registros en la tabla "Clientes" +(para definir nuevos clientes), ver todos los registros en la tabla "Clientes", editar solo los registros de los que son propietarios y eliminar solo los registros de los que son propietarios. -The checkmark menu to the right of each permission allows you to set the permission for all tables at once. If you -click the checkmark menu next to the "View" permission for example, you can set the view permission for all tables -to "No", "Owner", "Group", or "All" at once. +El menú de marca de verificación a la derecha de cada permiso le permite establecer el permiso para todas las tablas a la vez. Si +hace clic en el menú de marca de verificación junto al permiso "Ver", por ejemplo, puede establecer el permiso de visualización para todas las tablas +en "No", "Propietario", "Grupo" o "Todos" a la vez. -Similarly, the checkmark menu at the right of each table allows you to set all permissions for that table at once. +Del mismo modo, el menú de marca de verificación a la derecha de cada tabla le permite establecer todos los permisos para esa tabla a la vez. -### Copy permissions from another group +### Copiar permisos de otro grupo -*Available since AppGini 24.14* +*Disponible desde AppGini 24.14* -![Copy permissions from another group](https://cdn.bigprof.com/images/copy-group-permissions.png "Copy permissions from another group") +![Copiar permisos de otro grupo](https://cdn.bigprof.com/images/copy-group-permissions.png "Copiar permisos de otro grupo") -This feature allows you to copy permissions from another group. Select a group from the dropdown list to apply its permissions to the current group. -You can revert to the original permissions by clicking the ❌ icon next to the groups dropdown. +Esta función le permite copiar permisos de otro grupo. Seleccione un grupo de la lista desplegable para aplicar sus permisos al grupo actual. +Puede revertir a los permisos originales haciendo clic en el icono ❌ junto a la lista desplegable de grupos. -### Save changes -After you've made your changes, click the "Save changes" button to save the group settings. +### Guardar cambios +Después de realizar los cambios, haga clic en el botón "Guardar cambios" para guardar la configuración del grupo. -### Adding a new group +### Agregar un nuevo grupo -To add a new group, click the **➕ Add group** button at the top right of the **Groups** page, -or open the **Groups** menu and click the **➕ Add group** link. -This will open a page similar to the group editing page, where you can set the group name, description, permissions, and other settings. +Para agregar un nuevo grupo, haga clic en el botón **➕ Agregar grupo** en la parte superior derecha de la página **Grupos**, +o abra el menú **Grupos** y haga clic en el enlace **➕ Agregar grupo**. +Esto abrirá una página similar a la página de edición de grupos, donde puede establecer el nombre del grupo, la descripción, los permisos y otras configuraciones. -### Deleting a group +### Eliminar un grupo -To delete a group, click the **🗑️ Delete** icon to the right of the group row on the **Groups** page. -If the group has members, this icon will be disabled. You must first remove all members from the group before you can delete it. -The anonymous group and the Admins group cannot be deleted. +Para eliminar un grupo, haga clic en el icono **🗑️ Eliminar** a la derecha de la fila del grupo en la página **Grupos**. +Si el grupo tiene miembros, este icono estará deshabilitado. Primero debe eliminar a todos los miembros del grupo antes de poder eliminarlo. +El grupo anónimo y el grupo de Administradores no se pueden eliminar. -> **Hint:** You can disable anonymous access to your application by removing all permissions from the anonymous group (this is the default setting). +> **Sugerencia:** Puede deshabilitar el acceso anónimo a su aplicación eliminando todos los permisos del grupo anónimo (esta es la configuración predeterminada). -### Sending an email to group members +### Enviar un correo electrónico a los miembros del grupo -To send an email to all members of a group, click the **📧 Email** icon to the right of the group row on the **Groups** page. -This will open a page where you can compose an email to the group members. +Para enviar un correo electrónico a todos los miembros de un grupo, haga clic en el icono **📧 Correo electrónico** a la derecha de la fila del grupo en la página **Grupos**. +Esto abrirá una página donde puede redactar un correo electrónico para los miembros del grupo. -> **TIP!** You can use the **[Messages plugin](https://bigprof.com/appgini/applications/messages-plugin)** to send messages to group members directly from the application. -> The Messages plugin allows you to send messages to individual users, groups, or all users of the application, in a secure and distraction-free environment. +> **¡CONSEJO!** Puede utilizar el **[plugin de Mensajes](https://bigprof.com/appgini/applications/messages-plugin)** para enviar mensajes a los miembros del grupo directamente desde la aplicación. +> El plugin de Mensajes le permite enviar mensajes a usuarios individuales, grupos o todos los usuarios de la aplicación, en un entorno seguro y libre de distracciones. > -> ![Messages plugin](https://cdn.bigprof.com/images/messages/inbox-normal-user-dark.png "Messages plugin") +> ![Plugin de Mensajes](https://cdn.bigprof.com/images/messages/inbox-normal-user-dark.png "Plugin de Mensajes") -## Managing members (users) +## Gestión de miembros (usuarios) -The **Members** menu in the admin area allows you to manage your application's users, add new users, and view users' records. +El menú **Miembros** en el área de administración le permite administrar los usuarios de su aplicación, agregar nuevos usuarios y ver los registros de los usuarios. -![The members menu in the admin area](https://cdn.bigprof.com/images/appgini-members-menu.png?24.15 "The members menu in the admin area") +![El menú de miembros en el área de administración](https://cdn.bigprof.com/images/appgini-members-menu.png?24.15 "El menú de miembros en el área de administración") -If you click the **View Members** link, you will see a list of all members in your application, as shown in the screenshot below. +Si hace clic en el enlace **Ver miembros**, verá una lista de todos los miembros de su aplicación, como se muestra en la captura de pantalla a continuación. -![](https://cdn.bigprof.com/appgini-desktop/help/the-admin-interface-6.png "Managing members in an AppGini application") +![](https://cdn.bigprof.com/appgini-desktop/help/the-admin-interface-6.png "Gestión de miembros en una aplicación AppGini") +Si hace clic en el enlace de un nombre de usuario, o en el icono del lápiz ✏️ a la derecha de la fila de un miembro, puede editar los detalles del miembro. Esto abrirá una página similar a la que se muestra a continuación. -If you click on a username link, or the pencil ✏️ icon to the right of a member row, you can edit the member's details. This would open a page similar to the one below. +![Edición de un miembro en una aplicación AppGini](https://cdn.bigprof.com/images/appgini-edit-member-24.15.png "Edición de un miembro en una aplicación AppGini") -![Editing a member in an AppGini application](https://cdn.bigprof.com/images/appgini-edit-member-24.15.png "Editing a member in an AppGini application") +Puede cambiar el nombre de usuario, la contraseña, el correo electrónico y el grupo del miembro. -You can change the member's username, password, email and group. +El botón **Establecer permisos especiales para este usuario** le permite establecer permisos especiales para este usuario. Esto es útil si desea otorgar +a un usuario permisos especiales que son diferentes de los permisos del grupo al que pertenece. -The **Set special permissions for this user** button allows you to set special permissions for this user. This is useful if you want to give -a user special permissions that are different from the permissions of the group they belong to. +### Aprobar/bloquear miembros -### Approving/banning members +Desmarcar la casilla de verificación **Aprobado** o marcar la casilla de verificación **Bloqueado** evitará que el usuario inicie sesión. +La diferencia entre los dos es sutil, y solo indica el estado del usuario. Un usuario no aprobado es un usuario que se ha registrado +pero que aún no ha sido aprobado por el administrador. Un usuario bloqueado es un usuario que ha sido bloqueado por el administrador. Pero el resultado es el mismo: el usuario no puede iniciar sesión. -Unchecking the **Approved** checkbox or checking the **Banned** checkbox will prevent the user from signing in. -The difference between the two is subtle, and just indicates the status of the user. An unapproved user is a user who has signed up -but has not been approved by the admin yet. A banned user is a user who has been banned by the admin. But the result is the same: the user cannot sign in. +### Campos personalizados -### Custom fields +Las aplicaciones AppGini proporcionan un conjunto de campos personalizados que puede utilizar para almacenar información adicional sobre los usuarios. +De forma predeterminada, estos campos están etiquetados como **Nombre completo**, **Dirección**, **Ciudad** y **Estado**. Puede cambiar estas etiquetas para que coincidan con los requisitos de su aplicación. +Para ello, abra el **Área de administración** » menú **Utilidades** » **Configuración de administración**. Luego haga clic en la pestaña **Registro**. Desde allí, puede cambiar las etiquetas de los campos personalizados. -AppGini applications provide a set of custom fields that you can use to store additional information about users. -By default, these fields are labeled as **Full Name**, **Address**, **City**, and **State**. You can change these labels to match your application's requirements. -To do this, open the **Admin Area** » **Utilities** menu » **Admin settings**. Then click the **Sign up** tab. From there, you can change the labels of the custom fields. +### Campo de comentarios -### Comments field +El campo **Comentarios** es un campo especial que le permite almacenar información adicional sobre un usuario. +Este campo no se muestra al usuario y está destinado únicamente al uso del administrador. -The **Comments** field is a special field that allows you to store additional information about a user. -This field is not displayed to the user and is intended for admin use only. +### Ver registros del miembro -### View member's records +Al hacer clic en el enlace **Ver registros del miembro** se mostrará una lista de todos los registros propiedad del miembro. Puede ver los datos sin procesar de cada registro, +o eliminar estos registros en esta página. También puede asignar registros a otro usuario o grupo. -Clicking the **View member's records** link will display a list of all records owned by the member. You can view each record's raw data, -or delete these records on this page. You can also assign records to another user or group. +### Enviar mensaje al miembro -### Send message to member +Al hacer clic en el enlace **Enviar mensaje al miembro** se abrirá una página donde puede redactar un correo electrónico para el miembro. -Clicking the **Send message to member** link will open a page where you can compose an email to the member. +### Eliminar miembro -### Delete member +Al hacer clic en el icono **🗑 Eliminar** a la derecha de la fila del miembro en la página **Miembros** se mostrará un mensaje pidiéndole que +confirme si desea eliminar a ese usuario. El usuario superadministrador y el usuario invitado no se pueden eliminar. -Clicking the **🗑 Delete** icon to the right of the member row in the **Members** page would display a message asking you to -confirm whether you want to delete that user. The super admin user as well as the guest user can't be deleted. +> **Sugerencia:** Puede deshabilitar el acceso de invitados a su aplicación eliminando todos los permisos del grupo anónimo (esta es la configuración predeterminada). -> **Hint:** You can disable guest access to your application by removing all permissions from the anonymous group (this is the default setting). +## Gestión de la propiedad de los registros -## Managing record ownership +La interfaz de administración le permite ver todos los registros ingresados por cualquier miembro +o grupo. Haga clic en el enlace 'Ver registros de miembros' en la parte superior de la +página de inicio de administración. Esto mostrará una página similar a la que se muestra a continuación. -The admin interface allows you to view all records entered by any member -or group. Click the 'View Members' Records' link on the top of the -admin homepage. This will display a page similar to the one below. +![](https://cdn.bigprof.com/appgini-desktop/help/the-admin-interface-8.png "Gestión de registros en una aplicación AppGini") +Si hace clic en el icono 'Editar' a la izquierda de cualquier registro, puede ver +todos los datos de ese registro, y también puede editar la propiedad del registro. +Esto abrirá una página similar a la que se muestra a continuación. -![](https://cdn.bigprof.com/appgini-desktop/help/the-admin-interface-8.png "Managing records in an AppGini application") +![](https://cdn.bigprof.com/screencasts/admin-area-edit-record-ownership.png "Edición de la propiedad de los registros en una aplicación AppGini") +### Asistente de transferencia por lotes -If you click the 'Edit' icon to the left of any record, you can view -all the data in that record, and you can also edit the record ownership. -This will open a page similar to the one below. +Si desea cambiar la propiedad de varios registros a la vez, debe +utilizar el **Asistente de transferencia por lotes** en lugar de la página anterior. +Haga clic en el enlace **Transferencia por lotes de propiedad** del menú **Utilidades** +en el área de administración y siga las instrucciones del asistente. +El 'Asistente de transferencia por lotes' también le permite: -![](https://cdn.bigprof.com/screencasts/admin-area-edit-record-ownership.png "Editing record ownership in an AppGini application") +* Transferir registros de un usuario a otro. +* Transferir registros de un grupo a otro. +* Mover un usuario y todos sus registros a otro grupo. -### Batch Transfer Wizard +### Propiedad automática de registros -If you want to change the ownership of multiple records at once, you -should use the **Batch Transfer Wizard** instead of the above page. -Click on the **Batch Transfer Of Ownership** link from the **Utilities** -menu in the admin area and follow the wizard instructions. +De forma predeterminada, las aplicaciones AppGini están configuradas para asignar automáticamente la propiedad de los registros al usuario que inserta un registro. +Sin embargo, puede cambiar este comportamiento y establecer el propietario del registro como el propietario del registro principal. Esto es útil en los casos en los que +tiene una relación padre-hijo entre tablas y desea que los registros secundarios hereden el propietario del registro principal. -The 'Batch Transfer Wizard' allows you also to: +Para obtener más información sobre la configuración de la propiedad automática de registros, consulte la página [Propiedad automatizada de registros](../record-owners.md). -* Transfer records from one user to another. -* Transfer records from one group to another. -* Move a user and all their records to another group. +### Cambiar el propietario de un registro desde el área de usuarios -### Automatic record ownership +Si inicia sesión en su aplicación como el usuario superadministrador y explora cualquier registro de tabla en la aplicación, +verá un botón con 3 puntos verticales en la parte superior derecha de la página de detalles del registro, etiquetado como "Información de administrador". +Al hacer clic en este botón se mostrará un menú desplegable que enumera el propietario del registro y el grupo propietario. Puede hacer clic en el enlace "Cambiar propietario" +para cambiar el propietario del registro a otro usuario o grupo. -By default, AppGini applications are configured to automatically assign record ownership to the user who inserts a record. -However, you can change this behavior and set the record owner to the owner of the parent record. This is useful in cases where -you have a parent-child relationship between tables and you want the child records to inherit the owner of the parent record. +![Cambiar el propietario de un registro desde el área de usuarios](https://cdn.bigprof.com/images/admin-info-menu.png "Cambiar el propietario de un registro desde el área de usuarios") -For more information on configuring automatic record ownership, see the [Automated record ownership](../record-owners.md) page. - -### Changing a record owner from the users area - -If you sign in to your application as the super admin user, and browse any table record in the application, -you will see a button with 3 vertical dots at the top right of the record details page, labeled "Admin information". -Clicking this button will display a dropdown listing the record owner and the owner group. You can click the "Change owner" link -to change the record owner to another user or group. - -![Changing a record owner from the users area](https://cdn.bigprof.com/images/admin-info-menu.png "Changing a record owner from the users area") - -You can also change the record owner for multiple records at once. To do this, navigate to the table view of -the relevant table, select the records you want to change the owner for, open the **More** dropdown menu at the top of the table, -and click the **Change owner** link. - -![Changing a record owner for multiple records at once](https://cdn.bigprof.com/images/change-owner-multiple-records.png "Changing a record owner for multiple records at once") +También puede cambiar el propietario del registro para varios registros a la vez. Para ello, navegue a la vista de tabla de +la tabla correspondiente, seleccione los registros para los que desea cambiar el propietario, abra el menú desplegable **Más** en la parte superior de la tabla, +y haga clic en el enlace **Cambiar propietario**. +![Cambiar el propietario de un registro para varios registros a la vez](https://cdn.bigprof.com/images/change-owner-multiple-records.png "Cambiar el propietario de un registro para varios registros a la vez") diff --git a/pages/application-features/date-datetime-offsets.md b/pages/application-features/date-datetime-offsets.md index a2618dc..4b8fb75 100644 --- a/pages/application-features/date-datetime-offsets.md +++ b/pages/application-features/date-datetime-offsets.md @@ -1,54 +1,53 @@ --- -title: Date and datetime offsets -linkTitle: Date and datetime offsets +title: Desplazamientos de fecha y fecha y hora +linkTitle: Desplazamientos de fecha y fecha y hora slug: help/application-features/date-datetime-offsets -description: Using fixed and relative date and datetime values as default values in date, datetime, and timestamp fields in AppGini. -keywords: date, datetime, timestamp, default value, relative date, relative datetime, fixed date, fixed datetime +description: Uso de valores de fecha y fecha y hora fijos y relativos como valores predeterminados en los campos de fecha, fecha y hora y marca de tiempo en AppGini. +keywords: fecha, fecha y hora, marca de tiempo, valor predeterminado, fecha relativa, fecha y hora relativa, fecha fija, fecha y hora fija --- -# Date and datetime offsets +# Desplazamientos de fecha y fecha y hora -## Setting fixed date and datetime values as default +## Establecer valores fijos de fecha y fecha y hora como predeterminados -When you set a date or datetime field in AppGini, you can specify a default value for it. This default value can be a fixed date or datetime, or it can be a relative date or datetime. Relative dates and datetimes are calculated based on the current date and time when the record is saved. +Cuando establece un campo de fecha o fecha y hora en AppGini, puede especificar un valor predeterminado para él. Este valor predeterminado puede ser una fecha o fecha y hora fija, o puede ser una fecha o fecha y hora relativa. Las fechas y fechas y horas relativas se calculan en función de la fecha y hora actuales cuando se guarda el registro. -Specifying a fixed date or datetime is straightforward. You simply enter the desired date or datetime in the field's default value property. For example, you can enter `2020-01-01` to set the default date to January 1, 2020, or `2020-01-01 12:00:00` to set the default datetime to January 1, 2020, 12:00 PM. +Especificar una fecha o fecha y hora fija es sencillo. Simplemente ingrese la fecha o fecha y hora deseadas en la propiedad de valor predeterminado del campo. Por ejemplo, puede ingresar `2020-01-01` para establecer la fecha predeterminada en el 1 de enero de 2020, o `2020-01-01 12:00:00` para establecer la fecha y hora predeterminada en el 1 de enero de 2020 a las 12:00 PM. -However, this is usually not very useful, as you'd typically want to set the default date or datetime to a value relative to the current date and time. For example, you might want to set the default fulfillment date of an order to 7 days from the current date, or you might want to set the default expiration date of a subscription to 30 days from the current date. +Sin embargo, esto generalmente no es muy útil, ya que normalmente querrá establecer la fecha o fecha y hora predeterminada en un valor relativo a la fecha y hora actuales. Por ejemplo, es posible que desee establecer la fecha de cumplimiento predeterminada de un pedido en 7 días a partir de la fecha actual, o es posible que desee establecer la fecha de vencimiento predeterminada de una suscripción en 30 días a partir de la fecha actual. -## Relative date offsets +## Desplazamientos de fecha relativos -For date fields, you can specify a relative date offset in the **Default** property. The offset can be a postive or negative integer. Positive integers represent future dates, with `1` representing today, `2` representing tomorrow, and so on. Negative integers represent past dates, with `-1` representing yesterday, `-2` representing the day before yesterday, and so on. +Para los campos de fecha, puede especificar un desplazamiento de fecha relativo en la propiedad **Predeterminado**. El desplazamiento puede ser un entero positivo o negativo. Los enteros positivos representan fechas futuras, siendo `1` hoy, `2` mañana, y así sucesivamente. Los enteros negativos representan fechas pasadas, siendo `-1` ayer, `-2` anteayer, y así sucesivamente. -For example, to set the default value of a date field to 7 days from the current date, you can enter `8` in the **Default** property. This is because `1` represents today, and `8` represents 7 days from today. +Por ejemplo, para establecer el valor predeterminado de un campo de fecha en 7 días a partir de la fecha actual, puede ingresar `8` en la propiedad **Predeterminado**. Esto se debe a que `1` representa hoy, y `8` representa 7 días a partir de hoy. -## Relative datetime offsets +## Desplazamientos de fecha y hora relativos -> **Note**: This feature is available starting from AppGini 24.14 +> **Nota**: Esta función está disponible a partir de AppGini 24.14 -For datetime and timestamp fields, you can specify a relative datetime offset in the **Default** property. The offset can be a postive or negative integer, followed by one of the following characters: +Para los campos de fecha y hora y marca de tiempo, puede especificar un desplazamiento de fecha y hora relativo en la propiedad **Predeterminado**. El desplazamiento puede ser un entero positivo o negativo, seguido de uno de los siguientes caracteres: -- `s`: seconds, e.g., `+5s` for 5 seconds from now, or `-5s` for 5 seconds ago. -- `m`: minutes, e.g., `+5m` for 5 minutes from now, or `-5m` for 5 minutes ago. -- `h`: hours, e.g., `+5h` for 5 hours from now, or `-5h` for 5 hours ago. -- `d`: days, e.g., `+5d` for 5 days from now, or `-5d` for 5 days ago. +- `s`: segundos, por ejemplo, `+5s` para 5 segundos a partir de ahora, o `-5s` para hace 5 segundos. +- `m`: minutos, por ejemplo, `+5m` para 5 minutos a partir de ahora, o `-5m` para hace 5 minutos. +- `h`: horas, por ejemplo, `+5h` para 5 horas a partir de ahora, o `-5h` para hace 5 horas. +- `d`: días, por ejemplo, `+5d` para 5 días a partir de ahora, o `-5d` para hace 5 días. -If you want to set the default value of a datetime field to now, you can enter `+0s` in the **Default** property. +Si desea establecer el valor predeterminado de un campo de fecha y hora en ahora, puede ingresar `+0s` en la propiedad **Predeterminado**. -### Offset to an exact minute, hour, or day +### Desplazamiento a un minuto, hora o día exactos -If you want to set the default value of a datetime field to an exact minute (setting seconds to `00`), -hour (setting minutes and seconds to `00:00`), or day (setting hours, minutes, and seconds to `00:00:00`), -just append a `0` to the offset. +Si desea establecer el valor predeterminado de un campo de fecha y hora en un minuto exacto (estableciendo los segundos en `00`), +hora (estableciendo los minutos y segundos en `00:00`), o día (estableciendo las horas, minutos y segundos en `00:00:00`), +simplemente agregue un `0` al desplazamiento. -For example, to set the default value of a datetime field to the next -hour, you can enter `+1h0` in the **Default** property. If the current time is `12:30:15`, this will set the default value to `13:00:00`. +Por ejemplo, para establecer el valor predeterminado de un campo de fecha y hora en la próxima +hora, puede ingresar `+1h0` en la propiedad **Predeterminado**. Si la hora actual es `12:30:15`, esto establecerá el valor predeterminado en `13:00:00`. -Similarly, to set the default value of a datetime field to the next day at midnight, you can enter `+1d0` in the **Default** property. -If the current date and time is `2024-05-15 12:30:15`, this will set the default value to `2024-05-16 00:00:00`. +Del mismo modo, para establecer el valor predeterminado de un campo de fecha y hora en el día siguiente a la medianoche, puede ingresar `+1d0` en la propiedad **Predeterminado**. +Si la fecha y hora actuales son `2024-05-15 12:30:15`, esto establecerá el valor predeterminado en `2024-05-16 00:00:00`. -In the example screenshot below, we're setting the default value of the transaction date to `+0m0`, which means the current date and time -to the minute (with seconds set to `00`). - -![Setting default datetime to now](https://cdn.bigprof.com/images/set-default-datetime-to-now.png "Setting default datetime to now, to the minute") +En la captura de pantalla de ejemplo a continuación, estamos configurando el valor predeterminado de la fecha de la transacción en `+0m0`, lo que significa la fecha y hora actuales +al minuto (con los segundos establecidos en `00`). +![Establecer fecha y hora predeterminadas en ahora](https://cdn.bigprof.com/images/set-default-datetime-to-now.png "Establecer fecha y hora predeterminadas en ahora, al minuto") diff --git a/pages/application-features/i18n-internationalization.md b/pages/application-features/i18n-internationalization.md index 64d2a3c..d0641a0 100644 --- a/pages/application-features/i18n-internationalization.md +++ b/pages/application-features/i18n-internationalization.md @@ -1,119 +1,119 @@ --- -title: Internationalization (i18n) and localizing your AppGini app -linkTitle: Internationalization (i18n) +title: Internacionalización (i18n) y localización de su aplicación AppGini +linkTitle: Internacionalización (i18n) slug: help/application-features/i18n-internationalization -description: Learn how to localize your AppGini app to any language you want, including translating the app interface, table and field names, and more. -keywords: internationalization, i18n, localization, language, translate, translation, localizing, localisation, appgini, app, application, table, field, name, title, interface, detail view, home page, group, title, application title, child table, tab, column, programmatically, access, localized, strings +description: Aprenda cómo localizar su aplicación AppGini a cualquier idioma que desee, incluida la traducción de la interfaz de la aplicación, los nombres de tablas y campos, y más. +keywords: internacionalización, i18n, localización, idioma, traducir, traducción, localizar, appgini, app, aplicación, tabla, campo, nombre, título, interfaz, vista detallada, página de inicio, grupo, título, título de la aplicación, tabla secundaria, pestaña, columna, programáticamente, acceso, cadenas localizadas --- -# Internationalization (i18n) and localizing your AppGini app +# Internacionalización (i18n) y localización de su aplicación AppGini -AppGini applications are internationalization-ready, meaning you can easily localize your app to any language you want. -This is done by translating the generated `language.php` file, which contains all the strings used in your app interface. +Las aplicaciones AppGini están preparadas para la internacionalización, lo que significa que puede localizar fácilmente su aplicación a cualquier idioma que desee. +Esto se hace traduciendo el archivo `language.php` generado, que contiene todas las cadenas utilizadas en la interfaz de su aplicación. -> AppGini provides a built-in translation tool to help you with this task as we'll see below. -> So you should not manually edit the `language.php` file. +> AppGini proporciona una herramienta de traducción integrada para ayudarlo con esta tarea, como veremos a continuación. +> Por lo tanto, no debe editar manualmente el archivo `language.php`. -In this page, we'll discuss how to localize your AppGini app to a new language. We'll also discuss how -to localize able and field names, which are not included in the `language.php` file. +En esta página, analizaremos cómo localizar su aplicación AppGini a un nuevo idioma. También analizaremos cómo +localizar nombres de tablas y campos, que no están incluidos en el archivo `language.php`. -## Localizing your app interface (`language.php`) +## Localización de la interfaz de su aplicación (`language.php`) -### Downloading a pre-translated language file +### Descarga de un archivo de idioma pretraducido -AppGini users have contributed translations to many languages. -These are available for download from the [language files page](https://bigprof.com/appgini/download-language-files). -check that page to see if a translation for your desired language is already available. If it is, you can download it -into your application's main directory, replacing the existing `language.php` file. +Los usuarios de AppGini han contribuido con traducciones a muchos idiomas. +Están disponibles para descargar desde la [página de archivos de idioma](https://bigprof.com/appgini/download-language-files). +Consulte esa página para ver si ya hay disponible una traducción para el idioma deseado. Si es así, puede descargarla +en el directorio principal de su aplicación, reemplazando el archivo `language.php` existente. -As we introduce new features and strings in AppGini, the language file might become incomplete, -so you might need to update it from time to time. +A medida que introducimos nuevas funciones y cadenas en AppGini, el archivo de idioma puede quedar incompleto, +por lo que es posible que deba actualizarlo de vez en cuando. -In case you need to translate your app to a language that is not available in the language files page, -or if you need to update an existing translation, you can use the built-in translation tool in AppGini. +En caso de que necesite traducir su aplicación a un idioma que no está disponible en la página de archivos de idioma, +o si necesita actualizar una traducción existente, puede utilizar la herramienta de traducción integrada en AppGini. -### Using the built-in translation tool +### Uso de la herramienta de traducción integrada -Starting with AppGini 22.11, we've added a built-in translation tool to help you translate your app to any language you want. -To use this tool, follow these steps: +A partir de AppGini 22.11, hemos agregado una herramienta de traducción integrada para ayudarlo a traducir su aplicación a cualquier idioma que desee. +Para utilizar esta herramienta, siga estos pasos: -1. Sign in to your application as admin. -2. Click the 'Admin area' link at the top of the page. -3. Open the 'Utilities' menu and click 'Translation tool'. +1. Inicie sesión en su aplicación como administrador. +2. Haga clic en el enlace 'Área de administración' en la parte superior de la página. +3. Abra el menú 'Utilidades' y haga clic en 'Herramienta de traducción'. -Here is a video showing how to use the translation tool: +Aquí hay un video que muestra cómo usar la herramienta de traducción: <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/appgini-22.11-translation-tool.mp4" type="video/mp4"> - Your browser does not support the video tag. + Su navegador no es compatible con la etiqueta de video. </video> -In the above video, we're translating the words 'Admin area' into the Arabic words 'منطقة الإدارة'. +En el video anterior, estamos traduciendo las palabras 'Admin area' a las palabras árabes 'منطقة الإدارة'. -### Language fallback +### Reserva de idioma -If a string is not found in the `language.php` file, AppGini will fall back to the English string, -which is included in the generated `defaultLang.php` file. +Si no se encuentra una cadena en el archivo `language.php`, AppGini recurrirá a la cadena en inglés, +que se incluye en el archivo `defaultLang.php` generado. -## Right to left (RTL) languages +## Idiomas de derecha a izquierda (RTL) -AppGini supports right-to-left (RTL) languages, such as Arabic and Hebrew. -To enable RTL support in your app, open your application's project file in AppGini, -click the 'Application theme' icon in the toolbar, and check the 'RTL' checkbox. +AppGini admite idiomas de derecha a izquierda (RTL), como el árabe y el hebreo. +Para habilitar la compatibilidad con RTL en su aplicación, abra el archivo de proyecto de su aplicación en AppGini, +haga clic en el icono 'Tema de la aplicación' en la barra de herramientas y marque la casilla de verificación 'RTL'. -![Enable RTL support in your app](https://cdn.bigprof.com/images/enable-rtl-layout.png "Enable RTL support in your app") +![Habilitar compatibilidad con RTL en su aplicación](https://cdn.bigprof.com/images/enable-rtl-layout.png "Habilitar compatibilidad con RTL en su aplicación") -## Localizing table and field names +## Localización de nombres de tablas y campos -The `language.php` file contains strings used in the app interface, such as buttons, labels, and messages. -However, it does not contain table and field names. To localize these, you can open the AXP project file in AppGini, -click on the table or field you want to localize, and enter the localized name in the 'Caption' box. +El archivo `language.php` contiene cadenas utilizadas en la interfaz de la aplicación, como botones, etiquetas y mensajes. +Sin embargo, no contiene nombres de tablas y campos. Para localizarlos, puede abrir el archivo de proyecto AXP en AppGini, +hacer clic en la tabla o campo que desea localizar e ingresar el nombre localizado en el cuadro 'Título'. -![Localizing table and field names](https://cdn.bigprof.com/images/localize-table-field-names.png "Localizing table and field names") +![Localización de nombres de tablas y campos](https://cdn.bigprof.com/images/localize-table-field-names.png "Localización de nombres de tablas y campos") -## Localizing the detail view (record editing form) title +## Localización del título de la vista detallada (formulario de edición de registros) -By default, the title of the detail view (record editing form) is 'Detail view'. You can localize this title -by opening the AXP project file in AppGini, clicking the table you want to localize, and entering the localized -title in the 'Detail view title' box. See the screenshot below: +De forma predeterminada, el título de la vista detallada (formulario de edición de registros) es 'Vista detallada'. Puede localizar este título +abriendo el archivo de proyecto AXP en AppGini, haciendo clic en la tabla que desea localizar e ingresando el título localizado +en el cuadro 'Título de la vista detallada'. Vea la captura de pantalla a continuación: -![How to change the detail view title](https://cdn.bigprof.com/images/detail-view-title.png "How to change the detail view title") +![Cómo cambiar el título de la vista detallada](https://cdn.bigprof.com/images/detail-view-title.png "Cómo cambiar el título de la vista detallada") -And here is the detail view of the orders table with the localized German title 'Bestelldetails': +Y aquí está la vista detallada de la tabla de pedidos con el título localizado en alemán 'Bestelldetails': -![Detail view with localized title](https://cdn.bigprof.com/images/detail-view-localized-title.png "Detail view with localized title") +![Vista detallada con título localizado](https://cdn.bigprof.com/images/detail-view-localized-title.png "Vista detallada con título localizado") -## Localizing the home page table group titles +## Localización de los títulos de los grupos de tablas de la página de inicio -AppGini allows you to group similar tables under a common title in the home page. -This makes it easier for users to navigate your app. You can use localized titles for these groups. -To set the table group title: +AppGini le permite agrupar tablas similares bajo un título común en la página de inicio. +Esto facilita a los usuarios la navegación por su aplicación. Puede utilizar títulos localizados para estos grupos. +Para establecer el título del grupo de tablas: -1. Open the AXP project file in AppGini. -2. Click the table you want to localize. -3. Click the button titled 'Table group' to open the 'Table groups' dialog. -4. Click the table group you want to localize. -5. Press **`F2`** or the 'Rename' button to rename the group. +1. Abra el archivo de proyecto AXP en AppGini. +2. Haga clic en la tabla que desea localizar. +3. Haga clic en el botón titulado 'Grupo de tablas' para abrir el cuadro de diálogo 'Grupos de tablas'. +4. Haga clic en el grupo de tablas que desea localizar. +5. Presione **`F2`** o el botón 'Renombrar' para renombrar el grupo. -![Localizing table group titles](https://cdn.bigprof.com/images/localize-table-group-titles.png "Localizing table group titles") +![Localización de títulos de grupos de tablas](https://cdn.bigprof.com/images/localize-table-group-titles.png "Localización de títulos de grupos de tablas") -Here is the home page of the app with the table group title localized to Greek: +Aquí está la página de inicio de la aplicación con el título del grupo de tablas localizado al griego: -![Home page with localized table group title](https://cdn.bigprof.com/images/home-page-localized-table-group-title.png "Home page with localized table group title") +![Página de inicio con título de grupo de tablas localizado](https://cdn.bigprof.com/images/home-page-localized-table-group-title.png "Página de inicio con título de grupo de tablas localizado") -> **Note**: After renaming the table group to some non-Latin characters, you might see question marks or other unexpected characters in the group title -> in AppGini. This is a known issue in AppGini and does not affect the actual display of the group title in the app. +> **Nota**: Después de cambiar el nombre del grupo de tablas a algunos caracteres no latinos, es posible que vea signos de interrogación u otros caracteres inesperados en el título del grupo +> en AppGini. Este es un problema conocido en AppGini y no afecta la visualización real del título del grupo en la aplicación. -## Localizing the application title +## Localización del título de la aplicación -The application title is displayed in the browser's title bar and in the top-left corner of the app. -You can set it to a localized title by opening the AXP project file in AppGini, clicking the topmost node -in the project browser tree at the left, then pressing **`F2`** to rename the application. Underscores in the application name -will be replaced with spaces in the displayed title. +El título de la aplicación se muestra en la barra de título del navegador y en la esquina superior izquierda de la aplicación. +Puede establecerlo en un título localizado abriendo el archivo de proyecto AXP en AppGini, haciendo clic en el nodo superior +en el árbol del explorador de proyectos a la izquierda, luego presionando **`F2`** para cambiar el nombre de la aplicación. Los guiones bajos en el nombre de la aplicación +se reemplazarán con espacios en el título mostrado. -Non-Latin characters in the application title would cause an error message and won't be accepted by AppGini. -As a workaround, you can set the application title to a Latin name, then, after generating the app, you can -edit the generated `hooks/header-extras.php` or `hooks/footer-extras.php` and add the following code: +Los caracteres no latinos en el título de la aplicación provocarán un mensaje de error y AppGini no los aceptará. +Como solución alternativa, puede establecer el título de la aplicación en un nombre latino, luego, después de generar la aplicación, puede +editar el archivo `hooks/header-extras.php` o `hooks/footer-extras.php` generado y agregar el siguiente código: ```html <script> @@ -123,52 +123,50 @@ edit the generated `hooks/header-extras.php` or `hooks/footer-extras.php` and ad </script> ``` -Replace the Greek text in the `appTitle` variable with your localized application title. Here is the result of the above code: +Reemplace el texto griego en la variable `appTitle` con el título de su aplicación localizado. Aquí está el resultado del código anterior: -![Home page with localized table group title](https://cdn.bigprof.com/images/home-page-localized-table-group-title.png "Home page with localized table group title") +![Página de inicio con título de grupo de tablas localizado](https://cdn.bigprof.com/images/home-page-localized-table-group-title.png "Página de inicio con título de grupo de tablas localizado") -## Localizing the titles of child tables +## Localización de los títulos de las tablas secundarias -When you have a parent table with child tables, for example, a parent table `shippers` with a child table `orders`, -you can configure the `shippers` table to display the child orders as a tab in the detail view as shown below: +Cuando tiene una tabla principal con tablas secundarias, por ejemplo, una tabla principal `transportistas` con una tabla secundaria `pedidos`, +puede configurar la tabla `transportistas` para mostrar los pedidos secundarios como una pestaña en la vista detallada como se muestra a continuación: -![Child table as a tab in the detail view](https://cdn.bigprof.com/images/child-table-as-tab.png "Child table as a tab in the detail view") +![Tabla secundaria como pestaña en la vista detallada](https://cdn.bigprof.com/images/child-table-as-tab.png "Tabla secundaria como pestaña en la vista detallada") -You can also display the count of child orders as a column in the parent shippers table as shown below: +También puede mostrar el recuento de pedidos secundarios como una columna en la tabla principal de transportistas como se muestra a continuación: -![Child table count as a column in the parent table](https://cdn.bigprof.com/images/child-table-count-as-column.png "Child table count as a column in the parent table") +![Recuento de tablas secundarias como columna en la tabla principal](https://cdn.bigprof.com/images/child-table-count-as-column.png "Recuento de tablas secundarias como columna en la tabla principal") -For both of the above screenshots, the title of the child orders table is set as 'Orders via shipper'. We can localize this title -by opening the AXP project file in AppGini, clicking the parent table (in this case, `shippers`), then clicking the **Parent/children settings** -button to open the **Parent/children settings** dialog. +Para ambas capturas de pantalla anteriores, el título de la tabla de pedidos secundarios se establece como 'Pedidos a través del transportista'. Podemos localizar este título +abriendo el archivo de proyecto AXP en AppGini, haciendo clic en la tabla principal (en este caso, `transportistas`), luego haciendo clic en el botón **Configuración de padre/hijo** +para abrir el cuadro de diálogo **Configuración de padre/hijo**. -![Opening the parent/children settings dialog](https://cdn.bigprof.com/images/parent-children-settings.png "Opening the parent/children settings dialog") +![Apertura del cuadro de diálogo de configuración de padre/hijo](https://cdn.bigprof.com/images/parent-children-settings.png "Apertura del cuadro de diálogo de configuración de padre/hijo") -Click the desired child table from the grid at the left if not already selected, then enter the localized title in the **Tab/Column title** box. +Haga clic en la tabla secundaria deseada de la cuadrícula de la izquierda si aún no está seleccionada, luego ingrese el título localizado en el cuadro **Título de pestaña/columna**. -> **Note**: If the title contains non-Latin characters, you might see question marks or other unexpected characters in the title in the grid. -> This is a known issue in AppGini and does not affect the actual display of the title in the app. +> **Nota**: Si el título contiene caracteres no latinos, es posible que vea signos de interrogación u otros caracteres inesperados en el título en la cuadrícula. +> Este es un problema conocido en AppGini y no afecta la visualización real del título en la aplicación. -## Programmatically accessing localized strings +## Acceso programático a cadenas localizadas -You can access localized strings in your hooks using the PHP variable `$Translation`. This is an associative array -where the keys are English strings/short codes and the values are the localized strings. This variable is defined -in `language.php` and can be made available inside any PHP hook function by including the following line at the top of the function: +Puede acceder a cadenas localizadas en sus hooks utilizando la variable PHP `$Translation`. Esta es una matriz asociativa +donde las claves son cadenas/códigos cortos en inglés y los valores son las cadenas localizadas. Esta variable está definida +en `language.php` y puede estar disponible dentro de cualquier función hook de PHP incluyendo la siguiente línea en la parte superior de la función: ```php global $Translation; ``` -You can then access any localized string by its English string/short code as follows: +Luego puede acceder a cualquier cadena localizada por su cadena/código corto en inglés de la siguiente manera: ```php -echo $Translation['last modified']; // --> 'zuletzt geändert' in German +echo $Translation['last modified']; // --> 'zuletzt geändert' en alemán ``` -You can also access localized strings using the `AppGini.Translate._map` JavaScript object. For example: +También puede acceder a cadenas localizadas utilizando el objeto JavaScript `AppGini.Translate._map`. Por ejemplo: ```javascript -console.log(AppGini.Translate._map['last modified']); // --> 'zuletzt geändert' in German +console.log(AppGini.Translate._map['last modified']); // --> 'zuletzt geändert' en alemán ``` - - diff --git a/pages/application-features/importing-exporting-data.md b/pages/application-features/importing-exporting-data.md index bfd9aee..fe6c10e 100644 --- a/pages/application-features/importing-exporting-data.md +++ b/pages/application-features/importing-exporting-data.md @@ -1,14 +1,14 @@ --- -title: Importing and exporting data -linkTitle: Importing and exporting data +title: Importación y exportación de datos +linkTitle: Importación y exportación de datos slug: help/application-features/importing-exporting-data description: keywords: --- -# Importing and exporting data +# Importación y exportación de datos -AppGini applications provide a simple way to import data from CSV files and export data to CSV files. -This section provides an overview of the importing and exporting data features in AppGini applications. +Las aplicaciones AppGini proporcionan una forma sencilla de importar datos desde archivos CSV y exportar datos a archivos CSV. +Esta sección proporciona una descripción general de las funciones de importación y exportación de datos en las aplicaciones AppGini. -***[TODO]*** +***[POR HACER]*** diff --git a/pages/application-features/index.md b/pages/application-features/index.md index 974f1ed..6eb966d 100644 --- a/pages/application-features/index.md +++ b/pages/application-features/index.md @@ -1,23 +1,22 @@ --- -title: Detailed overview of AppGini and generated application features -linkTitle: App features +title: Descripción detallada de las características de AppGini y de las aplicaciones generadas +linkTitle: Características de la aplicación slug: help/application-features -description: Detailed overview of AppGini and generated application features. -keywords: appgini, features, overview, generated application, app features +description: Descripción detallada de las características de AppGini y de las aplicaciones generadas. +keywords: appgini, características, descripción general, aplicación generada, características de la aplicación --- -# Detailed overview of AppGini and generated application features +# Descripción detallada de las características de AppGini y de las aplicaciones generadas -The following section provides a detailed overview of the features of AppGini and the applications it generates. -This is a work in progress and will be updated regularly. +La siguiente sección proporciona una descripción detallada de las características de AppGini y de las aplicaciones que genera. +Esto es un trabajo en progreso y se actualizará regularmente. -## Available topics - -- [Collaboration and multi-user support](collaboration-multi-users.md) -- [Date and datetime offsets](date-datetime-offsets.md) -- [Internationalization](i18n-internationalization.md) -- [Input types](input-types.md) -- [LDAP authentication](../ldap-authentication.md) -- [Automated record ownership](../record-owners.md) -- [Calculated fields](../calculated-fields.md) +## Temas disponibles +- [Colaboración y soporte multiusuario](collaboration-multi-users.md) +- [Desplazamientos de fecha y fecha y hora](date-datetime-offsets.md) +- [Internacionalización](i18n-internationalization.md) +- [Tipos de entrada](input-types.md) +- [Autenticación LDAP](../ldap-authentication.md) +- [Propiedad automatizada de registros](../record-owners.md) +- [Campos calculados](../calculated-fields.md) diff --git a/pages/application-features/input-types.md b/pages/application-features/input-types.md index 48bac85..7254003 100644 --- a/pages/application-features/input-types.md +++ b/pages/application-features/input-types.md @@ -1,299 +1,298 @@ --- -title: Input types supported by AppGini -linkTitle: Input types +title: Tipos de entrada compatibles con AppGini +linkTitle: Tipos de entrada slug: help/application-features/input-types -description: Learn about the different input types supported by AppGini, and how to create fields of each type. -keywords: input types, textbox, text area, rich area, checkbox, radio buttons, drop-down list, multi-select list, date, date and time, time, file upload, image upload, google map, youtube video, read-only +description: Obtenga información sobre los diferentes tipos de entrada compatibles con AppGini y cómo crear campos de cada tipo. +keywords: tipos de entrada, cuadro de texto, área de texto, área enriquecida, casilla de verificación, botones de opción, lista desplegable, lista de selección múltiple, fecha, fecha y hora, hora, carga de archivos, carga de imágenes, mapa de Google, video de YouTube, solo lectura --- -# Input types supported by AppGini +# Tipos de entrada compatibles con AppGini -AppGini supports a variety of input types for fields in your tables. This page lists the supported input types and provides a brief description of each. -The screenshot below shows a sample detail view form with fields of different input types: +AppGini admite una variedad de tipos de entrada para los campos de sus tablas. Esta página enumera los tipos de entrada admitidos y proporciona una breve descripción de cada uno. +La siguiente captura de pantalla muestra un formulario de vista detallada de ejemplo con campos de diferentes tipos de entrada: -![Sample detail view form with fields of different input types](https://cdn.bigprof.com/images/input-types-dv-3-col.png "Sample detail view form with fields of different input types") +![Formulario de vista detallada de ejemplo con campos de diferentes tipos de entrada](https://cdn.bigprof.com/images/input-types-dv-3-col.png "Formulario de vista detallada de ejemplo con campos de diferentes tipos de entrada") -And this screenshot shows the corresponding table view: +Y esta captura de pantalla muestra la vista de tabla correspondiente: -![Sample table view with fields of different input types](https://cdn.bigprof.com/images/input-types-tv.png "Sample table view with fields of different input types") +![Vista de tabla de ejemplo con campos de diferentes tipos de entrada](https://cdn.bigprof.com/images/input-types-tv.png "Vista de tabla de ejemplo con campos de diferentes tipos de entrada") -Let's now go through the supported input types. +Repasemos ahora los tipos de entrada admitidos. -## Textbox +## Cuadro de texto -This is the most common input type. It allows users to enter text, numbers, or any other data. Here is a screenshot of a textbox field in a detail view form: +Este es el tipo de entrada más común. Permite a los usuarios ingresar texto, números o cualquier otro dato. Aquí hay una captura de pantalla de un campo de cuadro de texto en un formulario de vista detallada: -![Textbox field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-textbox.png "Textbox field in a detail view form") +![Campo de cuadro de texto en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-textbox.png "Campo de cuadro de texto en un formulario de vista detallada") -And here is a screenshot of a textbox field in a table view: +Y aquí hay una captura de pantalla de un campo de cuadro de texto en una vista de tabla: -![Textbox field in a table view](https://cdn.bigprof.com/images/input-types-tv-textbox.png "Textbox field in a table view") +![Campo de cuadro de texto en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-textbox.png "Campo de cuadro de texto en una vista de tabla") -To create a textbox field, set the data type of your field to `Char`, `Varchar`, or any numeric type. -For `Char` and `Varchar` fields, you can specify the maximum length of the text that can be entered in the field. +Para crear un campo de cuadro de texto, establezca el tipo de datos de su campo en `Char`, `Varchar` o cualquier tipo numérico. +Para los campos `Char` y `Varchar`, puede especificar la longitud máxima del texto que se puede ingresar en el campo. -## Text area +## Área de texto -This input type is similar to the textbox, but it allows users to enter multiple lines of text. Here is a screenshot of a textarea field in a detail view form: +Este tipo de entrada es similar al cuadro de texto, pero permite a los usuarios ingresar varias líneas de texto. Aquí hay una captura de pantalla de un campo de área de texto en un formulario de vista detallada: -![Text area field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-textarea.png "Text area field in a detail view form") +![Campo de área de texto en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-textarea.png "Campo de área de texto en un formulario de vista detallada") -And here is a screenshot of a textarea field in a table view: +Y aquí hay una captura de pantalla de un campo de área de texto en una vista de tabla: -![Text area field in a table view](https://cdn.bigprof.com/images/input-types-tv-textarea.png "Text area field in a table view") +![Campo de área de texto en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-textarea.png "Campo de área de texto en una vista de tabla") -To create a textarea field, set the data type of your field to `Text`, `Tiny text`, `Medium text` or `Long text`, and check the **Text area** checkbox in the field properties. +Para crear un campo de área de texto, establezca el tipo de datos de su campo en `Text`, `Tiny text`, `Medium text` o `Long text`, y marque la casilla de verificación **Área de texto** en las propiedades del campo. -> **Note**: You could also use the `Blob` data type and its variants to store large text data, but this is not recommended for text data, as it's less efficient than using the `Text` data types. +> **Nota**: También podría usar el tipo de datos `Blob` y sus variantes para almacenar datos de texto grandes, pero esto no se recomienda para datos de texto, ya que es menos eficiente que usar los tipos de datos `Text`. -## Rich (HTML) area +## Área enriquecida (HTML) -This input type allows users to enter rich text, including formatted text, images, links, etc. Here is a screenshot of a rich area field in a detail view form: +Este tipo de entrada permite a los usuarios ingresar texto enriquecido, incluido texto formateado, imágenes, enlaces, etc. Aquí hay una captura de pantalla de un campo de área enriquecida en un formulario de vista detallada: -![Rich area field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-richtext.png "Rich area field in a detail view form") +![Campo de área enriquecida en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-richtext.png "Campo de área enriquecida en un formulario de vista detallada") -And here is a screenshot of a rich area field in a table view: +Y aquí hay una captura de pantalla de un campo de área enriquecida en una vista de tabla: -![Rich area field in a table view](https://cdn.bigprof.com/images/input-types-rich-html-area.png "Rich area field in a table view") +![Campo de área enriquecida en una vista de tabla](https://cdn.bigprof.com/images/input-types-rich-html-area.png "Campo de área enriquecida en una vista de tabla") -To create a rich area field, set the data type of your field to `Text`, `Tiny text`, `Medium text` or `Long text`, and check the **Rich (HTML) area** checkbox in the field properties. +Para crear un campo de área enriquecida, establezca el tipo de datos de su campo en `Text`, `Tiny text`, `Medium text` o `Long text`, y marque la casilla de verificación **Área enriquecida (HTML)** en las propiedades del campo. -***TIP:*** If you name your field `description`, `comments`, `notes` or `details`, AppGini will automatically set the data type to `Text` and check the **Rich (HTML) area** checkbox for you. +***CONSEJO:*** Si nombra su campo `description`, `comments`, `notes` o `details`, AppGini establecerá automáticamente el tipo de datos en `Text` y marcará la casilla de verificación **Área enriquecida (HTML)** por usted. -## Checkbox +## Casilla de verificación -This input type allows users to check or uncheck a box. The text displayed next to the checkbox can be customized by setting the **Caption** property of the field. -Here is a screenshot of a checkbox field in a detail view form: +Este tipo de entrada permite a los usuarios marcar o desmarcar una casilla. El texto que se muestra junto a la casilla de verificación se puede personalizar configurando la propiedad **Título** del campo. +Aquí hay una captura de pantalla de un campo de casilla de verificación en un formulario de vista detallada: -![Checkbox field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-checkbox.png "Checkbox field in a detail view form") +![Campo de casilla de verificación en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-checkbox.png "Campo de casilla de verificación en un formulario de vista detallada") -And here is a screenshot of a checked checkbox field in a table view: +Y aquí hay una captura de pantalla de un campo de casilla de verificación marcado en una vista de tabla: -![Checked checkbox field in a table view](https://cdn.bigprof.com/images/input-types-tv-checkbox.png "Checked checkbox field in a table view") +![Campo de casilla de verificación marcado en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-checkbox.png "Campo de casilla de verificación marcado en una vista de tabla") -To create a checkbox field, check the **Check box** option in the field properties. +Para crear un campo de casilla de verificación, marque la opción **Casilla de verificación** en las propiedades del campo. -## Radio buttons +## Botones de opción -This input type allows users to select one option from a list of options. -Here is a screenshot of a radio buttons field in a detail view form: +Este tipo de entrada permite a los usuarios seleccionar una opción de una lista de opciones. +Aquí hay una captura de pantalla de un campo de botones de opción en un formulario de vista detallada: -![Radio buttons field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-radio-buttons.png "Radio buttons field in a detail view form") +![Campo de botones de opción en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-radio-buttons.png "Campo de botones de opción en un formulario de vista detallada") -And here is a screenshot of a radio buttons field in a table view: +Y aquí hay una captura de pantalla de un campo de botones de opción en una vista de tabla: -![Radio buttons field in a table view](https://cdn.bigprof.com/images/input-types-tv-radio-buttons.png "Radio buttons field in a table view") +![Campo de botones de opción en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-radio-buttons.png "Campo de botones de opción en una vista de tabla") -Radio buttons can be created in two ways: +Los botones de opción se pueden crear de dos maneras: -1. Under the **Options list** tab in the field properties, enter the options you want to display as radio buttons in the **List values** box, separated by double semicolons (`;;`). - For example, to create a radio buttons field with options `Yes` and `No`, enter `Yes;;No` in the **List values** box. Below the **List values** box, - choose the **Radio buttons** option from the **Display the options as** property. +1. En la pestaña **Lista de opciones** de las propiedades del campo, ingrese las opciones que desea mostrar como botones de opción en el cuadro **Valores de la lista**, separadas por dos puntos y coma (`;;`). + Por ejemplo, para crear un campo de botones de opción con las opciones `Sí` y `No`, ingrese `Sí;;No` en el cuadro **Valores de la lista**. Debajo del cuadro **Valores de la lista**, + elija la opción **Botones de opción** de la propiedad **Mostrar las opciones como**. - **Hint:** The **Quick List** drop-down to the right of the **List values** box allows you to quickly add common options like months, days of the week, US states, etc. + **Sugerencia:** El menú desplegable **Lista rápida** a la derecha del cuadro **Valores de la lista** le permite agregar rápidamente opciones comunes como meses, días de la semana, estados de EE. UU., etc. -2. If you have a table in your project that contains the options you want to display as radio buttons, you can link the field to that table. - To do this, go to the **Lookup field** tab in the field properties, and select the parent table and field that contains the options you want to display as radio buttons. - Then, check the **Show as radio buttons** option. +2. Si tiene una tabla en su proyecto que contiene las opciones que desea mostrar como botones de opción, puede vincular el campo a esa tabla. + Para hacer esto, vaya a la pestaña **Campo de búsqueda** en las propiedades del campo y seleccione la tabla principal y el campo que contiene las opciones que desea mostrar como botones de opción. + Luego, marque la opción **Mostrar como botones de opción**. - Please beware that this method is not suitable for large tables, as it will load all the records in the parent table to display the radio buttons, - which can result in a huge form, as well as performance issues. + Tenga en cuenta que este método no es adecuado para tablas grandes, ya que cargará todos los registros de la tabla principal para mostrar los botones de opción, + lo que puede resultar en un formulario enorme, así como problemas de rendimiento. -## Drop-down list +## Lista desplegable -This input type allows users to select one option from a list of options. The list of options can be static (entered manually inside AppGini) or dynamic (fetched from a table in your application). -Here is a screenshot of a closed drop-down list field in a detail view form: +Este tipo de entrada permite a los usuarios seleccionar una opción de una lista de opciones. La lista de opciones puede ser estática (ingresada manualmente dentro de AppGini) o dinámica (obtenida de una tabla en su aplicación). +Aquí hay una captura de pantalla de un campo de lista desplegable cerrado en un formulario de vista detallada: -![Drop-down list field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-drop-down-closed.png "Drop-down list field in a detail view form") +![Campo de lista desplegable en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-drop-down-closed.png "Campo de lista desplegable en un formulario de vista detallada") -And here is a screenshot of an open drop-down list field in a detail view form: +Y aquí hay una captura de pantalla de un campo de lista desplegable abierto en un formulario de vista detallada: -![Drop-down list field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-drop-down-open.png "Drop-down list field in a detail view form") +![Campo de lista desplegable en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-drop-down-open.png "Campo de lista desplegable en un formulario de vista detallada") -And here is how the drop-down list field looks in a table view: +Y así es como se ve el campo de lista desplegable en una vista de tabla: -![Drop-down list field in a table view](https://cdn.bigprof.com/images/input-types-tv-drop-down.png "Drop-down list field in a table view") +![Campo de lista desplegable en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-drop-down.png "Campo de lista desplegable en una vista de tabla") -Drop-down list fields can be created in two ways: +Los campos de lista desplegable se pueden crear de dos maneras: -1. Under the **Options list** tab in the field properties, enter the options you want to display in the drop-down list in the **List values** box, separated by double semicolons (`;;`). - For example, to create a drop-down list field with options `Yes` and `No`, enter `Yes;;No` in the **List values** box. Below the **List values** box, - choose the **Drop-down list** option from the **Display the options as** property. +1. En la pestaña **Lista de opciones** de las propiedades del campo, ingrese las opciones que desea mostrar en la lista desplegable en el cuadro **Valores de la lista**, separadas por dos puntos y coma (`;;`). + Por ejemplo, para crear un campo de lista desplegable con las opciones `Sí` y `No`, ingrese `Sí;;No` en el cuadro **Valores de la lista**. Debajo del cuadro **Valores de la lista**, + elija la opción **Lista desplegable** de la propiedad **Mostrar las opciones como**. - **Hint:** The **Quick List** drop-down to the right of the **List values** box allows you to quickly add common options like months, days of the week, US states, etc. + **Sugerencia:** El menú desplegable **Lista rápida** a la derecha del cuadro **Valores de la lista** le permite agregar rápidamente opciones comunes como meses, días de la semana, estados de EE. UU., etc. -2. If you have a table in your project that contains the options you want to display in the drop-down list, you can link the field to that table. - To do this, go to the **Lookup field** tab in the field properties, and select the parent table and field that contains the options you want to display in the drop-down list. - -If the drop-down list contains more than a few options, a search box will be displayed at the top of the list to help users quickly find the desired option. +2. Si tiene una tabla en su proyecto que contiene las opciones que desea mostrar en la lista desplegable, puede vincular el campo a esa tabla. + Para hacer esto, vaya a la pestaña **Campo de búsqueda** en las propiedades del campo y seleccione la tabla principal y el campo que contiene las opciones que desea mostrar en la lista desplegable. -## Multi-select list +Si la lista desplegable contiene más de unas pocas opciones, se mostrará un cuadro de búsqueda en la parte superior de la lista para ayudar a los usuarios a encontrar rápidamente la opción deseada. -This input type allows users to select multiple options from a list of options. -Here is a screenshot of a closed multi-select list field in a detail view form: +## Lista de selección múltiple -![Multi-select list field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-multiple-choice-drop-down-closed.png "Multi-select list field in a detail view form") +Este tipo de entrada permite a los usuarios seleccionar múltiples opciones de una lista de opciones. +Aquí hay una captura de pantalla de un campo de lista de selección múltiple cerrado en un formulario de vista detallada: -And here is a screenshot of an open multi-select list field in a detail view form: +![Campo de lista de selección múltiple en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-multiple-choice-drop-down-closed.png "Campo de lista de selección múltiple en un formulario de vista detallada") -![Multi-select list field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-multiple-choice-drop-down-open.png "Multi-select list field in a detail view form") +Y aquí hay una captura de pantalla de un campo de lista de selección múltiple abierto en un formulario de vista detallada: -And here is how the multi-select list field looks in a table view: +![Campo de lista de selección múltiple en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-multiple-choice-drop-down-open.png "Campo de lista de selección múltiple en un formulario de vista detallada") -![Multi-select list field in a table view](https://cdn.bigprof.com/images/input-types-tv-multiple-choice-drop-down.png "Multi-select list field in a table view") +Y así es como se ve el campo de lista de selección múltiple en una vista de tabla: -Multi-select list fields can be created under the **Options list** tab in the field properties. Enter -the options you want to display in the multi-select list in the **List values** box, separated by double semicolons (`;;`). -Make sure the data type of the field is set to `Text` (or any of its variants). +![Campo de lista de selección múltiple en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-multiple-choice-drop-down.png "Campo de lista de selección múltiple en una vista de tabla") -## Date +Los campos de lista de selección múltiple se pueden crear en la pestaña **Lista de opciones** de las propiedades del campo. Ingrese +las opciones que desea mostrar en la lista de selección múltiple en el cuadro **Valores de la lista**, separadas por dos puntos y coma (`;;`). +Asegúrese de que el tipo de datos del campo esté configurado en `Text` (o cualquiera de sus variantes). -This input type allows users to select a date from a calendar. Here is a screenshot of a date field in a detail view form: +## Fecha -![Date field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-date-pickup-closed.png "Date field in a detail view form") +Este tipo de entrada permite a los usuarios seleccionar una fecha de un calendario. Aquí hay una captura de pantalla de un campo de fecha en un formulario de vista detallada: -And here is a screenshot of the date picker in an open state: +![Campo de fecha en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-date-pickup-closed.png "Campo de fecha en un formulario de vista detallada") -![Date field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-date-pickup-open.png?2 "Date field in a detail view form") +Y aquí hay una captura de pantalla del selector de fechas en estado abierto: -And here is how the date field looks in a table view: +![Campo de fecha en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-date-pickup-open.png?2 "Campo de fecha en un formulario de vista detallada") -![Date field in a table view](https://cdn.bigprof.com/images/input-types-tv-date.png) +Y así es como se ve el campo de fecha en una vista de tabla: -To create a date field, set the data type of your field to `Date`. If you name a field -anything that ends with `date`, it will automatically be set to the `Date` data type. +![Campo de fecha en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-date.png) -To set the date format, you can do so under the **Localization settings** in the project properties. +Para crear un campo de fecha, establezca el tipo de datos de su campo en `Date`. Si nombra un campo +cualquier cosa que termine con `date`, se establecerá automáticamente en el tipo de datos `Date`. -## Date and time +Para establecer el formato de fecha, puede hacerlo en **Configuración de localización** en las propiedades del proyecto. -This input type allows users to select a date and time from a calendar. Here is a screenshot of a date and time field in a detail view form: +## Fecha y hora -![Date and time field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-datetime-pickup-closed.png "Date and time field in a detail view form") +Este tipo de entrada permite a los usuarios seleccionar una fecha y hora de un calendario. Aquí hay una captura de pantalla de un campo de fecha y hora en un formulario de vista detallada: -And here is a screenshot of the date and time picker in an open state: +![Campo de fecha y hora en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-datetime-pickup-closed.png "Campo de fecha y hora en un formulario de vista detallada") -![Date and time field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-datetime-pickup-open.png "Date and time field in a detail view form") +Y aquí hay una captura de pantalla del selector de fecha y hora en estado abierto: -And here is how the date and time field looks in a table view: +![Campo de fecha y hora en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-datetime-pickup-open.png "Campo de fecha y hora en un formulario de vista detallada") -![Date and time field in a table view](https://cdn.bigprof.com/images/input-types-tv-datetime.png "Date and time field in a table view") +Y así es como se ve el campo de fecha y hora en una vista de tabla: -To create a date and time field, set the data type of your field to `Datetime`. +![Campo de fecha y hora en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-datetime.png "Campo de fecha y hora en una vista de tabla") -To set the date and time format, you can do so under the **Localization settings** in the project properties. +Para crear un campo de fecha y hora, establezca el tipo de datos de su campo en `Datetime`. -## Time +Para establecer el formato de fecha y hora, puede hacerlo en **Configuración de localización** en las propiedades del proyecto. -This input type allows users to select a time from a dropdown list. Here is a screenshot of a time field in a detail view form: +## Hora -![Time field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-time-pickup-closed.png "Time field in a detail view form") +Este tipo de entrada permite a los usuarios seleccionar una hora de una lista desplegable. Aquí hay una captura de pantalla de un campo de hora en un formulario de vista detallada: -And here is a screenshot of the time picker in an open state: +![Campo de hora en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-time-pickup-closed.png "Campo de hora en un formulario de vista detallada") -![Time field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-time-pickup-open.png "Time field in a detail view form") +Y aquí hay una captura de pantalla del selector de hora en estado abierto: -And here is how the time field looks in a table view: +![Campo de hora en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-time-pickup-open.png "Campo de hora en un formulario de vista detallada") -![Time field in a table view](https://cdn.bigprof.com/images/input-types-tv-time.png "Time field in a table view") +Y así es como se ve el campo de hora en una vista de tabla: -To create a time field, set the data type of your field to `Time`. If you name a field -`time`, it will automatically be set to the `Time` data type. +![Campo de hora en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-time.png "Campo de hora en una vista de tabla") -To set the time format, you can do so under the **Localization settings** in the project properties. +Para crear un campo de hora, establezca el tipo de datos de su campo en `Time`. Si nombra un campo +`time`, se establecerá automáticamente en el tipo de datos `Time`. -## File upload +Para establecer el formato de hora, puede hacerlo en **Configuración de localización** en las propiedades del proyecto. -This input type allows users to upload files. Here is a screenshot of a file upload field in a detail view form: +## Carga de archivos -![File upload field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-file-upload.png "File upload field in a detail view form") +Este tipo de entrada permite a los usuarios cargar archivos. Aquí hay una captura de pantalla de un campo de carga de archivos en un formulario de vista detallada: -And here is a screenshot of a file upload field in a table view: +![Campo de carga de archivos en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-file-upload.png "Campo de carga de archivos en un formulario de vista detallada") -![File upload field in a table view](https://cdn.bigprof.com/images/input-types-tv-file.png "File upload field in a table view") +Y aquí hay una captura de pantalla de un campo de carga de archivos en una vista de tabla: -To create a file upload field, set the data type of your field to `Varchar` or `Char`. Then, under the **Media** tab in the field properties, -select the **File upload** option. This should open the **File upload options** dialog (you can open it later by clicking the **Configure** button in the **Media** tab). +![Campo de carga de archivos en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-file.png "Campo de carga de archivos en una vista de tabla") -This is how the **File upload options** dialog looks like: +Para crear un campo de carga de archivos, establezca el tipo de datos de su campo en `Varchar` o `Char`. Luego, en la pestaña **Multimedia** de las propiedades del campo, +seleccione la opción **Carga de archivos**. Esto debería abrir el cuadro de diálogo **Opciones de carga de archivos** (puede abrirlo más tarde haciendo clic en el botón **Configurar** en la pestaña **Multimedia**). -![File upload options dialog](https://cdn.bigprof.com/images/file-upload-options-dialog.png "File upload options dialog") +Así es como se ve el cuadro de diálogo **Opciones de carga de archivos**: -In this dialog, you can specify the maximum file size allowed for upload, the allowed file types, and other options. +![Cuadro de diálogo de opciones de carga de archivos](https://cdn.bigprof.com/images/file-upload-options-dialog.png "Cuadro de diálogo de opciones de carga de archivos") -## Image upload +En este cuadro de diálogo, puede especificar el tamaño máximo de archivo permitido para la carga, los tipos de archivo permitidos y otras opciones. -This input type allows users to upload images. Here is a screenshot of an image upload field in a detail view form: +## Carga de imágenes -![Image upload field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-image.png "Image upload field in a detail view form") +Este tipo de entrada permite a los usuarios cargar imágenes. Aquí hay una captura de pantalla de un campo de carga de imágenes en un formulario de vista detallada: -And here is a screenshot of an image upload field in a table view: +![Campo de carga de imágenes en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-image.png "Campo de carga de imágenes en un formulario de vista detallada") -![Image upload field in a table view](https://cdn.bigprof.com/images/input-types-tv-image.png "Image upload field in a table view") +Y aquí hay una captura de pantalla de un campo de carga de imágenes en una vista de tabla: -To create an image upload field, set the data type of your field to `Varchar` or `Char`. Then, under the **Media** tab in the field properties, -select the **Image** option. This should open the **Image options** dialog (you can open it later by clicking the **Configure** button in the **Media** tab). +![Campo de carga de imágenes en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-image.png "Campo de carga de imágenes en una vista de tabla") -This is how the **Image options** dialog looks like: +Para crear un campo de carga de imágenes, establezca el tipo de datos de su campo en `Varchar` o `Char`. Luego, en la pestaña **Multimedia** de las propiedades del campo, +seleccione la opción **Imagen**. Esto debería abrir el cuadro de diálogo **Opciones de imagen** (puede abrirlo más tarde haciendo clic en el botón **Configurar** en la pestaña **Multimedia**). -![Image options dialog](https://cdn.bigprof.com/images/image-options-dialog.png "Image options dialog") +Así es como se ve el cuadro de diálogo **Opciones de imagen**: -In this dialog, you can specify the maximum file size allowed for upload, thumbnail dimensions, zoom behavior, and other options. +![Cuadro de diálogo de opciones de imagen](https://cdn.bigprof.com/images/image-options-dialog.png "Cuadro de diálogo de opciones de imagen") -If you name a field `image`, `photo` or `picture`, it will automatically be set as an image upload field. +En este cuadro de diálogo, puede especificar el tamaño máximo de archivo permitido para la carga, las dimensiones de las miniaturas, el comportamiento del zoom y otras opciones. -## Google Map +Si nombra un campo `image`, `photo` o `picture`, se establecerá automáticamente como un campo de carga de imágenes. -This input type displays a Google map in the detail view. The map is interactive and allows users to zoom in and out, as well as move around. -Here is a screenshot of a Google Map field in a detail view form: +## Mapa de Google -![Google Map field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-google-map-24.18.png "Google Map field in a detail view form") +Este tipo de entrada muestra un mapa de Google en la vista detallada. El mapa es interactivo y permite a los usuarios acercar y alejar, así como moverse. +Aquí hay una captura de pantalla de un campo de mapa de Google en un formulario de vista detallada: -In the table view, as well as print view, the Google Map field displays a static map image: +![Campo de mapa de Google en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-google-map-24.18.png "Campo de mapa de Google en un formulario de vista detallada") -![Google Map field in a table view](https://cdn.bigprof.com/images/input-types-tv-google-map.png "Google Map field in a table view") +En la vista de tabla, así como en la vista de impresión, el campo Mapa de Google muestra una imagen de mapa estática: -In AppGini, you can configure the Google Map field to obtain the location from a Google Maps URL provided by the user. +![Campo de mapa de Google en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-google-map.png "Campo de mapa de Google en una vista de tabla") -In AppGini 24.18 and later, you can also configure the Google Map field to obtain the location of the user's device using the browser's geolocation API. -In this case, the field will display a map with a marker at the user's current location: +En AppGini, puede configurar el campo Mapa de Google para obtener la ubicación de una URL de Google Maps proporcionada por el usuario. -![Google Map field with user's current location](https://cdn.bigprof.com/images/input-types-dv-google-map-with-user-location-24.18.png "Google Map field with user's current location") +En AppGini 24.18 y versiones posteriores, también puede configurar el campo Mapa de Google para obtener la ubicación del dispositivo del usuario utilizando la API de geolocalización del navegador. +En este caso, el campo mostrará un mapa con un marcador en la ubicación actual del usuario: -You can configure user location capture to take place automatically when the record is created and/or updated, or manually when the user clicks a button. +![Campo de mapa de Google con la ubicación actual del usuario](https://cdn.bigprof.com/images/input-types-dv-google-map-with-user-location-24.18.png "Campo de mapa de Google con la ubicación actual del usuario") -[Learn more about configuring Google Map fields in your AppGini project](../working-with-projects/media-tab.md#google-maps). +Puede configurar la captura de la ubicación del usuario para que tenga lugar automáticamente cuando se crea y/o actualiza el registro, o manualmente cuando el usuario hace clic en un botón. -## YouTube video +[Obtenga más información sobre la configuración de los campos de mapa de Google en su proyecto AppGini](../working-with-projects/media-tab.md#google-maps). -This input type allows users to paste a YouTube video URL to display the video. Here is a screenshot of a YouTube video field in a detail view form: +## Video de YouTube -![YouTube video field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-youtube.png "YouTube video field in a detail view form") +Este tipo de entrada permite a los usuarios pegar una URL de video de YouTube para mostrar el video. Aquí hay una captura de pantalla de un campo de video de YouTube en un formulario de vista detallada: -And here is a screenshot of a YouTube video field in a table view: +![Campo de video de YouTube en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-youtube.png "Campo de video de YouTube en un formulario de vista detallada") -![YouTube video field in a table view](https://cdn.bigprof.com/images/input-types-tv-youtube.png "YouTube video field in a table view") +Y aquí hay una captura de pantalla de un campo de video de YouTube en una vista de tabla: -To create a YouTube video field, set the data type of your field to `Varchar` or `Char` with a length of at least 200 characters. Then, under the **Media** tab in the field properties, -select the **YouTube video** option. This should open the **YouTube video options** dialog (you can open it later by clicking the **Configure** button in the **Media** tab). +![Campo de video de YouTube en una vista de tabla](https://cdn.bigprof.com/images/input-types-tv-youtube.png "Campo de video de YouTube en una vista de tabla") -This is how the **YouTube video options** dialog looks like: +Para crear un campo de video de YouTube, establezca el tipo de datos de su campo en `Varchar` o `Char` con una longitud de al menos 200 caracteres. Luego, en la pestaña **Multimedia** de las propiedades del campo, +seleccione la opción **Video de YouTube**. Esto debería abrir el cuadro de diálogo **Opciones de video de YouTube** (puede abrirlo más tarde haciendo clic en el botón **Configurar** en la pestaña **Multimedia**). -![YouTube video options dialog](https://cdn.bigprof.com/images/youtube-video-options-dialog.png "YouTube video options dialog") +Así es como se ve el cuadro de diálogo **Opciones de video de YouTube**: -## Read-only +![Cuadro de diálogo de opciones de video de YouTube](https://cdn.bigprof.com/images/youtube-video-options-dialog.png "Cuadro de diálogo de opciones de video de YouTube") -This is not exactly an input type, but it allows you to display a field in a read-only mode. -This is useful when you want to display a field that should not be edited by users. +## Solo lectura -To create a read-only field, check the **Read-only** option in the field properties. +Esto no es exactamente un tipo de entrada, pero le permite mostrar un campo en modo de solo lectura. +Esto es útil cuando desea mostrar un campo que los usuarios no deben editar. -Here is a screenshot of a read-only field in a detail view form: +Para crear un campo de solo lectura, marque la opción **Solo lectura** en las propiedades del campo. -![Read-only field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-read-only.png "Read-only field in a detail view form") +Aquí hay una captura de pantalla de un campo de solo lectura en un formulario de vista detallada: -## Conclusion +![Campo de solo lectura en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-read-only.png "Campo de solo lectura en un formulario de vista detallada") -AppGini supports a variety of input types for fields in your tables. This allows you to create rich and interactive forms that meet many different use cases. -You can mix and match these input types to create forms that are easy to use and provide a great user experience. +## Conclusión +AppGini admite una variedad de tipos de entrada para los campos de sus tablas. Esto le permite crear formularios ricos e interactivos que satisfacen muchos casos de uso diferentes. +Puede mezclar y combinar estos tipos de entrada para crear formularios que sean fáciles de usar y brinden una excelente experiencia de usuario. diff --git a/pages/application-uploader.md b/pages/application-uploader.md index 6070f7a..e3a9f34 100644 --- a/pages/application-uploader.md +++ b/pages/application-uploader.md @@ -1,153 +1,151 @@ --- -title: Automatic application uploader -linkTitle: Uploading apps +title: Cargador automático de aplicaciones +linkTitle: Carga de aplicaciones slug: help/application-uploader -description: Learn how to use the automatic application uploader in AppGini to upload your apps to your server. This feature makes it much easier to deploy your apps. -keywords: automatic uploader, upload apps, deploy apps, appgini uploader, appgini deploy, appgini upload, continuous deployment, continuous integration, CI/CD, appgini CI/CD, appgini continuous deployment, appgini continuous integration, uploader security, appgini security +description: Aprenda a utilizar el cargador automático de aplicaciones en AppGini para cargar sus aplicaciones en su servidor. Esta función facilita mucho la implementación de sus aplicaciones. +keywords: cargador automático, cargar aplicaciones, implementar aplicaciones, cargador appgini, implementar appgini, cargar appgini, implementación continua, integración continua, CI/CD, appgini CI/CD, implementación continua appgini, integración continua appgini, seguridad del cargador, seguridad appgini --- -# Automatic application uploader +# Cargador automático de aplicaciones -As of AppGini 23.10, we introduced a new feature that makes it much easier to deploy (upload) your AppGini apps to your server. By clicking a single 'Upload' button, AppGini checks the changed files in your app and uploads them to your server. You no longer need to use external FTP, SSH or other upload tools, and you don't have to worry about uploading the right files to the right folders. +A partir de AppGini 23.10, introdujimos una nueva función que facilita mucho la implementación (carga) de sus aplicaciones AppGini en su servidor. Al hacer clic en un solo botón 'Cargar', AppGini comprueba los archivos modificados en su aplicación y los carga en su servidor. Ya no necesita utilizar herramientas externas de FTP, SSH u otras herramientas de carga, y no tiene que preocuparse por cargar los archivos correctos en las carpetas correctas. -### Smart features of the automatic file uploader +### Funciones inteligentes del cargador automático de archivos -* **Uploads only the files that have changed**. This means that if you make changes to your app that cause only a few files to change, the uploader will take care of detecting which files were changed and will only upload those files. This is much faster than uploading all files every time. -* **Uploads only the files that are needed**. The uploader will only upload the files that are needed to run your app. It will ignore files that are not needed, such as log files, the local `config.php` (which should not be uploaded to the server), ...etc. -* **Uploads files to the right folders**. The uploader will upload the files to the right folders on your server. For example, the file named `admin/index.php` in your app will be uploaded to the `admin` folder on your server. Missing folders will be created automatically as well. This saves you a lot of time trying to debug why your app is not working after uploading it. -* **Secure upload key**. The uploader uses a secret upload key to authenticate itself to your server. This key is created the first time you use the uploader. It's a 32-character random string that is stored in AppGini config and in the `file-uploader.php` file. This all happens transparently to you, so you don't have to worry about it. Just rest assured that any one trying to access the file uploader will not be able to do so without knowing the secret key. - - In addition, automatic file uploading only works over HTTPS. This is to prevent anyone from intercepting the upload key and using it to upload files to your server. - +* **Carga solo los archivos que han cambiado**. Esto significa que si realiza cambios en su aplicación que solo provocan la modificación de unos pocos archivos, el cargador se encargará de detectar qué archivos se modificaron y solo cargará esos archivos. Esto es mucho más rápido que cargar todos los archivos cada vez. +* **Carga solo los archivos necesarios**. El cargador solo cargará los archivos necesarios para ejecutar su aplicación. Ignorará los archivos que no son necesarios, como los archivos de registro, el archivo local `config.php` (que no debe cargarse en el servidor), etc. +* **Carga los archivos en las carpetas correctas**. El cargador cargará los archivos en las carpetas correctas de su servidor. Por ejemplo, el archivo llamado `admin/index.php` en su aplicación se cargará en la carpeta `admin` de su servidor. Las carpetas que falten también se crearán automáticamente. Esto le ahorra mucho tiempo tratando de depurar por qué su aplicación no funciona después de cargarla. +* **Clave de carga segura**. El cargador utiliza una clave de carga secreta para autenticarse en su servidor. Esta clave se crea la primera vez que utiliza el cargador. Es una cadena aleatoria de 32 caracteres que se almacena en la configuración de AppGini y en el archivo `file-uploader.php`. Todo esto sucede de forma transparente para usted, por lo que no tiene que preocuparse por ello. Solo tenga la seguridad de que nadie que intente acceder al cargador de archivos podrá hacerlo sin conocer la clave secreta. -### How to enable automatic file uploading + Además, la carga automática de archivos solo funciona a través de HTTPS. Esto es para evitar que alguien intercepte la clave de carga y la utilice para cargar archivos en su servidor. -To enable automatic file uploading, you should: +### Cómo habilitar la carga automática de archivos + +Para habilitar la carga automática de archivos, debe: + +1. **Establecer la URL de la aplicación** en la sección de configuración de Seguridad de las propiedades del proyecto. Esta es la URL que sus usuarios utilizarán para acceder a su aplicación. Debe proporcionar la URL completa de la página de inicio, incluido el protocolo (`https://`) pero sin `index.php` al final. Por ejemplo: -1. **Set the application URL** under the Security settings section of the project properties. This is the URL that your users will use to access your app. You should provide the full URL of the homepage, including the protocol (`https://`) but without `index.php` at the end. For example: - https://example.com/catalog - - ![Set the application URL](https://cdn.bigprof.com/images/appgini-app-url.png) - -2. **Manually upload the generated `file-uploader.php` file to your server**. This only needs to be done once. You can do it by using any FTP or SSH tool. Once you upload it, you can use automatic uploading for all future changes. The `file-uploader.php` file is located in the home folder of your app. And it should be uploaded to the matching folder on your server. So, for the example application URL above, that file should be accessible at: - + + ![Establecer la URL de la aplicación](https://cdn.bigprof.com/images/appgini-app-url.png) + +2. **Cargar manualmente el archivo `file-uploader.php` generado en su servidor**. Esto solo debe hacerse una vez. Puede hacerlo utilizando cualquier herramienta FTP o SSH. Una vez que lo cargue, puede utilizar la carga automática para todos los cambios futuros. El archivo `file-uploader.php` se encuentra en la carpeta de inicio de su aplicación. Y debe cargarse en la carpeta correspondiente de su servidor. Entonces, para la URL de la aplicación de ejemplo anterior, ese archivo debería ser accesible en: + https://example.com/catalog/file-uploader.php - -### How to use automatic file uploading +### Cómo utilizar la carga automática de archivos -After you've set the application URL and uploaded `file-uploader.php` to your server, you can use automatic file uploading by clicking the 'Upload' button in AppGini. This button can be found at the top of the project properties pane, next to the 'View files' button. It's only visible after you've generated your app. +Después de haber establecido la URL de la aplicación y haber cargado `file-uploader.php` en su servidor, puede utilizar la carga automática de archivos haciendo clic en el botón 'Cargar' en AppGini. Este botón se puede encontrar en la parte superior del panel de propiedades del proyecto, junto al botón 'Ver archivos'. Solo es visible después de haber generado su aplicación. -![Upload button in the project properties pane](https://cdn.bigprof.com/images/appgini-upload-button-project-properties-pane.png) +![Botón Cargar en el panel de propiedades del proyecto](https://cdn.bigprof.com/images/appgini-upload-button-project-properties-pane.png) -You can also find the 'Upload' button after generating your app in the status window: +También puede encontrar el botón 'Cargar' después de generar su aplicación en la ventana de estado: -![Upload button in status window](https://cdn.bigprof.com/images/appgini-upload-button-app-generator-status-window.png) +![Botón Cargar en la ventana de estado](https://cdn.bigprof.com/images/appgini-upload-button-app-generator-status-window.png) -After clicking the 'Upload' button, AppGini will perform several checks before uploading. +Después de hacer clic en el botón 'Cargar', AppGini realizará varias comprobaciones antes de cargar. -![Checks performed before uploading apps in AppGini](https://cdn.bigprof.com/images/appgini-app-uploader-start-checks-24.19.png) +![Comprobaciones realizadas antes de cargar aplicaciones en AppGini](https://cdn.bigprof.com/images/appgini-app-uploader-start-checks-24.19.png) -In the screenshot above, all checks were successful. The next step after that is to check for changed files. But if any checks fail, you'll see an error message like this: +En la captura de pantalla anterior, todas las comprobaciones se realizaron correctamente. El siguiente paso después de eso es comprobar si hay archivos modificados. Pero si alguna comprobación falla, verá un mensaje de error como este: -![Upload checks failed](https://cdn.bigprof.com/images/appgini-app-uploader-checks-failed-24.19.png) +![Fallaron las comprobaciones de carga](https://cdn.bigprof.com/images/appgini-app-uploader-checks-failed-24.19.png) -You should fix the error(s) shown in the message before you can proceed with the upload. In the example above, the error is that the `file-uploader.php` file is not found on the server. You should upload it to the server as explained in the [How to enable automatic file uploading section](#how-to-enable-automatic-file-uploading) above, then retry the upload. +Debe corregir los errores que se muestran en el mensaje antes de poder continuar con la carga. En el ejemplo anterior, el error es que el archivo `file-uploader.php` no se encuentra en el servidor. Debe cargarlo en el servidor como se explica en la sección [Cómo habilitar la carga automática de archivos](#cómo-habilitar-la-carga-automática-de-archivos) anterior, y luego volver a intentar la carga. -If all checks pass, AppGini will scan for file changes. This would take a couple of minutes or so, depending on the size of your app. Once the scan is complete, AppGini will show you a summary of the changes detected: +Si todas las comprobaciones pasan, AppGini buscará cambios en los archivos. Esto tardará un par de minutos aproximadamente, dependiendo del tamaño de su aplicación. Una vez que se complete el escaneo, AppGini le mostrará un resumen de los cambios detectados: -![Results of scanning for changed files](https://cdn.bigprof.com/images/appgini-upload-scanning-changed-files-24.19.png) +![Resultados del escaneo de archivos modificados](https://cdn.bigprof.com/images/appgini-upload-scanning-changed-files-24.19.png) -In the above screenshot, AppGini detected that 36 files were changed. You should click the button showing the number of changed files to begin the upload. In case no changes were detected, you'll see a message like this instead: +En la captura de pantalla anterior, AppGini detectó que se modificaron 36 archivos. Debe hacer clic en el botón que muestra el número de archivos modificados para comenzar la carga. En caso de que no se detecten cambios, verá un mensaje como este en su lugar: -![No changes detected](https://cdn.bigprof.com/images/appgini-upload-no-changes-detected-24.19.png) +![No se detectaron cambios](https://cdn.bigprof.com/images/appgini-upload-no-changes-detected-24.19.png) -After clicking the button for uploading changes, AppGini will begin uploading only the changed files to your server. The upload progress window will show you the progress of the upload. +Después de hacer clic en el botón para cargar los cambios, AppGini comenzará a cargar solo los archivos modificados en su servidor. La ventana de progreso de la carga le mostrará el progreso de la carga. -![Upload progress window](https://cdn.bigprof.com/images/appgini-upload-progrss-24.19.png?1) +![Ventana de progreso de la carga](https://cdn.bigprof.com/images/appgini-upload-progrss-24.19.png?1) -After the upload is complete, AppGini will show you how many files were uploaded, how many were skipped (because they were unchanged/ignored) and how many failed, if any, along with a full list of files uploaded: +Una vez completada la carga, AppGini le mostrará cuántos archivos se cargaron, cuántos se omitieron (porque no se modificaron/ignoraron) y cuántos fallaron, si los hubo, junto con una lista completa de los archivos cargados: -![Upload results window](https://cdn.bigprof.com/images/appgini-upload-finished-24.19.png) +![Ventana de resultados de la carga](https://cdn.bigprof.com/images/appgini-upload-finished-24.19.png) -In case of any failed uploads, they will be listed in red. You should check the error message shown for each failed upload and fix the issue. Usually, failed uploads are due to file permissions issues on the server. You can fix this by making sure that the folder to which you're uploading your app and any subfolder are writable by the web server software (apache, nginx, .. etc) you're using. For example, on most apache setups on linux, the user that owns the app folders should be `www-data`. After fixing the issue, you can retry the upload by clicking the 'Retry failed uploads' button: +En caso de que alguna carga falle, se mostrará en rojo. Debe verificar el mensaje de error que se muestra para cada carga fallida y solucionar el problema. Por lo general, las cargas fallidas se deben a problemas de permisos de archivos en el servidor. Puede solucionar esto asegurándose de que la carpeta a la que está cargando su aplicación y cualquier subcarpeta sean editables por el software del servidor web (apache, nginx, etc.) que está utilizando. Por ejemplo, en la mayoría de las configuraciones de apache en linux, el usuario propietario de las carpetas de la aplicación debe ser `www-data`. Después de solucionar el problema, puede volver a intentar la carga haciendo clic en el botón 'Reintentar cargas fallidas': -![Retry failed uploads button](https://cdn.bigprof.com/images/appgini-upload-retry-failed.png) +![Botón Reintentar cargas fallidas](https://cdn.bigprof.com/images/appgini-upload-retry-failed.png) -### Troubleshooting +### Solución de problemas -If you're having issues with automatic file uploading, please check the following: +Si tiene problemas con la carga automática de archivos, compruebe lo siguiente: + +* **¿Ha configurado la URL de la aplicación?** Si no ha configurado la URL de la aplicación, el botón 'Cargar' mostrará un error. Consulte la sección [Cómo habilitar la carga automática de archivos](#cómo-habilitar-la-carga-automática-de-archivos) anterior para obtener más información. +* **¿Ha cargado `file-uploader.php` en su servidor?** Si no ha cargado `file-uploader.php` en su servidor, las comprobaciones realizadas antes de cargar fallarán. Puede cargar `file-uploader.php` en su servidor utilizando cualquier herramienta FTP o SSH. Debe cargarse en la carpeta de inicio de su aplicación en su servidor. +* **¿Su aplicación es accesible a través de HTTPS?**. La carga automática de archivos solo funciona a través de HTTPS. Esto es para evitar que alguien intercepte la clave de carga y la utilice para cargar archivos en su servidor. Asegúrese de que su servidor tenga un certificado SSL válido, no autofirmado, y asegúrese de que no esté caducado. +* **Asegúrese de que la clave de carga secreta sea correcta**. La clave de carga secreta se puede recuperar desde la ventana de preferencias de AppGini. Si no coincide con la clave en el archivo `file-uploader.php` de su servidor, puede regenerar su aplicación y luego volver a cargar manualmente el nuevo archivo `file-uploader.php`, sobrescribiendo el antiguo en el servidor. + + _**Consejo:**_ Puede ver la clave de carga secreta almacenada en el archivo `file-uploader.php` abriéndolo en un editor de texto. La línea 2 contiene la clave, así: -* **Have you set the application URL?** If you haven't set the application URL, the 'Upload' button will display an error. Please refer to the [How to enable automatic file uploading section](#how-to-enable-automatic-file-uploading) above for more information. -* **Have you uploaded `file-uploader.php` to your server?** If you haven't uploaded `file-uploader.php` to your server, the checks performed before uploading will fail. You can upload `file-uploader.php` to your server using any FTP or SSH tool. It should be uploaded to the home folder of your app on your server. -* **Is your application accessible over HTTPS?**. Automatic file uploading only works over HTTPS. This is to prevent anyone from intercepting the upload key and using it to upload files to your server. Make sure your server has a valid, non-self-signed SSL certificate, and make sure it's not expired. -* **Make sure the secret upload key is correct**. The secret upload key can be retrieved from the AppGini preferences window. If it doesn't match the key in the `file-uploader.php` on your server, you can regenerate your app, then manually re-upload the new `file-uploader.php` file, overwriting the old one on the server. - - _**Tip:**_ You can view the secret upload key stored in the `file-uploader.php` file by opening it in a text editor. Line 2 contains the key, like so: - ```php <?php define('UPLOAD_KEY', '2DF5367D046FFE742277D04B107CF46B'); ``` - -* **Is your antivirus blocking the upload?** Some antivirus software might block the automatic file uploader from working. You can try disabling your antivirus temporarily to see if it's causing the issue. If it is, you can add an exception for AppGini.exe in your antivirus settings. -* **Is curl installed on your PC?**. The automatic file uploader uses curl to upload files to your server. Curl is installed by default on modern Windows machines, Linux and MacOS. On older Windows PCs, you can download curl from the [official curl website](https://curl.se/windows/). -* **Do you have modsecurity or a similar web application firewall (WAF) installed on your server?** This might prevent the automatic file uploader from working. If you have a WAF installed on your server, you can try adding an exception for the `file-uploader.php` file to the WAF configuration. For modsecurity, you can try adding this code to a new file inside `/etc/apache/mods-enabled/` (maybe name it `appgini.conf`) or similar, then restart apache: - + +* **¿Su antivirus está bloqueando la carga?** Algunos programas antivirus pueden bloquear el funcionamiento del cargador automático de archivos. Puede intentar deshabilitar su antivirus temporalmente para ver si está causando el problema. Si es así, puede agregar una excepción para AppGini.exe en la configuración de su antivirus. +* **¿Está instalado curl en su PC?**. El cargador automático de archivos utiliza curl para cargar archivos en su servidor. Curl está instalado de forma predeterminada en las máquinas Windows modernas, Linux y MacOS. En PC con Windows más antiguas, puede descargar curl desde el [sitio web oficial de curl](https://curl.se/windows/). +* **¿Tiene modsecurity o un firewall de aplicaciones web (WAF) similar instalado en su servidor?** Esto podría impedir que el cargador automático de archivos funcione. Si tiene un WAF instalado en su servidor, puede intentar agregar una excepción para el archivo `file-uploader.php` a la configuración del WAF. Para modsecurity, puede intentar agregar este código a un nuevo archivo dentro de `/etc/apache/mods-enabled/` (quizás llámelo `appgini.conf`) o similar, luego reinicie apache: + ```apache <IfModule mod_security2.c> SecRule REQUEST_URI "/file-uploader.php$" id:300001,allow </IfModule> ``` - - _**Hint:**_ Check your server error logs to see if modsecurity is blocking requests to `file-uploader.php` or not. - -* **Are you using Cloudflare?** Cloudflare is a great service for securing your website, but since it also acts as a web application firewall, it might block the automatic file uploader from working. You'll need to add an exception for the `file-uploader.php` file to [Cloudflare's firewall rules](https://developers.cloudflare.com/waf/managed-rules/waf-exceptions/). -* **Are folder permissions/ownership set correctly?** Make sure that the folder to which you're uploading your app and any subfolder are writable by the web server software (apache, nginx, .. etc) you're using. For example, on most apache setups on linux, the user that owns the app folders should be `www-data`. - - You can set the ownership of the app folder and all its subfolders to `www-data` by running this command on your server: - + + _**Sugerencia:**_ Revise los registros de errores de su servidor para ver si modsecurity está bloqueando las solicitudes a `file-uploader.php` o no. + +* **¿Está utilizando Cloudflare?** Cloudflare es un excelente servicio para proteger su sitio web, pero como también actúa como un firewall de aplicaciones web, podría impedir que el cargador automático de archivos funcione. Deberá agregar una excepción para el archivo `file-uploader.php` a las [reglas de firewall de Cloudflare](https://developers.cloudflare.com/waf/managed-rules/waf-exceptions/). +* **¿Están configurados correctamente los permisos/propiedad de las carpetas?** Asegúrese de que la carpeta a la que está cargando su aplicación y cualquier subcarpeta sean editables por el software del servidor web (apache, nginx, etc.) que está utilizando. Por ejemplo, en la mayoría de las configuraciones de apache en linux, el usuario propietario de las carpetas de la aplicación debe ser `www-data`. + + Puede establecer la propiedad de la carpeta de la aplicación y todas sus subcarpetas en `www-data` ejecutando este comando en su servidor: + ```bash - sudo chown -R www-data:www-data /path/to/your/app + sudo chown -R www-data:www-data /ruta/a/su/aplicacion ``` - - Replace `/path/to/your/app` with the actual path to your app on your server. - - If you're using a different web server software or a different operating system, you might need to use a different user/group name. For example, on CentOS, the user/group name is usually `apache` instead of `www-data`. - - If you're not sure what user/group name to use, you can check the user/group name of the web server software by running this command on your server: - + + Reemplace `/ruta/a/su/aplicacion` con la ruta real a su aplicación en su servidor. + + Si está utilizando un software de servidor web diferente o un sistema operativo diferente, es posible que deba utilizar un nombre de usuario/grupo diferente. Por ejemplo, en CentOS, el nombre de usuario/grupo suele ser `apache` en lugar de `www-data`. + + Si no está seguro de qué nombre de usuario/grupo usar, puede verificar el nombre de usuario/grupo del software del servidor web ejecutando este comando en su servidor: + ```bash ps aux | egrep '(apache|nginx)' ``` - - This will show you the user/group name of the web server software. - -### Security considerations - -Automatic file uploading is a great feature, but it's important to understand the security implications of it. Here are some things to keep in mind: - -* **The automatic file uploader uses HTTPS**. This is to prevent anyone from intercepting the upload key and using it to upload files to your server. Make sure your server has a valid, non-self-signed SSL certificate, and make sure it's not expired. - -* **The automatic file uploader uses a secret upload key**. The secret upload key can be retrieved from the AppGini preferences window, under the 'App uploader' tab. - - ![App uploader tab in AppGini preferences window](https://cdn.bigprof.com/images/appgini-preferences-app-uploader.png) - - Make sure to keep this key secret. Anyone with access to this key can upload executable files to your server and compromise it. If you think your key has been compromised, you _must immediately_: - - 1. Remove the `file-uploader.php` file from your server. - 2. Generate a new key from the AppGini preferences window. - 3. Regenerate your app and upload the new `file-uploader.php` to your server. - - We also recommend that you remove all app files from the server and use the automatic file uploader to re-upload them. - -* During the upload process, the application is set to **maintenance mode**. This means that no one can access the app while it's being uploaded. After the upload is complete, the app is set back to normal mode. - -* For tighter security, you can add a rule to your server firewall or to Cloudflare (if you're using it) to block access to the `file-uploader.php` file from all IP addresses except the one you're using to upload your app. - - If you're using Apache, you can add this rule to your `.htaccess` file or your site's Apache configuration file: - + + Esto le mostrará el nombre de usuario/grupo del software del servidor web. + +### Consideraciones de seguridad + +La carga automática de archivos es una gran característica, pero es importante comprender sus implicaciones de seguridad. Aquí hay algunas cosas a tener en cuenta: + +* **El cargador automático de archivos utiliza HTTPS**. Esto es para evitar que alguien intercepte la clave de carga y la utilice para cargar archivos en su servidor. Asegúrese de que su servidor tenga un certificado SSL válido, no autofirmado, y asegúrese de que no esté caducado. + +* **El cargador automático de archivos utiliza una clave de carga secreta**. La clave de carga secreta se puede recuperar desde la ventana de preferencias de AppGini, en la pestaña 'Cargador de aplicaciones'. + + ![Pestaña Cargador de aplicaciones en la ventana de preferencias de AppGini](https://cdn.bigprof.com/images/appgini-preferences-app-uploader.png) + + Asegúrese de mantener esta clave en secreto. Cualquiera que tenga acceso a esta clave puede cargar archivos ejecutables en su servidor y comprometerlo. Si cree que su clave ha sido comprometida, debe _inmediatamente_: + + 1. Eliminar el archivo `file-uploader.php` de su servidor. + 2. Generar una nueva clave desde la ventana de preferencias de AppGini. + 3. Regenerar su aplicación y cargar el nuevo `file-uploader.php` en su servidor. + + También recomendamos que elimine todos los archivos de la aplicación del servidor y utilice el cargador automático de archivos para volver a cargarlos. + +* Durante el proceso de carga, la aplicación se establece en **modo de mantenimiento**. Esto significa que nadie puede acceder a la aplicación mientras se está cargando. Una vez completada la carga, la aplicación vuelve al modo normal. + +* Para mayor seguridad, puede agregar una regla a su firewall de servidor o a Cloudflare (si lo está utilizando) para bloquear el acceso al archivo `file-uploader.php` desde todas las direcciones IP excepto la que está utilizando para cargar su aplicación. + + Si está utilizando Apache, puede agregar esta regla a su archivo `.htaccess` o al archivo de configuración de Apache de su sitio: + ``` <Files "file-uploader.php"> Order allow,deny @@ -155,20 +153,18 @@ Automatic file uploading is a great feature, but it's important to understand th Allow from 124.233.112.210 </Files> ``` - - Replace `124.233.112.210` with the external IP address of the PC you're using to upload your app. - - For nginx, you can use this rule instead: - + + Reemplace `124.233.112.210` con la dirección IP externa de la PC que está utilizando para cargar su aplicación. + + Para nginx, puede utilizar esta regla en su lugar: + ``` location ~* ^/file-uploader\.php$ { allow 124.233.112.210; deny all; } ``` - - You could also specify a range of IP addresses in the above rules by using [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks) instead of a single IP address. - -* **Exclude the `file-uploader.php` file from your repository**. If you're using a version control system like git, make sure to exclude the `file-uploader.php` file from your repository. This file contains the secret upload key, and you don't want to expose it to the public. To exclude the file from your repository, you can add it to your `.gitignore` file. + También podría especificar un rango de direcciones IP en las reglas anteriores utilizando la [notación CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks) en lugar de una sola dirección IP. +* **Excluya el archivo `file-uploader.php` de su repositorio**. Si está utilizando un sistema de control de versiones como git, asegúrese de excluir el archivo `file-uploader.php` de su repositorio. Este archivo contiene la clave de carga secreta y no desea exponerla al público. Para excluir el archivo de su repositorio, puede agregarlo a su archivo `.gitignore`. diff --git a/pages/calculated-fields.md b/pages/calculated-fields.md index 491963e..1f640de 100644 --- a/pages/calculated-fields.md +++ b/pages/calculated-fields.md @@ -1,244 +1,242 @@ --- -title: Calculated fields -linkTitle: Calculated fields +title: Campos calculados +linkTitle: Campos calculados slug: help/calculated-fields -description: Learn how to configure calculated fields in your AppGini app. Calculated fields are read-only fields that get populated automatically with a value calculated from an SQL SELECT query. -keywords: calculated fields, read-only fields, SQL query, MySQL, AppGini, automatic calculations, batch updates, command line +description: Aprenda a configurar campos calculados en su aplicación AppGini. Los campos calculados son campos de solo lectura que se rellenan automáticamente con un valor calculado a partir de una consulta SQL SELECT. +keywords: campos calculados, campos de solo lectura, consulta SQL, MySQL, AppGini, cálculos automáticos, actualizaciones por lotes, línea de comandos --- -# Calculated fields +# Campos calculados -> Calculated fields feature is available in AppGini 5.80 and above. +> La función de campos calculados está disponible en AppGini 5.80 y versiones posteriores. -## What are calculated fields? +## ¿Qué son los campos calculados? -As of AppGini 5.80, you can now configure one or more fields in your app as _calculated fields_. Calculated fields are read-only fields that get populated automatically with a value calculated from any formula you specify. The formula for a calculated field must be a MySQL-compatible SQL query that returns a single value. The value returned from the SQL query is saved to the calculated field whenever the record containing that field is accessed by users. +A partir de AppGini 5.80, ahora puede configurar uno o más campos en su aplicación como _campos calculados_. Los campos calculados son campos de solo lectura que se rellenan automáticamente con un valor calculado a partir de cualquier fórmula que especifique. La fórmula para un campo calculado debe ser una consulta SQL compatible con MySQL que devuelva un solo valor. El valor devuelto por la consulta SQL se guarda en el campo calculado cada vez que los usuarios acceden al registro que contiene ese campo. -Calculated fields can be very helpful in numerous scenarios. For example, to automatically calculate and update the subtotal and total of an invoice, number of students enrolled to a course, average score of course, due date of an invoice (for example if you want to set a business rule to set a due date of an invoice to 15 days after issue date), most recent status of a shipment, flag overdue tasks, indicate if prospect customer should be contacted today ... etc. There are endless possibilities to applying calculated fields. +Los campos calculados pueden ser muy útiles en numerosos escenarios. Por ejemplo, para calcular y actualizar automáticamente el subtotal y el total de una factura, el número de estudiantes inscritos en un curso, la puntuación promedio del curso, la fecha de vencimiento de una factura (por ejemplo, si desea establecer una regla comercial para establecer una fecha de vencimiento de una factura a 15 días después de la fecha de emisión), el estado más reciente de un envío, marcar tareas vencidas, indicar si se debe contactar hoy a un cliente potencial, etc. Hay infinitas posibilidades para aplicar campos calculados. -## Conditions for a field to become a calculated field +## Condiciones para que un campo se convierta en un campo calculado -If you are trying to set a field as a calculated field, it must **NOT** meet any of the following conditions +Si está intentando establecer un campo como un campo calculado, **NO** debe cumplir ninguna de las siguientes condiciones: -* Fields not set as read only -* Primary key fields -* Required fields -* Text area and rich (HTML) area fields -* Auto-increment fields -* Unique fields -* Web/email link fields -* Image/file upload fields -* Map/video fields -* Lookup fields -* Options list fields -* Fields that have a data format specified (you can apply a data format in the calculation instead) -* Fields with default values (you can apply a default value in the calculation instead) +* Campos no establecidos como de solo lectura +* Campos de clave principal +* Campos obligatorios +* Campos de área de texto y área enriquecida (HTML) +* Campos de incremento automático +* Campos únicos +* Campos de enlace web/correo electrónico +* Campos de carga de imagen/archivo +* Campos de mapa/video +* Campos de búsqueda +* Campos de lista de opciones +* Campos que tienen un formato de datos especificado (puede aplicar un formato de datos en el cálculo en su lugar) +* Campos con valores predeterminados (puede aplicar un valor predeterminado en el cálculo en su lugar) -You'll see a clear error message in AppGini explaining why a field can't be set as a calculated field if any of the above conditions apply to that field. +Verá un mensaje de error claro en AppGini que explica por qué un campo no se puede establecer como un campo calculado si alguna de las condiciones anteriores se aplica a ese campo. -![Calculated field error in AppGini.](https://cdn.bigprof.com/appgini-desktop/help/calculated-field-error-message-for-non-read-only-field.png) +![Error de campo calculado en AppGini.](https://cdn.bigprof.com/appgini-desktop/help/calculated-field-error-message-for-non-read-only-field.png) -Also, if you set a field as a calculated field, and later on make some changes to the field that prevent it from being a calculated field, you'll see a warning when generating the app that the calculation will be skipped, along with reason for skipping: +Además, si establece un campo como un campo calculado y luego realiza algunos cambios en el campo que impiden que sea un campo calculado, verá una advertencia al generar la aplicación de que se omitirá el cálculo, junto con el motivo de la omisión: -![Calculated field skipped when generating an AppGini app](https://cdn.bigprof.com/screencasts/skipping-calculated-field-on-app-generation.png) +![Campo calculado omitido al generar una aplicación AppGini](https://cdn.bigprof.com/screencasts/skipping-calculated-field-on-app-generation.png) -## How to configure a calculated field +## Cómo configurar un campo calculado -The basic steps are: +Los pasos básicos son: -1. Create the field (if it already exists, make sure it meets the conditions above). -2. Set the field as read-only. -3. Navidate to the _Calculated field_ tab and check the option _Automatically calculate the value of this field using the following SQL query_ -4. Type the SQL query for calculating the field value. +1. Cree el campo (si ya existe, asegúrese de que cumpla las condiciones anteriores). +2. Establezca el campo como de solo lectura. +3. Vaya a la pestaña _Campo calculado_ y marque la opción _Calcular automáticamente el valor de este campo utilizando la siguiente consulta SQL_ +4. Escriba la consulta SQL para calcular el valor del campo. ![](https://cdn.bigprof.com/screencasts/configure-calculated-field.gif) -**Important note**: +**Nota importante**: -Valid SQL queries for calculated fields must be `SELECT` queries that return a single value. The returned value should be of the same data type as the calculated field. -For example, this is a valid query to calculate the subtotal of an invoice line by multiplying the unit price by the quantity: +Las consultas SQL válidas para campos calculados deben ser consultas `SELECT` que devuelvan un solo valor. El valor devuelto debe ser del mismo tipo de datos que el campo calculado. +Por ejemplo, esta es una consulta válida para calcular el subtotal de una línea de factura multiplicando el precio unitario por la cantidad: ```sql -SELECT quantity * unit_price FROM invoice_items WHERE id='%ID%' +SELECT cantidad * precio_unitario FROM items_factura WHERE id='%ID%' ``` -## Special variables for use in calculated field queries +## Variables especiales para usar en consultas de campos calculados -In the above query, we're using the special variable `%ID%`. When executing the query, this would be replaced by the primary key value of the current record. The following variables can be used in queries: +En la consulta anterior, estamos utilizando la variable especial `%ID%`. Al ejecutar la consulta, esto se reemplazaría por el valor de la clave principal del registro actual. Se pueden utilizar las siguientes variables en las consultas: -* `%ID%` Will be replaced with the ID (primary key) value of the current record before executing the query. -* `%USERNAME%` Will be replaced with the currently logged username before executing the query. -* `%GROUPID%` Will be replaced with the group ID of the currently logged username before executing the query. -* `%GROUP%` Will be replaced with the group name of the currently logged username before executing the query. -* `%TABLENAME%` Will be replaced with the name of the table containing the calculated field before executing the query. -* `%PKFIELD%` Will be replaced with the name of the primary key field of the table containing the calculated field before executing the query. +* `%ID%` Se reemplazará con el valor de ID (clave principal) del registro actual antes de ejecutar la consulta. +* `%USERNAME%` Se reemplazará con el nombre de usuario actualmente conectado antes de ejecutar la consulta. +* `%GROUPID%` Se reemplazará con el ID de grupo del nombre de usuario actualmente conectado antes de ejecutar la consulta. +* `%GROUP%` Se reemplazará con el nombre de grupo del nombre de usuario actualmente conectado antes de ejecutar la consulta. +* `%TABLENAME%` Se reemplazará con el nombre de la tabla que contiene el campo calculado antes de ejecutar la consulta. +* `%PKFIELD%` Se reemplazará con el nombre del campo de clave principal de la tabla que contiene el campo calculado antes de ejecutar la consulta. -Please make sure to use single quotes around the above variables when using them in queries. You don't have to manually type the variable into the query in AppGini; you can place the cursor at the location where you want to insert the variable, and then click the desired variable at the right as shown in this screenshot: +Asegúrese de utilizar comillas simples alrededor de las variables anteriores cuando las utilice en las consultas. No tiene que escribir manualmente la variable en la consulta en AppGini; puede colocar el cursor en la ubicación donde desea insertar la variable y luego hacer clic en la variable deseada a la derecha como se muestra en esta captura de pantalla: ![](https://cdn.bigprof.com/screencasts/inserting-placeholders-into-queries-for-calculated-fields-24.12.png) -The above special variables make it easy to write flexible queries that depend on the current user, group, or record. For example, you can use `%USERNAME%` to calculate the total sales made by the currently logged user, or use `%GROUP%` to calculate the total sales made by the group of the currently logged user. `%TABLENAME%` and `%PKFIELD%` can be used to write generic queries that can be copied and pasted to other tables without modification. +Las variables especiales anteriores facilitan la escritura de consultas flexibles que dependen del usuario, grupo o registro actual. Por ejemplo, puede usar `%USERNAME%` para calcular las ventas totales realizadas por el usuario actualmente conectado, o usar `%GROUP%` para calcular las ventas totales realizadas por el grupo del usuario actualmente conectado. `%TABLENAME%` y `%PKFIELD%` se pueden usar para escribir consultas genéricas que se pueden copiar y pegar en otras tablas sin modificaciones. -## The query helper +## El ayudante de consultas -For quicker and more precise query entry, we recommend using the _query helper_. Click the _Query helper_ button below the query box to launch the query helper window, which looks like this: +Para una entrada de consultas más rápida y precisa, recomendamos utilizar el _ayudante de consultas_. Haga clic en el botón _Ayudante de consultas_ debajo del cuadro de consulta para iniciar la ventana del ayudante de consultas, que se ve así: ![](https://cdn.bigprof.com/screencasts/calculated-field-query-helper.png) -The query helper window allows you to quickly insert various special code pieces into your SQL query. Just place the cursor at the position where you want to insert the piece of code, then choose the code you want to insert from the boxes at the right or the bottom of the query box, then click the _Insert_ button. +La ventana del ayudante de consultas le permite insertar rápidamente varias piezas de código especiales en su consulta SQL. Simplemente coloque el cursor en la posición donde desea insertar la pieza de código, luego elija el código que desea insertar de los cuadros a la derecha o en la parte inferior del cuadro de consulta, luego haga clic en el botón _Insertar_. -You can insert special variables (as explained above), field names, SQL functions, or JOIN statements that join the table of the calculated field with one or more of its parent or child tables. This not only saves you time for manually typing these snippets, but also reduces typos and syntax errors. +Puede insertar variables especiales (como se explicó anteriormente), nombres de campos, funciones SQL o sentencias JOIN que unen la tabla del campo calculado con una o más de sus tablas principales o secundarias. Esto no solo le ahorra tiempo para escribir manualmente estos fragmentos, sino que también reduce los errores tipográficos y de sintaxis. -Of course, using calculated fields requires some knowledge of SQL language, specifically SQL SELECT statement. There are many great [SQL tutorials](https://www.w3schools.com/sql/sql_select.asp) available online, as well as the [official MySQL reference](https://dev.mysql.com/doc/refman/8.0/en/select.html). We'll also list a few examples below that cover some widely-used scenarios. You can also [ask for help from other users on our forum](https://forums.appgini.com/). +Por supuesto, el uso de campos calculados requiere cierto conocimiento del lenguaje SQL, específicamente la sentencia SQL SELECT. Hay muchos excelentes [tutoriales de SQL](https://www.w3schools.com/sql/sql_select.asp) disponibles en línea, así como la [referencia oficial de MySQL](https://dev.mysql.com/doc/refman/8.0/en/select.html). También enumeraremos algunos ejemplos a continuación que cubren algunos escenarios ampliamente utilizados. También puede [pedir ayuda a otros usuarios en nuestro foro](https://forums.appgini.com/). -In the screencast below, we create a new 'Sales' field in the clients table, and configure it as a calculated field that displays the total of sales made to each client, by retrieving the sum of her paid invoices total. We use the _Query helper_ window to quickly and precisely write the query, including the join between the clients and invoices tables. +En el siguiente screencast, creamos un nuevo campo 'Ventas' en la tabla de clientes y lo configuramos como un campo calculado que muestra el total de ventas realizadas a cada cliente, recuperando la suma del total de sus facturas pagadas. Usamos la ventana _Ayudante de consultas_ para escribir la consulta de forma rápida y precisa, incluida la unión entre las tablas de clientes y facturas. <iframe width="706" height="397" src="https://www.youtube.com/embed/oERXyqM3zew?rel=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe> -## Debugging your query +## Depuración de su consulta -You can easily debug your SQL query using [phpMyAdmin](https://www.phpmyadmin.net/) or any similar MySQL admin utility. Select your database, then go to the SQL tab, where you can type or paste your SQL query. Replace `%ID%` with the primary key value of the record you wish to test. Also replace any other variables with their values, if needed. Then execute the query. The query should return a single value, and that should be the value you expect in your calculated field. If this is not the case, or if you see any error messages, you should edit the query and retry until no errors are shown and the expected value is returned. +Puede depurar fácilmente su consulta SQL utilizando [phpMyAdmin](https://www.phpmyadmin.net/) o cualquier utilidad de administración de MySQL similar. Seleccione su base de datos, luego vaya a la pestaña SQL, donde puede escribir o pegar su consulta SQL. Reemplace `%ID%` con el valor de la clave principal del registro que desea probar. También reemplace cualquier otra variable con sus valores, si es necesario. Luego ejecute la consulta. La consulta debe devolver un solo valor, y ese debe ser el valor que espera en su campo calculado. Si este no es el caso, o si ve algún mensaje de error, debe editar la consulta y volver a intentarlo hasta que no se muestren errores y se devuelva el valor esperado. -## Batch-updating calculated fields via command line +## Actualización por lotes de campos calculados mediante la línea de comandos -_Added in AppGini 5.82_ +_Agregado en AppGini 5.82_ -As described in the known issues below, calculated fields are normally updated only when users access them via the table or detail view. Sometimes, you want to update a large number of records without having to access each one. So, we added a command line script for doing that. +Como se describe en los problemas conocidos a continuación, los campos calculados normalmente se actualizan solo cuando los usuarios acceden a ellos a través de la vista de tabla o detallada. A veces, desea actualizar una gran cantidad de registros sin tener que acceder a cada uno. Por lo tanto, agregamos un script de línea de comandos para hacer eso. -Command line means it can't be run from the browser. You can run it only from a terminal window, or [install it to your server's crontab file](https://www.tecmint.com/run-php-script-as-normal-user-via-cron-job-scheduler/) to run it on a schedule. +Línea de comandos significa que no se puede ejecutar desde el navegador. Solo puede ejecutarlo desde una ventana de terminal, o [instalarlo en el archivo crontab de su servidor](https://www.tecmint.com/run-php-script-as-normal-user-via-cron-job-scheduler/) para ejecutarlo según un cronograma. -If your app is hosted on your local Windows PC (for example using [Xampp](https://bigprof.com/appgini/tips-and-tutorials/installing-local-testing-environment-xampp)), you can open a command line terminal by opening the Windows Start menu and typing `cmd` then pressing Enter. +Si su aplicación está alojada en su PC local con Windows (por ejemplo, usando [Xampp](https://bigprof.com/appgini/tips-and-tutorials/installing-local-testing-environment-xampp)), puede abrir una terminal de línea de comandos abriendo el menú Inicio de Windows y escribiendo `cmd` y luego presionando Enter. -If your app is hosted remotely on a Linux server, you need to have shell access and connect to your server via an SSH client (for example [PuTTY](https://www.putty.org/)) +Si su aplicación está alojada de forma remota en un servidor Linux, necesita tener acceso a la shell y conectarse a su servidor a través de un cliente SSH (por ejemplo, [PuTTY](https://www.putty.org/)) -In both cases (Windows and Linux command line), you should navigate to the folder where your AppGini app is hosted and run this command: +En ambos casos (línea de comandos de Windows y Linux), debe navegar a la carpeta donde está alojada su aplicación AppGini y ejecutar este comando: ```bash php cli-update-calculated-fields.php ``` -The above command would update all calculated fields in all tables. However, on large tables, this might take a long time. So, the command line tool provides several options to control its behavior as follows (you can get command line help on the tool by adding `-h` after the above command): +El comando anterior actualizaría todos los campos calculados en todas las tablas. Sin embargo, en tablas grandes, esto podría llevar mucho tiempo. Por lo tanto, la herramienta de línea de comandos proporciona varias opciones para controlar su comportamiento de la siguiente manera (puede obtener ayuda de la línea de comandos sobre la herramienta agregando `-h` después del comando anterior): ``` -Supported arguments: -  -t: comma-separated list of tables to update. -      all tables will be updated if this argument is not specified -  -s: comma-separated list of starting record numbers. -      Default is 0 (beginning of each table) -  -l: comma-separated list of records count to update in each table. -      Default is records count - start -  -x: comma-separated list of tables to exclude from updating, -      overrides -t -  -u: username to use in queries that have %USERNAME% placeholder. -      Default is admin user -  -h: displays this help message - -Examples: +Argumentos admitidos: + -t: lista de tablas separadas por comas para actualizar. + todas las tablas se actualizarán si no se especifica este argumento + -s: lista de números de registro iniciales separados por comas. + El valor predeterminado es 0 (comienzo de cada tabla) + -l: lista de recuentos de registros separados por comas para actualizar en cada tabla. + El valor predeterminado es el recuento de registros - inicio + -x: lista de tablas separadas por comas para excluir de la actualización, + anula -t + -u: nombre de usuario para usar en consultas que tienen el marcador de posición %USERNAME%. + El valor predeterminado es el usuario administrador + -h: muestra este mensaje de ayuda + +Ejemplos: php cli-update-calculated-fields.php -  Updates all records of all tables. Not recommended for large databases. + Actualiza todos los registros de todas las tablas. No recomendado para bases de datos grandes. php cli-update-calculated-fields.php -s 2000 -l 1000 -  Updates 1000 records starting from rec# 2000 in all tables. + Actualiza 1000 registros a partir del registro n.º 2000 en todas las tablas. -php cli-update-calculated-fields.php -t clients,orders -s 100,1000 -l 10,100 -  Updates records 100:110 of clients table and 1000:1100 of orders table. +php cli-update-calculated-fields.php -t clientes,pedidos -s 100,1000 -l 10,100 + Actualiza los registros 100:110 de la tabla de clientes y 1000:1100 de la tabla de pedidos. -php cli-update-calculated-fields.php -x clients -  Updates all records of all tables excluding clients table. +php cli-update-calculated-fields.php -x clientes + Actualiza todos los registros de todas las tablas excluyendo la tabla de clientes. php cli-update-calculated-fields.php -u bob -  Updates all records of all tables as user bob. + Actualiza todos los registros de todas las tablas como usuario bob. ``` -## Basic examples of calculated fields +## Ejemplos básicos de campos calculados -For simple calculations performed on other fields of the same record, we'll list some common examples below. +Para cálculos simples realizados en otros campos del mismo registro, enumeraremos algunos ejemplos comunes a continuación. -### Calculate subtotal for an invoice line by multiplying unit price and quantity +### Calcular el subtotal de una línea de factura multiplicando el precio unitario y la cantidad -Let's assume you have an app for managing invoices. The invoice header (invoice number, due date, customer info, ... etc) is stored in the `invoices` table. Invoice lines (item, quantity, unit price, subtotal) are stored in the `invoice_items` table. You'd like to have the subtotal field automatically calculated when adding or editing an invoice line. +Supongamos que tiene una aplicación para administrar facturas. El encabezado de la factura (número de factura, fecha de vencimiento, información del cliente, etc.) se almacena en la tabla `facturas`. Las líneas de la factura (artículo, cantidad, precio unitario, subtotal) se almacenan en la tabla `items_factura`. Le gustaría que el campo de subtotal se calcule automáticamente al agregar o editar una línea de factura. -To set up this calculation, we'd check the read-only option for the `subtotal` field, then set it as a calculated field, and use this SQL query for calculating its value: +Para configurar este cálculo, marcaríamos la opción de solo lectura para el campo `subtotal`, luego lo estableceríamos como un campo calculado y usaríamos esta consulta SQL para calcular su valor: ```sql SELECT -`invoice_items`.`unit_price` * `invoice_items`.`quantity` -FROM `invoice_items` -WHERE `invoice_items`.`id` = '%ID%' +`items_factura`.`precio_unitario` * `items_factura`.`cantidad` +FROM `items_factura` +WHERE `items_factura`.`id` = '%ID%' ``` -### Automatic code by concatenating 2 or more fields +### Código automático concatenando 2 o más campos -In some data entry scenarios, it's required to create an automatic code given one or more fields in the record. This is typical for product codes, inventory transaction codes, ... etc. +En algunos escenarios de entrada de datos, se requiere crear un código automático a partir de uno o más campos del registro. Esto es típico para códigos de productos, códigos de transacciones de inventario, etc. -For example, let's assume we have a `products` table. When defining a new product, we'd like the product code to be the first 5 letters of the product `name` field, capitalized, followed by department ID, `dept_id`, followed by the characters `SN`, followed by the serial number as obtained from the auto-increment primary key field `product_id`. To set up this coding scheme, we'd create a read-only field, `product_code`, set its data type as `VarChar` of a suitable length, 50 or so, set it as a calculated field, and use this SQL query for calculating its value: +Por ejemplo, supongamos que tenemos una tabla `productos`. Al definir un nuevo producto, nos gustaría que el código del producto sean las primeras 5 letras del campo `nombre` del producto, en mayúsculas, seguido del ID del departamento, `id_dept`, seguido de los caracteres `SN`, seguido del número de serie obtenido del campo de clave principal de incremento automático `id_producto`. Para configurar este esquema de codificación, crearíamos un campo de solo lectura, `codigo_producto`, estableceríamos su tipo de datos como `VarChar` de una longitud adecuada, 50 más o menos, lo estableceríamos como un campo calculado y usaríamos esta consulta SQL para calcular su valor: ```sql SELECT CONCAT( - UPPER(SUBSTRING(`products`.`name`, 1, 5)), - `products`.`dept_id`, + UPPER(SUBSTRING(`productos`.`nombre`, 1, 5)), + `productos`.`id_dept`, 'SN', - `products`.`product_id` -) FROM `products` -WHERE `products`.`product_id` = '%ID%' + `productos`.`id_producto` +) FROM `productos` +WHERE `productos`.`id_producto` = '%ID%' ``` -When a user defines a new product and saves it, the `product_code` field would be set automatically based on the above query to something like `CELLP22SN302`. +Cuando un usuario define un nuevo producto y lo guarda, el campo `codigo_producto` se establecería automáticamente según la consulta anterior en algo como `CELLP22SN302`. -## More advanced examples of calculated fields +## Ejemplos más avanzados de campos calculados -### Updating batch status to 'Consumable', 'Warning' or 'Expired' based on expiry date +### Actualización del estado del lote a 'Consumible', 'Advertencia' o 'Caducado' según la fecha de caducidad -In this example, let's assume we have an inventory app, and for each batch of items we add to inventory, we have an expiry date. We want to automatically update the `status` field of each batch to `Consumable` if expiry date is 30 days or more ahead, `Warning` if less than 30 days ahead, or `Expired` if expiry date is today or older. +En este ejemplo, supongamos que tenemos una aplicación de inventario y, para cada lote de artículos que agregamos al inventario, tenemos una fecha de caducidad. Queremos actualizar automáticamente el campo `estado` de cada lote a `Consumible` si la fecha de caducidad es de 30 días o más en el futuro, `Advertencia` si es de menos de 30 días en el futuro, o `Caducado` si la fecha de caducidad es hoy o anterior. -To do so, we should configure the `status` field as read-only, calculated field, and use a query like this for the calculation: +Para hacerlo, debemos configurar el campo `estado` como de solo lectura, campo calculado, y usar una consulta como esta para el cálculo: ```sql SELECT IF( - DATEDIFF(`expiry_date`, NOW()) > 30, - 'Consumable', + DATEDIFF(`fecha_caducidad`, NOW()) > 30, + 'Consumible', IF( - DATEDIFF(`expiry_date`, NOW()) > 0, - 'Warning', - 'Expired' + DATEDIFF(`fecha_caducidad`, NOW()) > 0, + 'Advertencia', + 'Caducado' ) -) FROM `batches` +) FROM `lotes` WHERE `id` = '%ID%' ``` -Here is a brief explanation of the above query: The SQL `IF()` function accepts 3 parameters: a condition to check, and a value to return if the condition is true, and a value to return if false. For example, `IF(10 > 1, 'yes', 'no')` checks if 10 is greater than 1, and returns either 'yes' if true or 'no' if false. Of course, this should return 'yes'. In the above query, we _nested_ 2 IF expressions to evaluate 3 cases rather than just 2. `DATE_DIFF()` accepts 2 dates and returns the difference between them in days. `NOW()` returns the current date/time. +Aquí hay una breve explicación de la consulta anterior: La función SQL `IF()` acepta 3 parámetros: una condición para verificar, y un valor para devolver si la condición es verdadera, y un valor para devolver si es falsa. Por ejemplo, `IF(10 > 1, 'sí', 'no')` comprueba si 10 es mayor que 1 y devuelve 'sí' si es verdadero o 'no' si es falso. Por supuesto, esto debería devolver 'sí'. En la consulta anterior, _anidamos_ 2 expresiones IF para evaluar 3 casos en lugar de solo 2. `DATE_DIFF()` acepta 2 fechas y devuelve la diferencia entre ellas en días. `NOW()` devuelve la fecha/hora actual. -### Invoice subtotal by summing subtotals of invoice items +### Subtotal de la factura sumando los subtotales de los artículos de la factura -In this example, let's assume we have an `invoices` table that includes a `subtotal` field. We want to calculate the invoice subtotal by summing the subtotals of all lines of the invoice (each line contains a unit price and a quantity that we want to multiply to obtain the line subtotal). We should set the `subtotal` field as read-only calculated field. And here is a query we can use to perform this calculation: +En este ejemplo, supongamos que tenemos una tabla `facturas` que incluye un campo `subtotal`. Queremos calcular el subtotal de la factura sumando los subtotales de todas las líneas de la factura (cada línea contiene un precio unitario y una cantidad que queremos multiplicar para obtener el subtotal de la línea). Debemos establecer el campo `subtotal` como un campo calculado de solo lectura. Y aquí hay una consulta que podemos usar para realizar este cálculo: ```sql SELECT - SUM(`invoice_items`.`unit_price` * `invoice_items`.`quantity`) + SUM(`items_factura`.`precio_unitario` * `items_factura`.`cantidad`) FROM - `invoices` LEFT JOIN - `invoice_items` ON `invoices`.`id` = `invoice_items`.`invoice_id` + `facturas` LEFT JOIN + `items_factura` ON `facturas`.`id` = `items_factura`.`id_factura` WHERE - `invoices`.`id` = '%ID%' + `facturas`.`id` = '%ID%' ``` -In the above query, we are _joining_ the `invoices` table and the `invoice_items` table. Those 2 tables are linked through the `invoice_id` lookup field in `invoice_items` table. Line 5 above performs this join. Line 2 multiplies each invoice item's quantity by its unit price and returns the sum for all items in the current invoice. +En la consulta anterior, estamos _uniendo_ la tabla `facturas` y la tabla `items_factura`. Esas 2 tablas están vinculadas a través del campo de búsqueda `id_factura` en la tabla `items_factura`. La línea 5 anterior realiza esta unión. La línea 2 multiplica la cantidad de cada artículo de la factura por su precio unitario y devuelve la suma de todos los artículos de la factura actual. -## Looking for more help with queries? +## ¿Busca más ayuda con las consultas? -Calculated fields is a very powerful tool, and there are so many different usage scenarios. We tried to cover some common use cases above, but if you need more help, feel free to post your usage case on our [forum](https://forums.appgini.com/). We'll be frequently updating this page with more usage cases, so try also checking it later. +Los campos calculados son una herramienta muy poderosa y existen muchos escenarios de uso diferentes. Intentamos cubrir algunos casos de uso comunes anteriormente, pero si necesita más ayuda, no dude en publicar su caso de uso en nuestro [foro](https://forums.appgini.com/). Actualizaremos con frecuencia esta página con más casos de uso, así que intente consultarla también más tarde. -Please see [this forum topic](https://forums.appgini.com/phpbb/viewtopic.php?f=2&t=4266#p17008) for some excellent notes on calculated fields by Jan from bizzworxx (thanks Jan!). +Consulte [este tema del foro](https://forums.appgini.com/phpbb/viewtopic.php?f=2&t=4266#p17008) para obtener algunas notas excelentes sobre campos calculados de Jan de bizzworxx (¡gracias Jan!). -## Known issues +## Problemas conocidos -The following limitations apply to calculated fields: - -* Calculated fields are re-evaluated every time the record or its child records are accessed in the table view, the detail view, the print preview or the child table view. This could cause some performance issues for complex queries. This can be resolved using [MySQL query caching](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html). -* Calculated fields are evaluated only when their records/child records are accessed. If data that affects the calculation is changed, and you then retrieve the value stored in the calculated field through a third-party app, it won't reflect the changes until it's accessed through your AppGini app itself. -* Similarly, if the calculated field is used as a parent caption field for a lookup field in another table, the lookup drop-down might not display the most up-to-date calculated values until the records of the calculated field are accessed in your AppGini app. - -The simple work-around for the second and third issues above is to access the record(s) containing the calculated field in the table view in your AppGini app to update them. +Las siguientes limitaciones se aplican a los campos calculados: +* Los campos calculados se reevalúan cada vez que se accede al registro o a sus registros secundarios en la vista de tabla, la vista detallada, la vista previa de impresión o la vista de tabla secundaria. Esto podría causar algunos problemas de rendimiento para consultas complejas. Esto se puede resolver usando [el almacenamiento en caché de consultas de MySQL](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html). +* Los campos calculados se evalúan solo cuando se accede a sus registros/registros secundarios. Si se modifican los datos que afectan el cálculo y luego recupera el valor almacenado en el campo calculado a través de una aplicación de terceros, no reflejará los cambios hasta que se acceda a él a través de su propia aplicación AppGini. +* Del mismo modo, si el campo calculado se utiliza como un campo de título principal para un campo de búsqueda en otra tabla, es posible que el menú desplegable de búsqueda no muestre los valores calculados más actualizados hasta que se acceda a los registros del campo calculado en su aplicación AppGini. +La solución simple para el segundo y tercer problema anteriores es acceder al registro(s) que contiene el campo calculado en la vista de tabla en su aplicación AppGini para actualizarlos. diff --git a/pages/configure-google-maps-api-key.md b/pages/configure-google-maps-api-key.md index abaace2..70bb549 100644 --- a/pages/configure-google-maps-api-key.md +++ b/pages/configure-google-maps-api-key.md @@ -1,71 +1,70 @@ --- -title: How to obtain a Google Maps API key? -linkTitle: Google Maps API key +title: ¿Cómo obtener una clave API de Google Maps? +linkTitle: Clave API de Google Maps slug: help/configure-google-maps-api-key -description: Learn how to obtain a Google Maps API key to enable Google Maps support in your AppGini apps. -keywords: google maps, api key, appgini, google cloud console +description: Aprenda cómo obtener una clave API de Google Maps para habilitar la compatibilidad con Google Maps en sus aplicaciones AppGini. +keywords: google maps, clave api, appgini, google cloud console --- -# How to obtain a Google Maps API key? +# ¿Cómo obtener una clave API de Google Maps? -> **TLDR;** To enable [Google Maps support](application-features/input-types.md#google-map) in your AppGini apps, you need to enable Maps Embed API and Maps -> Static API in your Google Cloud console, create an API key and copy it to AppGini. You should also -> [restrict the key](https://developers.google.com/maps/documentation/javascript/get-api-key#restrict_key) to your server IP/domain to avoid abuse. +> **TLDR;** Para habilitar la [compatibilidad con Google Maps](application-features/input-types.md#google-map) en sus aplicaciones AppGini, necesita habilitar Maps Embed API y Maps +> Static API en su consola de Google Cloud, crear una clave API y copiarla en AppGini. También debería +> [restringir la clave](https://developers.google.com/maps/documentation/javascript/get-api-key#restrict_key) a la IP/dominio de su servidor para evitar abusos. -Obtaining a Google API key can be quite challenging due to the complex, ever-changing interface of -Google Cloud console. So, we are listing the specific steps in detail to get you started quickly. +Obtener una clave API de Google puede ser bastante desafiante debido a la interfaz compleja y en constante cambio de +la consola de Google Cloud. Por lo tanto, enumeramos los pasos específicos en detalle para que pueda comenzar rápidamente. -Following are the steps to obtain a Google Maps API key (last updated October 22, 2019). +A continuación se detallan los pasos para obtener una clave API de Google Maps (última actualización el 22 de octubre de 2019). -> **Note:** You need a Google account to proceed. If you don't have one, you should create one first (it's free). +> **Nota:** Necesita una cuenta de Google para continuar. Si no tiene una, primero debe crear una (es gratis). -1. Go to [Google Cloud Console dashboard](https://console.cloud.google.com/home/dashboard) and sign in with your Google credentials if needed. +1. Vaya al [panel de control de Google Cloud Console](https://console.cloud.google.com/home/dashboard) e inicie sesión con sus credenciales de Google si es necesario. -2. Select the default project or a different one from the drop-down on the top left (or create a new one). - ![Select project](https://cdn.bigprof.com/screencasts/google-cloud-platform-dashboard-with-default-project-selected.png "Select project") +2. Seleccione el proyecto predeterminado u otro diferente del menú desplegable en la parte superior izquierda (o cree uno nuevo). + ![Seleccionar proyecto](https://cdn.bigprof.com/screencasts/google-cloud-platform-dashboard-with-default-project-selected.png "Seleccionar proyecto") -3. Open **APIs & Services** menu on the left and click on **Library**. +3. Abra el menú **API y servicios** a la izquierda y haga clic en **Biblioteca**. - ![APIs & Services -> Library](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-menu-library.png "APIs & Services -> Library") + ![API y servicios -> Biblioteca](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-menu-library.png "API y servicios -> Biblioteca") -4. In the next page, type *maps embed* in the search box. This should display some results like so: +4. En la página siguiente, escriba *maps embed* en el cuadro de búsqueda. Esto debería mostrar algunos resultados como este: - ![Search for Maps Embed API](https://cdn.bigprof.com/screencasts/gcp-api-library-search-for-maps-embed.png "Search for Maps Embed API") + ![Buscar Maps Embed API](https://cdn.bigprof.com/screencasts/gcp-api-library-search-for-maps-embed.png "Buscar Maps Embed API") -5. Click on **Maps Embed API** and then click **Enable** button: +5. Haga clic en **Maps Embed API** y luego haga clic en el botón **Habilitar**: - ![Enable Maps Embed API](https://cdn.bigprof.com/screencasts/gcp-api-library-maps-embed-api-enable.png "Enable Maps Embed API") + ![Habilitar Maps Embed API](https://cdn.bigprof.com/screencasts/gcp-api-library-maps-embed-api-enable.png "Habilitar Maps Embed API") -6. If all goes fine, you should see the **Maps Embed API** metrics page: +6. Si todo va bien, debería ver la página de métricas de **Maps Embed API**: - ![Maps Embed API metrics](https://cdn.bigprof.com/screencasts/gcp-maps-embed-api-metrics.png "Maps Embed API metrics") + ![Métricas de Maps Embed API](https://cdn.bigprof.com/screencasts/gcp-maps-embed-api-metrics.png "Métricas de Maps Embed API") -7. Click the "hamburger" button at the top left of the page to open the left navigation menu. From there, open **APIs & Services** and click **Library**: +7. Haga clic en el botón de "hamburguesa" en la parte superior izquierda de la página para abrir el menú de navegación izquierdo. Desde allí, abra **API y servicios** y haga clic en **Biblioteca**: - ![APIs & Services -> Library](https://cdn.bigprof.com/screencasts/gcp-maps-embed-api-navmenu-apis-and-services-library.png "APIs & Services -> Library") + ![API y servicios -> Biblioteca](https://cdn.bigprof.com/screencasts/gcp-maps-embed-api-navmenu-apis-and-services-library.png "API y servicios -> Biblioteca") -8. This should re-open the API search page. Type *maps static* in the search box, then click **Maps Static API** and enable it. +8. Esto debería volver a abrir la página de búsqueda de API. Escriba *maps static* en el cuadro de búsqueda, luego haga clic en **Maps Static API** y habilítela. -9. Next, open the navigation menu » **APIs & Services** » **Credentials**: +9. A continuación, abra el menú de navegación » **API y servicios** » **Credenciales**: - ![APIs & Services -> Credentials](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-credentials-menu.png "APIs & Services -> Credentials") + ![API y servicios -> Credenciales](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-credentials-menu.png "API y servicios -> Credenciales") -10. In the credentials page, click the button **Create credentials** and select **API key** from the menu: +10. En la página de credenciales, haga clic en el botón **Crear credenciales** y seleccione **Clave API** del menú: - ![Create API key](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-credentials-create-api-key.png "Create API key") + ![Crear clave API](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-credentials-create-api-key.png "Crear clave API") -11. You should see a dialog containing your API key, similar to this: - - ![API key dialog](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-api-key-created.png "API key dialog") +11. Debería ver un cuadro de diálogo que contiene su clave API, similar a este: -12. Google allows a free usage quota that is generous enough for most small apps. We highly recommend that you choose - [**Restrict key**](https://developers.google.com/maps/documentation/javascript/get-api-key#restrict_key) - and follow the instructions to limit key usage to your server IP/domain to avoid someone stealing - and abusing your key, causing unnecessary costs. + ![Cuadro de diálogo de clave API](https://cdn.bigprof.com/screencasts/gcp-apis-and-services-api-key-created.png "Cuadro de diálogo de clave API") -Your API key is finally ready to copy and use in your AppGini apps. To do so, sign in to your AppGini app as the super admin, -then go to the **Admin Area** » **Utilities** menu » **Admin settings**. Under the **Application** tab, paste your API key in the -**Google Maps API key** field and save the settings. +12. Google permite una cuota de uso gratuito que es lo suficientemente generosa para la mayoría de las aplicaciones pequeñas. Le recomendamos encarecidamente que elija + [**Restringir clave**](https://developers.google.com/maps/documentation/javascript/get-api-key#restrict_key) + y siga las instrucciones para limitar el uso de la clave a la IP/dominio de su servidor para evitar que alguien robe + y abuse de su clave, causando costos innecesarios. -![Paste API key in AppGini](https://cdn.bigprof.com/images/google-maps-api-key-setting.png "Paste API key in AppGini") +Su clave API finalmente está lista para copiar y usar en sus aplicaciones AppGini. Para hacerlo, inicie sesión en su aplicación AppGini como superadministrador, +luego vaya al **Área de administración** » menú **Utilidades** » **Configuración de administración**. En la pestaña **Aplicación**, pegue su clave API en el +campo **Clave API de Google Maps** y guarde la configuración. +![Pegar clave API en AppGini](https://cdn.bigprof.com/images/google-maps-api-key-setting.png "Pegar clave API en AppGini") diff --git a/pages/connect-redash-to-appgini.md b/pages/connect-redash-to-appgini.md index f8539d3..91aa7c3 100644 --- a/pages/connect-redash-to-appgini.md +++ b/pages/connect-redash-to-appgini.md @@ -1,137 +1,136 @@ --- -title: From Data to Dashboards, A Guide to Redash Integration with AppGini -linkTitle: Redash Integration +title: De datos a paneles de control, una guía para la integración de Redash con AppGini +linkTitle: Integración de Redash slug: help/connect-redash-to-appgini -keywords: redash, appgini, integration, dashboard, data visualization, sql, mysql, data source, query, visualization, chart, dashboard, alert, performance, read replica -description: Learn how to integrate Redash with AppGini to create interactive visualizations, build dynamic dashboards, and share insights with your team. +keywords: redash, appgini, integración, panel de control, visualización de datos, sql, mysql, fuente de datos, consulta, visualización, gráfico, panel de control, alerta, rendimiento, réplica de lectura +description: Aprenda a integrar Redash con AppGini para crear visualizaciones interactivas, crear paneles dinámicos y compartir información con su equipo. --- -# From Data to Dashboards, A Guide to Redash Integration with AppGini +# De datos a paneles de control, una guía para la integración de Redash con AppGini -![Redash dashboard example](https://cdn.bigprof.com/images/redash-dashboard-example-2.png) +![Ejemplo de panel de control de Redash](https://cdn.bigprof.com/images/redash-dashboard-example-2.png) -## What is Redash? +## ¿Qué es Redash? -[Redash](https://redash.io) is an open-source data visualization and dashboarding tool that allows users to connect to various data sources, create interactive visualizations, and build dynamic dashboards. It provides a user-friendly interface for querying and exploring data, making it easier for non-technical users to access and analyze data. +[Redash](https://redash.io) es una herramienta de visualización de datos y creación de paneles de control de código abierto que permite a los usuarios conectarse a diversas fuentes de datos, crear visualizaciones interactivas y crear paneles dinámicos. Proporciona una interfaz fácil de usar para consultar y explorar datos, lo que facilita el acceso y el análisis de datos a los usuarios no técnicos. -Redash supports a wide range of data sources, including relational databases (e.g. MySQL databases used in [AppGini applications](https://bigprof.com/appgini/)), NoSQL databases, cloud storage services, and APIs. It allows users to write queries using SQL or other query languages specific to the data source and visualize the results in different chart types such as bar charts, line charts, pie charts, and more. +Redash admite una amplia gama de fuentes de datos, incluidas bases de datos relacionales (por ejemplo, bases de datos MySQL utilizadas en [aplicaciones AppGini](https://bigprof.com/appgini/)), bases de datos NoSQL, servicios de almacenamiento en la nube y API. Permite a los usuarios escribir consultas utilizando SQL u otros lenguajes de consulta específicos de la fuente de datos y visualizar los resultados en diferentes tipos de gráficos, como gráficos de barras, gráficos de líneas, gráficos circulares y más. -## Installing Redash on your server +## Instalación de Redash en su servidor -Redash is a stack of several components, including a Python web application, a PostgreSQL database, a Redis server, and several other components. It can be installed on a Linux server using Docker, or on a Windows server using a virtual machine. The installation process is documented in detail in the [Redash documentation](https://redash.io/help/open-source/setup). +Redash es una pila de varios componentes, que incluye una aplicación web Python, una base de datos PostgreSQL, un servidor Redis y varios otros componentes. Se puede instalar en un servidor Linux usando Docker, o en un servidor Windows usando una máquina virtual. El proceso de instalación está documentado en detalle en la [documentación de Redash](https://redash.io/help/open-source/setup). -Setting up Redash can be a bit challenging, especially if you're not familiar with Docker. If you're not comfortable with the installation process, we can help you set up Redash for a small fee. Please [contact us](https://bigprof.com/appgini/support-request) for details. +Configurar Redash puede ser un poco desafiante, especialmente si no está familiarizado con Docker. Si no se siente cómodo con el proceso de instalación, podemos ayudarlo a configurar Redash por una pequeña tarifa. [Contáctenos](https://bigprof.com/appgini/support-request) para obtener más detalles. -## Connecting Redash to your AppGini application +## Conexión de Redash a su aplicación AppGini -Once you have Redash installed and running, you can connect it to your AppGini application. To do this, you'll need to create a MySQL user _with read-only access_ to your AppGini database. Why read-only access? Because Redash will be running read-only queries against your database, and it's a good idea to limit its access to avoid any accidental changes to your data. +Una vez que tenga Redash instalado y funcionando, puede conectarlo a su aplicación AppGini. Para hacer esto, deberá crear un usuario de MySQL _con acceso de solo lectura_ a su base de datos AppGini. ¿Por qué acceso de solo lectura? Porque Redash ejecutará consultas de solo lectura en su base de datos, y es una buena idea limitar su acceso para evitar cambios accidentales en sus datos. -To create a read-only user, you can use the following SQL query in phpMyAdmin or any other MySQL client: +Para crear un usuario de solo lectura, puede usar la siguiente consulta SQL en phpMyAdmin o cualquier otro cliente MySQL: ```sql -CREATE USER 'redash'@'%' IDENTIFIED BY 'strong-password'; -GRANT SELECT ON `your-database-name`.* TO 'redash'@'%'; +CREATE USER 'redash'@'%' IDENTIFIED BY 'contraseña-segura'; +GRANT SELECT ON `nombre-de-su-base-de-datos`.* TO 'redash'@'%'; ``` -Replace `strong-password` with a strong password of your choice, and `your-database-name` with the name of your AppGini database. If you're not sure about the name of your database, you can find it in the `config.php` file in your AppGini application's folder. +Reemplace `contraseña-segura` con una contraseña segura de su elección, y `nombre-de-su-base-de-datos` con el nombre de su base de datos AppGini. Si no está seguro del nombre de su base de datos, puede encontrarlo en el archivo `config.php` en la carpeta de su aplicación AppGini. -Once you've created the user, you can connect Redash to your AppGini database by following the steps below: +Una vez que haya creado el usuario, puede conectar Redash a su base de datos AppGini siguiendo los pasos a continuación: -1. Log in to Redash as an admin user. -2. Click on the "Settings" link in the bottom-left corner of the page. -3. Click on "Data Sources" in the left sidebar, then click on the "New Data Source" button. -4. In the search box, type "MySQL", then click on the "MySQL" data source. -5. You'll be asked to provide a name for the data source. You can use "AppGini" or any other name you like. -6. In the "Host" field, enter the IP address or hostname of your MySQL server. If you're running Redash on the same server as your AppGini application, you can usually use `localhost`. -7. Leave the "Port" field empty unless you're using a non-standard port for MySQL. -8. Provide the username and password you created earlier. -9. If your MySQL server is configured to use SSL, you can enable SSL by checking the "Use SSL" checkbox. -10. Click on the "Create" button to save the data source. -11. Next, click the "Test Connection" button to make sure Redash can connect to your AppGini database. -12. If the connection test is successful, click on the "Save" button to save the data source. +1. Inicie sesión en Redash como usuario administrador. +2. Haga clic en el enlace "Configuración" en la esquina inferior izquierda de la página. +3. Haga clic en "Fuentes de datos" en la barra lateral izquierda, luego haga clic en el botón "Nueva fuente de datos". +4. En el cuadro de búsqueda, escriba "MySQL", luego haga clic en la fuente de datos "MySQL". +5. Se le pedirá que proporcione un nombre para la fuente de datos. Puede usar "AppGini" o cualquier otro nombre que desee. +6. En el campo "Host", ingrese la dirección IP o el nombre de host de su servidor MySQL. Si está ejecutando Redash en el mismo servidor que su aplicación AppGini, generalmente puede usar `localhost`. +7. Deje el campo "Puerto" vacío a menos que esté utilizando un puerto no estándar para MySQL. +8. Proporcione el nombre de usuario y la contraseña que creó anteriormente. +9. Si su servidor MySQL está configurado para usar SSL, puede habilitar SSL marcando la casilla de verificación "Usar SSL". +10. Haga clic en el botón "Crear" para guardar la fuente de datos. +11. A continuación, haga clic en el botón "Probar conexión" para asegurarse de que Redash pueda conectarse a su base de datos AppGini. +12. Si la prueba de conexión es exitosa, haga clic en el botón "Guardar" para guardar la fuente de datos. -### Here is a screencast showing the above steps +### Aquí hay una demostración en video que muestra los pasos anteriores <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/redash-add-appgini-mysql-data-source.mp4" type="video/mp4"> -Your browser does not support the video tag. +Su navegador no admite la etiqueta de video. </video> -## Creating a query in Redash +## Creación de una consulta en Redash -Once you've connected Redash to your AppGini database, you can start creating queries. To create a new query, follow these steps: +Una vez que haya conectado Redash a su base de datos AppGini, puede comenzar a crear consultas. Para crear una nueva consulta, siga estos pasos: -1. Click on the "Queries" link in the left sidebar. -2. Click on the "New Query" button. -3. Select the "AppGini" data source you created earlier from the "Data Source" dropdown at the top left of the page. -4. In the "Query" field, enter your SQL query. You can use the "Schema" tree on the left to browse the tables and fields in your database and click the » button next to a table or field to insert it into your query. -5. Click on the "Execute" button to run the query and see the results. -6. If the query runs successfully, click on the "Save" button to save the query. You should give it a name that describes what the query does. -7. You can optionally click on the "Visualize" button to create a visualization of the query results. You can choose from a variety of chart types, including bar charts, line charts, pie charts, and more. -8. Once you're done, click on the "Save" button to save the visualization. -9. In order to be able to display the query results or visualization in a dashboard, you should click the "Publish" button. This will also make the query or visualization available to other users of Redash. +1. Haga clic en el enlace "Consultas" en la barra lateral izquierda. +2. Haga clic en el botón "Nueva consulta". +3. Seleccione la fuente de datos "AppGini" que creó anteriormente en el menú desplegable "Fuente de datos" en la parte superior izquierda de la página. +4. En el campo "Consulta", ingrese su consulta SQL. Puede usar el árbol "Esquema" a la izquierda para explorar las tablas y los campos de su base de datos y hacer clic en el botón » junto a una tabla o campo para insertarlo en su consulta. +5. Haga clic en el botón "Ejecutar" para ejecutar la consulta y ver los resultados. +6. Si la consulta se ejecuta correctamente, haga clic en el botón "Guardar" para guardar la consulta. Debe darle un nombre que describa lo que hace la consulta. +7. Opcionalmente, puede hacer clic en el botón "Visualizar" para crear una visualización de los resultados de la consulta. Puede elegir entre una variedad de tipos de gráficos, incluidos gráficos de barras, gráficos de líneas, gráficos circulares y más. +8. Una vez que haya terminado, haga clic en el botón "Guardar" para guardar la visualización. +9. Para poder mostrar los resultados de la consulta o la visualización en un panel de control, debe hacer clic en el botón "Publicar". Esto también hará que la consulta o visualización esté disponible para otros usuarios de Redash. -### Here is a screencast showing the above steps +### Aquí hay una demostración en video que muestra los pasos anteriores <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/redash-create-and-publish-query.mp4" type="video/mp4"> -Your browser does not support the video tag. +Su navegador no admite la etiqueta de video. </video> -> **HINT!** You can use the [DataTalk plugin for AppGini](https://bigprof.com/appgini/applications/datatalk-plugin) to create the queries you need in Redash. +> **¡SUGERENCIA!** Puede usar el [plugin DataTalk para AppGini](https://bigprof.com/appgini/applications/datatalk-plugin) para crear las consultas que necesita en Redash. -The plugin allows you to create queries by just describing them in plain English. Here is a video showing how it works: +El plugin le permite crear consultas simplemente describiéndolas en lenguaje natural. Aquí hay un video que muestra cómo funciona: <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/use-datatalk-plugin-to-create-redash-queries.mp4" type="video/mp4"> -Your browser does not support the video tag. +Su navegador no admite la etiqueta de video. </video> -DataTalk plugin saves you the hassle of writing complex SQL queries. And you don't need to remember the names of tables and fields in your database or even care about misspelling them. Just describe what you need in plain English and the plugin will take care of the rest! +¡El plugin DataTalk le ahorra la molestia de escribir consultas SQL complejas. Y no necesita recordar los nombres de las tablas y los campos de su base de datos ni preocuparse por escribirlos mal. Simplemente describa lo que necesita en lenguaje natural y el plugin se encargará del resto! -## Creating a dashboard in Redash +## Creación de un panel de control en Redash -![Redash dashboard example](https://cdn.bigprof.com/images/redash-dashboard-example-2.png) +![Ejemplo de panel de control de Redash](https://cdn.bigprof.com/images/redash-dashboard-example-2.png) -Dashboards in Redash are made up of widgets. Each widget can display the results of a query or a visualization. To create a dashboard, follow these steps: +Los paneles de control en Redash se componen de widgets. Cada widget puede mostrar los resultados de una consulta o una visualización. Para crear un panel de control, siga estos pasos: -1. Click on the "Dashboards" link in the left sidebar. -2. Click on the "New Dashboard" button. -3. Give your dashboard a name and click on the "Save" button. -4. Click on the "Add Widget" button. -5. Select the query you want to display in the widget from the "Query" dropdown. -6. Select the visualization type you want to use from the "Visualization" dropdown. -7. Click on the "Add to Dashboard" button to add the widget to your dashboard. -8. You can move and resize the widget to control its position and size on the dashboard. -9. Repeat steps 4-8 to add more widgets to your dashboard. -10. Finally, click on the "Done Editing" button to save the dashboard. -11. If you want to share the dashboard with other Redash users, you can click on the "Publish" button. +1. Haga clic en el enlace "Paneles de control" en la barra lateral izquierda. +2. Haga clic en el botón "Nuevo panel de control". +3. Dé un nombre a su panel de control y haga clic en el botón "Guardar". +4. Haga clic en el botón "Agregar widget". +5. Seleccione la consulta que desea mostrar en el widget en el menú desplegable "Consulta". +6. Seleccione el tipo de visualización que desea utilizar en el menú desplegable "Visualización". +7. Haga clic en el botón "Agregar al panel de control" para agregar el widget a su panel de control. +8. Puede mover y cambiar el tamaño del widget para controlar su posición y tamaño en el panel de control. +9. Repita los pasos 4-8 para agregar más widgets a su panel de control. +10. Finalmente, haga clic en el botón "Terminar edición" para guardar el panel de control. +11. Si desea compartir el panel de control con otros usuarios de Redash, puede hacer clic en el botón "Publicar". -## Creating alerts in Redash +## Creación de alertas en Redash -Redash allows you to create alerts that will be triggered when the results of a query meet certain conditions. For example, you can create an alert that will send an email to a user when the number of orders in the last 24 hours exceeds a certain threshold. To create an alert, you should configure the underlying query to automatically refresh periodically. You also need to configure alert destinations, which can be email addresses, Slack channels, webhooks, or several other destinations. +Redash le permite crear alertas que se activarán cuando los resultados de una consulta cumplan ciertas condiciones. Por ejemplo, puede crear una alerta que envíe un correo electrónico a un usuario cuando el número de pedidos en las últimas 24 horas supere un cierto umbral. Para crear una alerta, debe configurar la consulta subyacente para que se actualice automáticamente periódicamente. También necesita configurar destinos de alerta, que pueden ser direcciones de correo electrónico, canales de Slack, webhooks o varios otros destinos. -Here is an example of an alert that sends an email to the sales team when the number of orders in the last 7 days is zero: +Aquí hay un ejemplo de una alerta que envía un correo electrónico al equipo de ventas cuando el número de pedidos en los últimos 7 días es cero: -![Redash alert example](https://cdn.bigprof.com/images/redash-alert-example.png) +![Ejemplo de alerta de Redash](https://cdn.bigprof.com/images/redash-alert-example.png) -## Dive deeper into Redash +## Profundice en Redash -Redash has a very informative video playlist on YouTube that goes into more details about creating queries and dashboards. We've included the videos below for your convenience: +Redash tiene una lista de reproducción de videos muy informativa en YouTube que entra en más detalles sobre la creación de consultas y paneles de control. Hemos incluido los videos a continuación para su conveniencia: <div style="position: relative; width: 100%; padding-bottom: 56.25%; overflow: hidden;"> -<iframe src="https://www.youtube-nocookie.com/embed/videoseries?si=pjSO5KiJFM2Dx5UD&list=PLMIFYdGfSFcwzkOL7UIN1-Zou5URg2cDE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe> +<iframe src="https://www.youtube-nocookie.com/embed/videoseries?si=pjSO5KiJFM2Dx5UD&list=PLMIFYdGfSFcwzkOL7UIN1-Zou5URg2cDE" title="Reproductor de video de YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe> </div> -## Performance considerations when using Redash +## Consideraciones de rendimiento al usar Redash -Redash is a great tool for visualizing data from your AppGini application. However, users can create complex queries that can put a heavy load on your database server. Moreover, Redash allows users to create queries and dashboards that auto refresh periodically -- sometimes as frequently as every minute or so. This can put a heavy load on your database server, especially if you have a large number of users. +Redash es una gran herramienta para visualizar datos de su aplicación AppGini. Sin embargo, los usuarios pueden crear consultas complejas que pueden suponer una gran carga para su servidor de base de datos. Además, Redash permite a los usuarios crear consultas y paneles de control que se actualizan automáticamente periódicamente, a veces con una frecuencia de cada minuto aproximadamente. Esto puede suponer una gran carga para su servidor de base de datos, especialmente si tiene una gran cantidad de usuarios. -One way to avoid this, without limiting the functionality of Redash, is to [set up a separate read replica of your MySQL database](https://www.digitalocean.com/community/tutorials/how-to-set-up-replication-in-mysql) and connect Redash to it instead of the main database. This way, Redash users will be querying the read replica instead of the main database, and this will not affect the performance of your AppGini application. +Una forma de evitar esto, sin limitar la funcionalidad de Redash, es [configurar una réplica de lectura separada de su base de datos MySQL](https://www.digitalocean.com/community/tutorials/how-to-set-up-replication-in-mysql) y conectar Redash a ella en lugar de a la base de datos principal. De esta manera, los usuarios de Redash consultarán la réplica de lectura en lugar de la base de datos principal, y esto no afectará el rendimiento de su aplicación AppGini. -## Conclusion +## Conclusión -Throughout this tutorial, we've covered the integration of [Redash](https://redash.io/) with [AppGini](https://bigprof.com/appgini/) to unlock advanced data visualization and dashboarding capabilities. You've learned how to set up Redash on your server, connect it to your AppGini database with enhanced security through read-only access, and utilize the [DataTalk plugin](https://bigprof.com/appgini/applications/datatalk-plugin) to facilitate query creation without deep SQL knowledge. The step-by-step guidance provided should now empower you to create insightful visualizations, build interactive dashboards, and share your findings with ease. - -As you apply these new skills, keep in mind the performance considerations vital for maintaining your application's responsiveness—especially the strategy of employing a read replica for your database to mitigate the load from complex and frequent queries. With Redash as your tool of choice, you are well-positioned to elevate the data experience for your team and stakeholders, ensuring your data is not just informative but also actionable. +A lo largo de este tutorial, hemos cubierto la integración de [Redash](https://redash.io/) con [AppGini](https://bigprof.com/appgini/) para desbloquear capacidades avanzadas de visualización de datos y creación de paneles de control. Ha aprendido a configurar Redash en su servidor, conectarlo a su base de datos AppGini con seguridad mejorada a través del acceso de solo lectura y utilizar el [plugin DataTalk](https://bigprof.com/appgini/applications/datatalk-plugin) para facilitar la creación de consultas sin un conocimiento profundo de SQL. La guía paso a paso proporcionada ahora debería permitirle crear visualizaciones perspicaces, crear paneles interactivos y compartir sus hallazgos con facilidad. +A medida que aplique estas nuevas habilidades, tenga en cuenta las consideraciones de rendimiento vitales para mantener la capacidad de respuesta de su aplicación, especialmente la estrategia de emplear una réplica de lectura para su base de datos para mitigar la carga de consultas complejas y frecuentes. Con Redash como su herramienta de elección, está bien posicionado para elevar la experiencia de datos para su equipo y partes interesadas, asegurando que sus datos no solo sean informativos sino también procesables. diff --git a/pages/contribute.md b/pages/contribute.md index cc5d7d4..aba24ff 100644 --- a/pages/contribute.md +++ b/pages/contribute.md @@ -1,21 +1,20 @@ --- -title: Contribute to AppGini documentation -linkTitle: Contribute! +title: Contribuir a la documentación de AppGini +linkTitle: ¡Contribuya! slug: help/contribute -description: Contribute to AppGini documentation by submitting pull requests to the GitHub repository. -keywords: contribute, help, documentation, open-source, GitHub, pull requests +description: Contribuya a la documentación de AppGini enviando pull requests al repositorio de GitHub. +keywords: contribuir, ayuda, documentación, código abierto, GitHub, pull requests --- -# Contribute to AppGini documentation +# Contribuir a la documentación de AppGini -The content of this documentation is hosted on GitHub and is open-source. This means you can contribute to it by submitting pull requests to the -[GitHub repository](https://github.com/bigprof-software/appgini-docs). This can be done very easily by clicking the "Edit this page on GitHub" link -at the top of each page. +El contenido de esta documentación está alojado en GitHub y es de código abierto. Esto significa que puede contribuir enviando pull requests al +[repositorio de GitHub](https://github.com/bigprof-software/appgini-docs). Esto se puede hacer muy fácilmente haciendo clic en el enlace "Editar esta página en GitHub" +en la parte superior de cada página. -The following video shows how to contribute to the documentation. Please note that the video was recorded before updating the documentation theme, so the appearance of the documentation has changed since then. However, the process of contributing is still the same: +El siguiente video muestra cómo contribuir a la documentación. Tenga en cuenta que el video se grabó antes de actualizar el tema de la documentación, por lo que la apariencia de la documentación ha cambiado desde entonces. Sin embargo, el proceso de contribución sigue siendo el mismo: <iframe width="700" height="394" src="https://www.youtube.com/embed/Apd5A0wu6qw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> -> By contributing to the documentation, you help other users and make AppGini better for everyone. Thank you for your help! - +> Al contribuir a la documentación, ayuda a otros usuarios y mejora AppGini para todos. ¡Gracias por su ayuda! diff --git a/pages/create-mysql-database-and-user.md b/pages/create-mysql-database-and-user.md index 68d4fdc..415afbf 100644 --- a/pages/create-mysql-database-and-user.md +++ b/pages/create-mysql-database-and-user.md @@ -1,112 +1,111 @@ --- -title: How to create a MySQL/MariaDB database and user -linkTitle: Create MySQL database and user +title: Cómo crear una base de datos y un usuario MySQL/MariaDB +linkTitle: Crear base de datos y usuario MySQL slug: help/create-mysql-database-and-user -keywords: create mysql database, create mysql user, create mariadb database, create mariadb user, cpanel, phpmyadmin, command line -description: Learn how to create a MySQL or MariaDB database and user using cPanel, phpMyAdmin, or the command line. +keywords: crear base de datos mysql, crear usuario mysql, crear base de datos mariadb, crear usuario mariadb, cpanel, phpmyadmin, línea de comandos +description: Aprenda a crear una base de datos y un usuario MySQL o MariaDB utilizando cPanel, phpMyAdmin o la línea de comandos. --- -# How to create a MySQL/MariaDB database and user - -Before you can use your AppGini-generated web database application, -you need to have a MySQL or MariaDB database and a user with -permissions to access and modify the database. - -Sometimes, your hosting provider will create the database and user for you. -In this case, you'll usually receive an email with the database details. But -in most cases, you'll need to create the database and user yourself. - -## Creating a database and user using cPanel - -Most shared hosting providers offer cPanel, a web-based control panel that -makes it easy to manage your hosting account. Here are the general steps to -create a database and user using cPanel: - -1. Log in to your cPanel account. -2. Look for a section named 'Databases' and click on 'MySQL Databases'. -3. In the 'Create New Database' section, enter a name for your database and click 'Create Database'. - You should specify a name that is relevant to your application, as you might have multiple databases - on your hosting account. So, it would be easier to identify the database later on. - ![Create new database in cPanel](https://cdn.bigprof.com/images/cpanel-create-database.jpeg "Create new database in cPanel") -4. After creating the database, scroll down to the 'Add New User' section. -5. Enter a username and password for the new user and click 'Create User'. - Make sure to use a strong password. You can use the 'Password Generator' tool to create a strong password. - > Please take note of the database name, username, and password you've just created. You'll need them - when setting up your AppGini-generated web database application. -6. After creating the user, scroll down to the 'Add User to Database' section. -7. Select the user you created from the 'User' dropdown and the database you created from the 'Database' dropdown. -8. Click 'Add'. -9. On the next screen, select 'All Privileges' and click 'Make Changes'. - > Selecting 'All Privileges' will give the user full access to the database. This is - needed for your AppGini-generated application to be able to create tables and manage data. - But if your database schema has already been created and you don't plan to modify it, - you can uncheck the 'Create', 'Alter', and 'Drop' privileges. - -That's it! You've successfully created a database and user for your AppGini-generated web database application. -The next step is to [set up your AppGini-generated application](working-with-generated-web-database-application/setup.md) - -> If your hosting provider provides another control panel, like Plesk, the steps might be slightly different -> but the general idea is the same. You can refer to your hosting provider's documentation for more details. - -## Creating a database and user using phpMyAdmin - -Your hosting provider might offer phpMyAdmin, a web-based tool that allows you to manage MySQL databases. -You can create a database and user using phpMyAdmin as follows: - -1. Log in to your phpMyAdmin account. -2. Click on the 'Databases' tab. -3. Enter a name for your database in the 'Create database' field and click 'Create'. - ![Create database in phpMyAdmin](https://cdn.bigprof.com/images/phpmyadmin-new-database.png "Create database in phpMyAdmin") -4. Click on the 'Privileges' tab. -5. Click 'Add user account'. -6. Enter a username and password for the new user. -7. In the 'Database for user account' section, select the database you created. -8. Click 'Go'. -9. On the next screen, select 'All Privileges' and click 'Go'. - > Selecting 'All Privileges' will give the user full access to the database. This is - needed for your AppGini-generated application to be able to create tables and manage data. - But if your database schema has already been created and you don't plan to modify it, - you can uncheck the 'Create', 'Alter', and 'Drop' privileges. - -That's it! You've successfully created a database and user for your AppGini-generated web database application. -The next step is to [set up your AppGini-generated application](working-with-generated-web-database-application/setup.md) - -## Creating a database and user using the command line - -If you have SSH access to your server, you can create a database and user using the command line. -Here are the general steps: - -1. Log in to your server using SSH. -2. Connect to MySQL using the following command: +# Cómo crear una base de datos y un usuario MySQL/MariaDB + +Antes de que pueda utilizar su aplicación de base de datos web generada por AppGini, +necesita tener una base de datos MySQL o MariaDB y un usuario con +permisos para acceder y modificar la base de datos. + +A veces, su proveedor de alojamiento creará la base de datos y el usuario por usted. +En este caso, generalmente recibirá un correo electrónico con los detalles de la base de datos. Pero +en la mayoría de los casos, deberá crear la base de datos y el usuario usted mismo. + +## Creación de una base de datos y un usuario mediante cPanel + +La mayoría de los proveedores de alojamiento compartido ofrecen cPanel, un panel de control basado en web que +facilita la gestión de su cuenta de alojamiento. Estos son los pasos generales para +crear una base de datos y un usuario mediante cPanel: + +1. Inicie sesión en su cuenta de cPanel. +2. Busque una sección llamada 'Bases de datos' y haga clic en 'Bases de datos MySQL'. +3. En la sección 'Crear nueva base de datos', ingrese un nombre para su base de datos y haga clic en 'Crear base de datos'. + Debe especificar un nombre que sea relevante para su aplicación, ya que podría tener varias bases de datos + en su cuenta de alojamiento. Por lo tanto, sería más fácil identificar la base de datos más adelante. + ![Crear nueva base de datos en cPanel](https://cdn.bigprof.com/images/cpanel-create-database.jpeg "Crear nueva base de datos en cPanel") +4. Después de crear la base de datos, desplácese hacia abajo hasta la sección 'Agregar nuevo usuario'. +5. Ingrese un nombre de usuario y una contraseña para el nuevo usuario y haga clic en 'Crear usuario'. + Asegúrese de utilizar una contraseña segura. Puede utilizar la herramienta 'Generador de contraseñas' para crear una contraseña segura. + > Tome nota del nombre de la base de datos, el nombre de usuario y la contraseña que acaba de crear. Los necesitará + al configurar su aplicación de base de datos web generada por AppGini. +6. Después de crear el usuario, desplácese hacia abajo hasta la sección 'Agregar usuario a la base de datos'. +7. Seleccione el usuario que creó en el menú desplegable 'Usuario' y la base de datos que creó en el menú desplegable 'Base de datos'. +8. Haga clic en 'Agregar'. +9. En la siguiente pantalla, seleccione 'Todos los privilegios' y haga clic en 'Realizar cambios'. + > Al seleccionar 'Todos los privilegios', el usuario tendrá acceso completo a la base de datos. Esto es + necesario para que su aplicación generada por AppGini pueda crear tablas y administrar datos. + Pero si su esquema de base de datos ya se ha creado y no planea modificarlo, + puede desmarcar los privilegios 'Crear', 'Alterar' y 'Eliminar'. + +¡Eso es todo! Ha creado correctamente una base de datos y un usuario para su aplicación de base de datos web generada por AppGini. +El siguiente paso es [configurar su aplicación generada por AppGini](working-with-generated-web-database-application/setup.md) + +> Si su proveedor de alojamiento proporciona otro panel de control, como Plesk, los pasos pueden ser ligeramente diferentes +> pero la idea general es la misma. Puede consultar la documentación de su proveedor de alojamiento para obtener más detalles. + +## Creación de una base de datos y un usuario mediante phpMyAdmin + +Es posible que su proveedor de alojamiento ofrezca phpMyAdmin, una herramienta basada en web que le permite administrar bases de datos MySQL. +Puede crear una base de datos y un usuario mediante phpMyAdmin de la siguiente manera: + +1. Inicie sesión en su cuenta de phpMyAdmin. +2. Haga clic en la pestaña 'Bases de datos'. +3. Ingrese un nombre para su base de datos en el campo 'Crear base de datos' y haga clic en 'Crear'. + ![Crear base de datos en phpMyAdmin](https://cdn.bigprof.com/images/phpmyadmin-new-database.png "Crear base de datos en phpMyAdmin") +4. Haga clic en la pestaña 'Privilegios'. +5. Haga clic en 'Agregar cuenta de usuario'. +6. Ingrese un nombre de usuario y una contraseña para el nuevo usuario. +7. En la sección 'Base de datos para la cuenta de usuario', seleccione la base de datos que creó. +8. Haga clic en 'Ir'. +9. En la siguiente pantalla, seleccione 'Todos los privilegios' y haga clic en 'Ir'. + > Al seleccionar 'Todos los privilegios', el usuario tendrá acceso completo a la base de datos. Esto es + necesario para que su aplicación generada por AppGini pueda crear tablas y administrar datos. + Pero si su esquema de base de datos ya se ha creado y no planea modificarlo, + puede desmarcar los privilegios 'Crear', 'Alterar' y 'Eliminar'. + +¡Eso es todo! Ha creado correctamente una base de datos y un usuario para su aplicación de base de datos web generada por AppGini. +El siguiente paso es [configurar su aplicación generada por AppGini](working-with-generated-web-database-application/setup.md) + +## Creación de una base de datos y un usuario mediante la línea de comandos + +Si tiene acceso SSH a su servidor, puede crear una base de datos y un usuario mediante la línea de comandos. +Estos son los pasos generales: + +1. Inicie sesión en su servidor mediante SSH. +2. Conéctese a MySQL mediante el siguiente comando: ```bash mysql ``` - If the above command results in an error, you might need to specify the MySQL root password: + Si el comando anterior produce un error, es posible que deba especificar la contraseña raíz de MySQL: ```bash mysql -u root -p ``` - Then enter the MySQL root password when prompted. -3. Create a new database using the following command: + Luego ingrese la contraseña raíz de MySQL cuando se le solicite. +3. Cree una nueva base de datos mediante el siguiente comando: ```sql - CREATE DATABASE dbname; + CREATE DATABASE nombre_bd; ``` - Replace `dbname` with the name you want to give to your database. -4. Create a new user using the following command: + Reemplace `nombre_bd` con el nombre que desea darle a su base de datos. +4. Cree un nuevo usuario mediante el siguiente comando: ```sql - CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; + CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'contraseña'; ``` - Replace `username` with the username you want to give to your user and `password` with the password you want to set. - Make sure to use a strong password. -5. Grant the user full access to the database using the following command: + Reemplace `nombre_usuario` con el nombre de usuario que desea darle a su usuario y `contraseña` con la contraseña que desea establecer. + Asegúrese de utilizar una contraseña segura. +5. Otorgue al usuario acceso completo a la base de datos mediante el siguiente comando: ```sql - GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost'; + GRANT ALL PRIVILEGES ON nombre_bd.* TO 'nombre_usuario'@'localhost'; ``` - Replace `dbname` with the name of the database you created and `username` with the username you created. -6. Flush the privileges using the following command: + Reemplace `nombre_bd` con el nombre de la base de datos que creó y `nombre_usuario` con el nombre de usuario que creó. +6. Actualice los privilegios mediante el siguiente comando: ```sql FLUSH PRIVILEGES; ``` -That's it! You've successfully created a database and user for your AppGini-generated web database application. -The next step is to [set up your AppGini-generated application](working-with-generated-web-database-application/setup.md) - +¡Eso es todo! Ha creado correctamente una base de datos y un usuario para su aplicación de base de datos web generada por AppGini. +El siguiente paso es [configurar su aplicación generada por AppGini](working-with-generated-web-database-application/setup.md) diff --git a/pages/enable-php-ldap-extension.md b/pages/enable-php-ldap-extension.md index 8595070..929a30b 100644 --- a/pages/enable-php-ldap-extension.md +++ b/pages/enable-php-ldap-extension.md @@ -1,73 +1,72 @@ --- -title: Enabling LDAP Extension in PHP -linkTitle: Enable LDAP +title: Habilitar la extensión LDAP en PHP +linkTitle: Habilitar LDAP slug: help/enable-php-ldap-extension -keywords: LDAP, PHP, extension, enable, Linux, Windows, Apache, CentOS, Ubuntu, Debian, Red Hat, RHEL -description: Learn how to enable the LDAP extension in PHP on Linux and Windows systems to configure LDAP settings in your AppGini app. +keywords: LDAP, PHP, extensión, habilitar, Linux, Windows, Apache, CentOS, Ubuntu, Debian, Red Hat, RHEL +description: Aprenda cómo habilitar la extensión LDAP en PHP en sistemas Linux y Windows para configurar los ajustes de LDAP en su aplicación AppGini. --- -# Enabling LDAP Extension in PHP +# Habilitar la extensión LDAP en PHP -Before [configuring LDAP settings in your AppGini app](/appgini/help/ldap-authentication/), you need to ensure that the LDAP extension in PHP is enabled. This process varies depending on your operating system. +Antes de [configurar los ajustes de LDAP en su aplicación AppGini](/appgini/help/ldap-authentication/), debe asegurarse de que la extensión LDAP en PHP esté habilitada. Este proceso varía según su sistema operativo. -### For Linux (Debian/Ubuntu) +### Para Linux (Debian/Ubuntu) -On Debian-based systems like Ubuntu, you can enable the LDAP extension for PHP by installing the required packages. Open a terminal and run the following commands: +En sistemas basados en Debian como Ubuntu, puede habilitar la extensión LDAP para PHP instalando los paquetes necesarios. Abra una terminal y ejecute los siguientes comandos: ```bash sudo apt update sudo apt install php-ldap ``` -After installation, restart the Apache server to apply the changes: +Después de la instalación, reinicie el servidor Apache para aplicar los cambios: ```bash sudo systemctl restart apache2 ``` -### For Linux (CentOS/RHEL) +### Para Linux (CentOS/RHEL) -For CentOS or Red Hat-based distributions, use the following commands in the terminal: +Para distribuciones basadas en CentOS o Red Hat, use los siguientes comandos en la terminal: ```bash sudo yum update sudo yum install php-ldap ``` -Then, restart the Apache server: +Luego, reinicie el servidor Apache: ```bash sudo systemctl restart httpd ``` -### For Windows +### Para Windows -Enabling the LDAP extension in Windows is done through the `php.ini` file. Follow these steps: +Habilitar la extensión LDAP en Windows se realiza a través del archivo `php.ini`. Siga estos pasos: + +1. Localice su archivo `php.ini`, que generalmente se encuentra en su directorio de instalación de PHP, por ejemplo, `C:\php\php.ini`. +2. Abra `php.ini` en un editor de texto con privilegios administrativos. +3. Busque la línea `;extension=ldap`. Si la línea comienza con un punto y coma (;), está comentada. +4. Elimine el punto y coma para habilitar la extensión. Debería verse así: -1. Locate your `php.ini` file, which is usually found in your PHP installation directory, e.g., `C:\php\php.ini`. -2. Open `php.ini` in a text editor with administrative privileges. -3. Search for the line `;extension=ldap`. If the line starts with a semicolon (;), it's commented out. -4. Remove the semicolon to enable the extension. It should look like this: - ``` extension=ldap ``` - -5. Save the `php.ini` file and restart your web server for the changes to take effect. -For WAMP, XAMPP, or other integrated server packages, you might be able to enable the LDAP extension through their respective control panels, usually by ticking a checkbox or switching a toggle next to the PHP LDAP extension. +5. Guarde el archivo `php.ini` y reinicie su servidor web para que los cambios surtan efecto. + +Para WAMP, XAMPP u otros paquetes de servidor integrados, es posible que pueda habilitar la extensión LDAP a través de sus respectivos paneles de control, generalmente marcando una casilla de verificación o activando un interruptor junto a la extensión PHP LDAP. -### Verifying LDAP Extension Activation +### Verificar la activación de la extensión LDAP -To confirm that the LDAP extension is active, create a PHP file with the following content and navigate to it in your web browser: +Para confirmar que la extensión LDAP está activa, cree un archivo PHP con el siguiente contenido y navegue hasta él en su navegador web: ```php <?php phpinfo(); ``` -This outputs information about your PHP configuration. Look for a section titled 'ldap'. If it's present, the LDAP extension is enabled and working. - -After enabling the LDAP extension in PHP, a new 'LDAP Settings' tab will become available within the admin settings page of your AppGini application. You can now proceed to configure the LDAP settings as described in the sections above. +Esto genera información sobre su configuración de PHP. Busque una sección titulada 'ldap'. Si está presente, la extensión LDAP está habilitada y funcionando. -> Remember to keep your PHP environment secure and up to date, as enabling extensions can expose new vectors for potential vulnerabilities if not managed properly. +Después de habilitar la extensión LDAP en PHP, una nueva pestaña 'Configuración LDAP' estará disponible dentro de la página de configuración de administración de su aplicación AppGini. Ahora puede proceder a configurar los ajustes de LDAP como se describe en las secciones anteriores. +> Recuerde mantener su entorno PHP seguro y actualizado, ya que habilitar extensiones puede exponer nuevos vectores para posibles vulnerabilidades si no se administra correctamente. diff --git a/pages/getting-started.md b/pages/getting-started.md index 510dd9c..8aa7c9c 100644 --- a/pages/getting-started.md +++ b/pages/getting-started.md @@ -1,27 +1,25 @@ --- -title: Getting Started With AppGini -linkTitle: Getting Started +title: Primeros pasos con AppGini +linkTitle: Primeros pasos slug: help/getting-started -keywords: getting started, appgini, video guide, playlist -description: This video guide will help you get started quickly with AppGini. We have prepared a playlist of videos that will guide you through common tasks in AppGini. +keywords: primeros pasos, appgini, guía en video, lista de reproducción +description: Esta guía en video le ayudará a comenzar rápidamente con AppGini. Hemos preparado una lista de reproducción de videos que lo guiarán a través de tareas comunes en AppGini. --- -# Getting Started With AppGini +# Primeros pasos con AppGini -Thank you for choosing AppGini! This video guide will help you get started quickly with AppGini. -We have prepared a playlist of videos that will guide you through common tasks in AppGini. You can watch the videos in order, or jump to the video that covers the topic you're interested in. +¡Gracias por elegir AppGini! Esta guía en video le ayudará a comenzar rápidamente con AppGini. +Hemos preparado una lista de reproducción de videos que lo guiarán a través de tareas comunes en AppGini. Puede ver los videos en orden o saltar al video que cubre el tema que le interesa. <div style="position: relative; width: 100%; padding-bottom: 56.25%; overflow: hidden;"> -<iframe src="https://www.youtube.com/embed/qeD7QmVxx-E?list=PLzMTFzivz3LhzejLHk0SwQW0dHK8pTh8Q" title="Create a Multi-User Business Application In Minutes with AppGini" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe> +<iframe src="https://www.youtube.com/embed/qeD7QmVxx-E?list=PLzMTFzivz3LhzejLHk0SwQW0dHK8pTh8Q" title="Crear una aplicación empresarial multiusuario en minutos con AppGini" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe> </div> -## Topics covered in this playlist +## Temas cubiertos en esta lista de reproducción -1. Introduction to AppGini -2. Creating an example application (inventory management), uploading it to a web server, and making changes to it. - -## Additional resources - -- [Invetory management AXP project file](https://cdn.bigprof.com/appgini-sample-projects/inventory_management.axp "Download inventory management project to edit in AppGini") +1. Introducción a AppGini +2. Creación de una aplicación de ejemplo (gestión de inventario), carga en un servidor web y realización de cambios en ella. +## Recursos adicionales +- [Archivo de proyecto AXP de gestión de inventario](https://cdn.bigprof.com/appgini-sample-projects/inventory_management.axp "Descargar proyecto de gestión de inventario para editar en AppGini") diff --git a/pages/index.md b/pages/index.md index 97069e3..13abea3 100644 --- a/pages/index.md +++ b/pages/index.md @@ -1,37 +1,36 @@ --- -title: AppGini Online Guide -linkTitle: Overview +title: Guía en línea de AppGini +linkTitle: Descripción general slug: help -description: Learn about AppGini, a powerful tool designed to simplify the creation of web-based database applications. -keywords: AppGini, web database applications, PHP, MySQL, MariaDB, data management, user access control, customization, media handling, nocode, lowcode, host anywhere +description: Aprenda sobre AppGini, una potente herramienta diseñada para simplificar la creación de aplicaciones de bases de datos basadas en la web. +keywords: AppGini, aplicaciones de bases de datos web, PHP, MySQL, MariaDB, gestión de datos, control de acceso de usuarios, personalización, manejo de medios, sin código, bajo código, alojar en cualquier lugar --- -# AppGini Online Guide +# Guía en línea de AppGini -## Introduction to AppGini +## Introducción a AppGini -![A web application interface generated by AppGini](https://cdn.bigprof.com/images/appgini-24.14-tv-zoomable-thumbnails.png "A web application interface generated by AppGini") +![Una interfaz de aplicación web generada por AppGini](https://cdn.bigprof.com/images/appgini-24.14-tv-zoomable-thumbnails.png "Una interfaz de aplicación web generada por AppGini") -AppGini is a powerful tool designed to simplify the creation of web-based database applications. Even without any programming skills, you can quickly design and generate fully functional web interfaces for your business applications. Simply define your data structure, configure a few settings, and with a click of the 'Generate' button, your application is ready! +AppGini es una potente herramienta diseñada para simplificar la creación de aplicaciones de bases de datos basadas en la web. Incluso sin conocimientos de programación, puede diseñar y generar rápidamente interfaces web completamente funcionales para sus aplicaciones empresariales. Simplemente defina su estructura de datos, configure algunos ajustes y, con un clic en el botón 'Generar', ¡su aplicación estará lista! -### Key Features of AppGini +### Características clave de AppGini -AppGini equips users with a comprehensive set of tools to build professional-grade web database applications. These applications are ready to be deployed on any website and include a wide range of functionalities: +AppGini equipa a los usuarios con un conjunto completo de herramientas para crear aplicaciones de bases de datos web de nivel profesional. Estas aplicaciones están listas para implementarse en cualquier sitio web e incluyen una amplia gama de funcionalidades: -- **Data Management**: Effortlessly navigate through data, with capabilities to sort, filter, edit, insert, and delete records. -- **Data Exchange**: Provides options for data import and export, facilitating easy data migration and backup. -- **User Access Control**: Manage user and group permissions to ensure secure access to the database. -- **Enhanced Interactivity**: Incorporates foreign key support to create [lookup fields](working-with-projects/understanding-lookup-fields.md), enhancing data integrity and usability. -- **Customization**: Offers extensive customization options for the application’s appearance and behavior, adapting to specific needs. -- **Media Handling**: Supports the uploading of images and files, as well as Google maps, Youtube videos, and rich text fields, enriching the data records with multimedia content. +- **Gestión de datos**: navegue sin esfuerzo por los datos, con capacidades para ordenar, filtrar, editar, insertar y eliminar registros. +- **Intercambio de datos**: proporciona opciones para la importación y exportación de datos, lo que facilita la migración y la copia de seguridad de los datos. +- **Control de acceso de usuarios**: gestione los permisos de usuarios y grupos para garantizar un acceso seguro a la base de datos. +- **Interactividad mejorada**: incorpora compatibilidad con claves externas para crear [campos de búsqueda](working-with-projects/understanding-lookup-fields.md), lo que mejora la integridad y la usabilidad de los datos. +- **Personalización**: ofrece amplias opciones de personalización para la apariencia y el comportamiento de la aplicación, adaptándose a necesidades específicas. +- **Manejo de medios**: admite la carga de imágenes y archivos, así como mapas de Google, videos de Youtube y campos de texto enriquecido, enriqueciendo los registros de datos con contenido multimedia. -### Supported Technologies +### Tecnologías compatibles -AppGini applications take advantage of the golden, battle-tested and widely available LAMP stack. Generated apps are written in PHP and are designed to connect with MySQL/MariaDB databases. This selection leverages the widespread support and compatibility of PHP and MySQL/MariaDB across different hosting environments, ensuring that the applications you create are robust and deployable on virtually any server without requiring prior configuration or complex setup. +Las aplicaciones AppGini aprovechan la pila LAMP dorada, probada en batalla y ampliamente disponible. Las aplicaciones generadas están escritas en PHP y están diseñadas para conectarse con bases de datos MySQL/MariaDB. Esta selección aprovecha el amplio soporte y la compatibilidad de PHP y MySQL/MariaDB en diferentes entornos de alojamiento, lo que garantiza que las aplicaciones que cree sean robustas y se puedan implementar en prácticamente cualquier servidor sin necesidad de configuración previa o configuración compleja. -### Getting Started +### Primeros pasos -Dive into the world of AppGini without needing to learn the intricacies of PHP or database management. The intuitive interface and comprehensive feature set allow you to start creating immediately. Whether you choose to explore the documentation further or jump straight into using the software, AppGini promises a smooth and productive experience. - -Explore the potential of AppGini and start building your web database applications today. Join us as we uncover the powerful capabilities and ease of use that AppGini offers! +Sumérjase en el mundo de AppGini sin necesidad de aprender las complejidades de PHP o la gestión de bases de datos. La interfaz intuitiva y el completo conjunto de funciones le permiten comenzar a crear de inmediato. Ya sea que elija explorar más la documentación o saltar directamente al uso del software, AppGini promete una experiencia fluida y productiva. +Explore el potencial de AppGini y comience a crear sus aplicaciones de bases de datos web hoy mismo. ¡Únase a nosotros mientras descubrimos las potentes capacidades y la facilidad de uso que ofrece AppGini! diff --git a/pages/install-appgini-on-windows.md b/pages/install-appgini-on-windows.md index a079e3d..36f6e04 100644 --- a/pages/install-appgini-on-windows.md +++ b/pages/install-appgini-on-windows.md @@ -1,73 +1,72 @@ --- -title: Install AppGini on Windows -linkTitle: Installing AppGini +title: Instalar AppGini en Windows +linkTitle: Instalación de AppGini slug: help/install-appgini-on-windows -description: Learn how to install AppGini on your Windows computer. -keywords: install, AppGini, Windows, setup, installation, uninstall, upgrade +description: Aprenda a instalar AppGini en su computadora con Windows. +keywords: instalar, AppGini, Windows, configuración, instalación, desinstalar, actualizar --- -# Install AppGini on Windows +# Instalar AppGini en Windows -## System requirements +## Requisitos del sistema -AppGini runs on Windows 7 through Windows 11. It's compatible with both 32-bit and 64-bit versions of Windows. It's also compatible with Windows Server editions. +AppGini se ejecuta en Windows 7 hasta Windows 11. Es compatible con las versiones de 32 y 64 bits de Windows. También es compatible con las ediciones de Windows Server. -It's also possible to run AppGini on MacOS or Linux using a virtual machine or a compatibility layer like Wine or Crossover. You can find more information on this in the [related topics](#related-topics) section below. +También es posible ejecutar AppGini en MacOS o Linux usando una máquina virtual o una capa de compatibilidad como Wine o Crossover. Puede encontrar más información sobre esto en la sección [Temas relacionados](#temas-relacionados) a continuación. -## Installing AppGini +## Instalación de AppGini -After downloading AppGini (the [trial](https://bigprof.com/appgini/download) or [pro](https://bigprof.com/appgini/appgini-pro) version), -you can install it by following the steps below: +Después de descargar AppGini (la versión de [prueba](https://bigprof.com/appgini/download) o [pro](https://bigprof.com/appgini/appgini-pro)), +puede instalarlo siguiendo los pasos a continuación: -1. Double-click the downloaded setup file. +1. Haga doble clic en el archivo de instalación descargado. - ![Double-click the downloaded setup file](https://cdn.bigprof.com/appgini-desktop/help/downloaded-trial-exe.png) + ![Haga doble clic en el archivo de instalación descargado](https://cdn.bigprof.com/appgini-desktop/help/downloaded-trial-exe.png) -2. Click 'Yes' if prompted by User Account Control +2. Haga clic en 'Sí' si se lo solicita el Control de cuentas de usuario. - ![Click 'Yes' when prompted by User Account Control](https://cdn.bigprof.com/appgini-desktop/help/uac-allow-install.png) + ![Haga clic en 'Sí' cuando se lo solicite el Control de cuentas de usuario](https://cdn.bigprof.com/appgini-desktop/help/uac-allow-install.png) -3. Click 'Next' to start the installation, and follow the steps in the setup wizard. +3. Haga clic en 'Siguiente' para iniciar la instalación y siga los pasos del asistente de configuración. - ![Click 'Next' to start the installation](https://cdn.bigprof.com/appgini-desktop/help/setup-screen-click-next.png) + ![Haga clic en 'Siguiente' para iniciar la instalación](https://cdn.bigprof.com/appgini-desktop/help/setup-screen-click-next.png) - Setup will take a few seconds to prepare the installation. + La configuración tardará unos segundos en preparar la instalación. - ![Setup progress](https://cdn.bigprof.com/appgini-desktop/help/setup-screen-progress.png) + ![Progreso de la configuración](https://cdn.bigprof.com/appgini-desktop/help/setup-screen-progress.png) -4. Click 'Finish' to complete the installation. +4. Haga clic en 'Finalizar' para completar la instalación. - ![Click 'Finish' to complete the installation](https://cdn.bigprof.com/appgini-desktop/help/setup-screen-finish.png) + ![Haga clic en 'Finalizar' para completar la instalación](https://cdn.bigprof.com/appgini-desktop/help/setup-screen-finish.png) -5. AppGini is now installed on your computer. You can start it by double-clicking the desktop shortcut or by clicking the start menu shortcut. - - If you can't see the shortcut in the start menu, you can type `AppGini` in the search box to find it. +5. AppGini ya está instalado en su computadora. Puede iniciarlo haciendo doble clic en el acceso directo del escritorio o haciendo clic en el acceso directo del menú de inicio. - ![Start menu shortcut](https://cdn.bigprof.com/appgini-desktop/help/start-appgini.png) + Si no puede ver el acceso directo en el menú de inicio, puede escribir `AppGini` en el cuadro de búsqueda para encontrarlo. -6. The first time you run AppGini, you'll be asked to choose how you want to begin your work. You can choose to create a new project, open an existing project, among other options. + ![Acceso directo del menú de inicio](https://cdn.bigprof.com/appgini-desktop/help/start-appgini.png) - ![How do you want to begin your work?](https://cdn.bigprof.com/appgini-desktop/help/first-run.png) +6. La primera vez que ejecute AppGini, se le pedirá que elija cómo desea comenzar su trabajo. Puede elegir crear un nuevo proyecto, abrir un proyecto existente, entre otras opciones. -## Upgrading an existing installation + ![¿Cómo desea comenzar su trabajo?](https://cdn.bigprof.com/appgini-desktop/help/first-run.png) -If you're upgrading from a previous version of AppGini, you can install the new version over the old one. Your existing projects and settings will be preserved. -You can follow the same steps above to install the new version. Just make sure to close AppGini before starting the installation. +## Actualización de una instalación existente -## Uninstalling AppGini +Si está actualizando desde una versión anterior de AppGini, puede instalar la nueva versión sobre la anterior. Sus proyectos y configuraciones existentes se conservarán. +Puede seguir los mismos pasos anteriores para instalar la nueva versión. Solo asegúrese de cerrar AppGini antes de iniciar la instalación. -To uninstall AppGini, you can use the 'Add or remove programs' feature in Windows. Here's how: +## Desinstalación de AppGini -1. Open the 'Add or remove programs' window by typing 'Add or remove programs' in the start menu search box and clicking the result. +Para desinstalar AppGini, puede usar la función 'Agregar o quitar programas' en Windows. He aquí cómo: -2. Find 'AppGini' in the list of installed programs, click it, and then click 'Uninstall'. +1. Abra la ventana 'Agregar o quitar programas' escribiendo 'Agregar o quitar programas' en el cuadro de búsqueda del menú de inicio y haciendo clic en el resultado. -3. Follow the steps in the uninstall wizard to remove AppGini from your computer. +2. Busque 'AppGini' en la lista de programas instalados, haga clic en él y luego haga clic en 'Desinstalar'. - After uninstalling AppGini, you can delete the installation folder to remove any remaining files. +3. Siga los pasos del asistente de desinstalación para eliminar AppGini de su computadora. -## Related topics + Después de desinstalar AppGini, puede eliminar la carpeta de instalación para eliminar los archivos restantes. -- [Installing AppGini on MacOS or Linux](https://bigprof.com/appgini/tips-and-tutorials/install-appgini-on-ubuntu-linux) -- [Installing AppGini on a remotely-hosted Windows VM](https://bigprof.com/appgini/easy-way-to-use-appgini-on-mac-osx-and-linux) +## Temas relacionados +- [Instalación de AppGini en MacOS o Linux](https://bigprof.com/appgini/tips-and-tutorials/install-appgini-on-ubuntu-linux) +- [Instalación de AppGini en una VM de Windows alojada de forma remota](https://bigprof.com/appgini/easy-way-to-use-appgini-on-mac-osx-and-linux) diff --git a/pages/ldap-authentication.md b/pages/ldap-authentication.md index aadea0d..b872613 100644 --- a/pages/ldap-authentication.md +++ b/pages/ldap-authentication.md @@ -1,99 +1,97 @@ --- -title: LDAP Authentication -linkTitle: LDAP Authentication +title: Autenticación LDAP +linkTitle: Autenticación LDAP slug: help/ldap-authentication --- -# LDAP Authentication +# Autenticación LDAP -AppGini applications now support [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) integration starting from version 24.10, providing a more streamlined login process for users who are already part of an LDAP directory. Here's how you can set up LDAP integration within your AppGini application. +Las aplicaciones AppGini ahora admiten la integración [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) a partir de la versión 24.10, lo que proporciona un proceso de inicio de sesión más optimizado para los usuarios que ya forman parte de un directorio LDAP. A continuación, se explica cómo configurar la integración LDAP dentro de su aplicación AppGini. -> Kindly note that LDAP authentication is available only in [AppGini Pro](/appgini/order). +> Tenga en cuenta que la autenticación LDAP solo está disponible en [AppGini Pro](/appgini/order). -## Video overview of LDAP settings in AppGini apps +## Vídeo de descripción general de la configuración LDAP en aplicaciones AppGini <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/ldap-login-in-appgini-applications.mp4" type="video/mp4"> -Your browser does not support the video tag. +Su navegador no admite la etiqueta de vídeo. </video> -## Enabling LDAP Extension in PHP +## Habilitación de la extensión LDAP en PHP -Before you begin, [ensure that the LDAP extension in PHP is enabled](/appgini/help/enable-php-ldap-extension/), as the integration is disabled by default. Upon enabling this extension, a new 'LDAP settings' tab will become available within the admin settings page of your AppGini application. +Antes de comenzar, [asegúrese de que la extensión LDAP en PHP esté habilitada](/appgini/help/enable-php-ldap-extension/), ya que la integración está deshabilitada de forma predeterminada. Al habilitar esta extensión, una nueva pestaña 'Configuración LDAP' estará disponible dentro de la página de configuración de administración de su aplicación AppGini. -One way to check if LDAP extension is enabled is to sign in to your AppGini app as admin, go to the admin area > Utilties menu > Server status. In the server status page, under the PHP section, you should see LDAP details like the screenshot below if LDAP is enabled: +Una forma de verificar si la extensión LDAP está habilitada es iniciar sesión en su aplicación AppGini como administrador, ir al área de administración > Menú Utilidades > Estado del servidor. En la página de estado del servidor, en la sección PHP, debería ver los detalles de LDAP como en la captura de pantalla a continuación si LDAP está habilitado: -![LDAP info section under PHP info](https://cdn.bigprof.com/images/ldap-section-php-ini.png) +![Sección de información LDAP en PHP info](https://cdn.bigprof.com/images/ldap-section-php-ini.png) -## Configuring LDAP Settings +## Configuración de los ajustes LDAP -Sign in to your AppGini app as administrator. Go to the admin area, open the Utilities menu, and click on Admin settings. If the LDAP extension is enabled in PHP, you should see an 'LDAP settings' tab. Once you access the 'LDAP settings' tab, you can configure the LDAP integration. This section allows you to switch from the default login method, where AppGini manages usernames and passwords, to an LDAP-based authentication system. +Inicie sesión en su aplicación AppGini como administrador. Vaya al área de administración, abra el menú Utilidades y haga clic en Configuración de administración. Si la extensión LDAP está habilitada en PHP, debería ver una pestaña 'Configuración LDAP'. Una vez que acceda a la pestaña 'Configuración LDAP', podrá configurar la integración LDAP. Esta sección le permite cambiar del método de inicio de sesión predeterminado, donde AppGini administra los nombres de usuario y las contraseñas, a un sistema de autenticación basado en LDAP. -![AppGini LDAP settings](https://cdn.bigprof.com/images/ldap-settings.png) +![Configuración LDAP de AppGini](https://cdn.bigprof.com/images/ldap-settings.png) -### Specifying the LDAP Server +### Especificación del servidor LDAP -Input your LDAP server URL in the format `ldap.example.com` or `ldaps://ldap.example.com` for SSL connections. If your LDAP server operates on a non-standard port, you can specify it like `ldap.example.com:389`. +Ingrese la URL de su servidor LDAP en el formato `ldap.example.com` o `ldaps://ldap.example.com` para conexiones SSL. Si su servidor LDAP opera en un puerto no estándar, puede especificarlo como `ldap.example.com:389`. -### LDAP Version +### Versión de LDAP -Select the LDAP protocol version that corresponds to your server's configuration. Most servers will work with version 3, which is recommended for optimal compatibility. +Seleccione la versión del protocolo LDAP que corresponda a la configuración de su servidor. La mayoría de los servidores funcionarán con la versión 3, que se recomienda para una compatibilidad óptima. -### User DN (Distinguished Name) Pattern +### Patrón de DN (Nombre Distinguido) de usuario -You must specify the pattern for wrapping the username for LDAP logins. This pattern usually includes prefixes and suffixes, such as: +Debe especificar el patrón para envolver el nombre de usuario para los inicios de sesión LDAP. Este patrón generalmente incluye prefijos y sufijos, como: ``` uid=USERNAME,ou=people,dc=ldap,dc=example,dc=com ``` -In this example, the username prefix is `uid=`, and the username suffix is `,ou=people,dc=ldap,dc=example,dc=com` (note the initial comma `,`). Adjust the domain components (`dc=`) according to your LDAP server's domain. +En este ejemplo, el prefijo del nombre de usuario es `uid=`, y el sufijo del nombre de usuario es `,ou=people,dc=ldap,dc=example,dc=com` (tenga en cuenta la coma inicial `,`). Ajuste los componentes del dominio (`dc=`) de acuerdo con el dominio de su servidor LDAP. -### Handling Non-Existent Users +### Manejo de usuarios inexistentes -Determine how AppGini should handle login attempts from users who are authenticated through LDAP but do not exist in the AppGini database. You can choose to: +Determine cómo debe AppGini manejar los intentos de inicio de sesión de usuarios que están autenticados a través de LDAP pero que no existen en la base de datos de AppGini. Puede elegir: -* Disable login for such users, requiring an admin to manually add them, or -* Automatically create a user account in AppGini and assign the user to a default group that you can specify. +* Deshabilitar el inicio de sesión para dichos usuarios, lo que requiere que un administrador los agregue manualmente, o +* Crear automáticamente una cuenta de usuario en AppGini y asignar al usuario a un grupo predeterminado que puede especificar. -Note that the list of groups doesn't include the Admins group to prevent unintended privilege escalation of normal users. If you need to assign admin rights to an LDAP user, you must do so manually from the admin area. +Tenga en cuenta que la lista de grupos no incluye el grupo de administradores para evitar una escalada de privilegios no deseada de los usuarios normales. Si necesita asignar derechos de administrador a un usuario LDAP, debe hacerlo manualmente desde el área de administración. -## Important Considerations +## Consideraciones importantes -Before enabling LDAP authentication, confirm that your AppGini admin username exists in the LDAP directory. Otherwise, you'll be unable to log in to AppGini with admin privileges. If this does occur, you will need to edit the `config.php` file manually to revert to the default login method. This can be done by changing the line: +Antes de habilitar la autenticación LDAP, confirme que su nombre de usuario de administrador de AppGini existe en el directorio LDAP. De lo contrario, no podrá iniciar sesión en AppGini con privilegios de administrador. Si esto ocurre, deberá editar el archivo `config.php` manualmente para volver al método de inicio de sesión predeterminado. Esto se puede hacer cambiando la línea: ``` 'loginMethod' => "ldap", ``` -to: +a: ``` 'loginMethod' => "default", ``` -## Testing LDAP Integration +## Prueba de la integración LDAP -After saving the changes, it's wise to test the integration, without signing out from your admin account. To do so, open an anonymous (i.e. incognito or private) browser window, visit your AppGini application, and attempt to log in with an LDAP user. If the setup is correct, users should be able to sign in with their LDAP credentials and be automatically added to the specified default group if they don't already exist in AppGini. +Después de guardar los cambios, es aconsejable probar la integración, sin cerrar sesión en su cuenta de administrador. Para hacerlo, abra una ventana de navegador anónima (es decir, de incógnito o privada), visite su aplicación AppGini e intente iniciar sesión con un usuario LDAP. Si la configuración es correcta, los usuarios deberían poder iniciar sesión con sus credenciales LDAP y ser agregados automáticamente al grupo predeterminado especificado si aún no existen en AppGini. -If you're unable to sign in as an LDAP user, this could be due to incorrect LDAP settings. In that case, switch to the browser window where you are signed in as admin, try to adjust the settings, then switch back to the anonymous window and try to sign in. +Si no puede iniciar sesión como usuario LDAP, esto podría deberse a una configuración LDAP incorrecta. En ese caso, cambie a la ventana del navegador donde ha iniciado sesión como administrador, intente ajustar la configuración, luego vuelva a la ventana anónima e intente iniciar sesión. -## Troubleshooting - -If you're unable to sign in after enabling LDAP, and you get locked out of your admin account, you can manually disable LDAP. To do so, you will need to edit the `config.php` file to revert to the default login method. This can be done by changing the line: +## Solución de problemas +Si no puede iniciar sesión después de habilitar LDAP y se le bloquea el acceso a su cuenta de administrador, puede deshabilitar LDAP manualmente. Para hacerlo, deberá editar el archivo `config.php` para volver al método de inicio de sesión predeterminado. Esto se puede hacer cambiando la línea: ``` 'loginMethod' => "ldap", ``` -to: +a: ``` 'loginMethod' => "default", ``` -## Conclusion - -By following these steps, you can effectively integrate LDAP authentication into your AppGini application, leveraging existing user accounts and streamlining the login process. Make sure to thoroughly test the configuration with different user scenarios to ensure a smooth transition. +## Conclusión +Siguiendo estos pasos, puede integrar eficazmente la autenticación LDAP en su aplicación AppGini, aprovechando las cuentas de usuario existentes y optimizando el proceso de inicio de sesión. Asegúrese de probar exhaustivamente la configuración con diferentes escenarios de usuario para garantizar una transición sin problemas. diff --git a/pages/record-owners.md b/pages/record-owners.md index 9a3da0f..d5f8cad 100644 --- a/pages/record-owners.md +++ b/pages/record-owners.md @@ -1,74 +1,71 @@ --- -title: Setting the child record owner to match the owner of its parent record -linkTitle: Record owners +title: Establecer el propietario del registro secundario para que coincida con el propietario de su registro principal +linkTitle: Propietarios de registros slug: help/record-owners -keywords: record owner, parent record, child record, owner, automatic, parent table, child table, lookup field, permissions, editing, owner user, Fix record owners, utility -description: Learn how to set the owner of a child record to match the owner of its parent record in AppGini, and how to update the owner of existing child records. +keywords: propietario del registro, registro principal, registro secundario, propietario, automático, tabla principal, tabla secundaria, campo de búsqueda, permisos, edición, usuario propietario, Corregir propietarios de registros, utilidad +description: Aprenda cómo establecer el propietario de un registro secundario para que coincida con el propietario de su registro principal en AppGini, y cómo actualizar el propietario de los registros secundarios existentes. --- -# Setting the child record owner to match the owner of its parent record +# Establecer el propietario del registro secundario para que coincida con el propietario de su registro principal -## About this feature +## Acerca de esta función -As of AppGini 24.10, you can set the owner of a child record based on the owner of its parent record. This is useful in many scenarios, for example: +A partir de AppGini 24.10, puede establecer el propietario de un registro secundario en función del propietario de su registro principal. Esto es útil en muchos escenarios, por ejemplo: -* You have a table of `projects` and another table of `tasks`. Each task belongs to a project. You want to set the owner of each task to the owner of its parent project. -* You have a table of `orders` and another table of `order_details`. Each order item belongs to an order. You want to set the owner of each order item to the owner of its parent order. +* Tiene una tabla de `proyectos` y otra tabla de `tareas`. Cada tarea pertenece a un proyecto. Desea establecer el propietario de cada tarea como el propietario de su proyecto principal. +* Tiene una tabla de `pedidos` y otra tabla de `detalles_pedido`. Cada artículo de pedido pertenece a un pedido. Desea establecer el propietario de cada artículo de pedido como el propietario de su pedido principal. -This is specially useful if you set the permissions of the child table to allow editing only by the owner of the record. If user Bob creates a project, then user Alice adds a task to that project, you might want the task to be owned by Bob so he can edit it. +Esto es especialmente útil si establece los permisos de la tabla secundaria para permitir la edición solo por parte del propietario del registro. Si el usuario Bob crea un proyecto, y luego la usuaria Alice agrega una tarea a ese proyecto, es posible que desee que la tarea sea propiedad de Bob para que él pueda editarla. -To set the owner of a child record to the owner of its parent record, you need to do the following: +Para establecer el propietario de un registro secundario como el propietario de su registro principal, debe hacer lo siguiente: -1. In AppGini, go to the table of the child records (e.g. `tasks` or `order_details` in the above examples). - -2. Under the **Detail view settings** section, open the **Record owner** dropdown and select the lookup field that points to the parent table (e.g. `ProjectID` or `OrderID` in the above examples). - - ![Record owner](https://cdn.bigprof.com/images/setting-child-record-owner.png) - -3. Regenerate and upload your AppGini application. - +1. En AppGini, vaya a la tabla de los registros secundarios (por ejemplo, `tareas` o `detalles_pedido` en los ejemplos anteriores). -Now, whenever an order item is created or edited, its owner user will be set to the owner of its parent order. +2. En la sección **Configuración de la vista detallada**, abra el menú desplegable **Propietario del registro** y seleccione el campo de búsqueda que apunta a la tabla principal (por ejemplo, `IDProyecto` o `IDPedido` en los ejemplos anteriores). -## Updating the owner of existing child records + ![Propietario del registro](https://cdn.bigprof.com/images/setting-child-record-owner.png) -If you already have existing child records, the above setting will not apply to them unless you update each record manually. This can be a pain if you have many records. That's why we've also added a utility to mass update the owner of existing child records. +3. Regenere y cargue su aplicación AppGini. -To use this utility, follow these steps: +Ahora, cada vez que se cree o edite un artículo de pedido, su usuario propietario se establecerá como el propietario de su pedido principal. -1. Sign in as an administrator to your AppGini application. - -2. Go to the admin area and open the **Utilities** menu. - -3. Click on **Fix record owners**. - - ![Utilties /> Fix record owners](https://cdn.bigprof.com/images/utilties-fix-record-owners.png) - -4. This would open a page that lists all tables where the owner of child records can be updated. Click the **Start** button above the list of tables. - - ![Fix record owners page](https://cdn.bigprof.com/images/admin-area-fix-record-owners-page.png) - -5. Leave the page open until the process is complete. This might take a while if you have many records. - -6. Once the process is complete, the button would display the message **Done**. You can now close the page or navigate to another page. - - ![Fix record owners page done](https://cdn.bigprof.com/images/admin-area-fix-record-owners-page-done.png) - +## Actualización del propietario de los registros secundarios existentes -## A practical example: Set the country sales manager as the owner of all orders and order items of that country +Si ya tiene registros secundarios existentes, la configuración anterior no se aplicará a ellos a menos que actualice cada registro manualmente. Esto puede ser un problema si tiene muchos registros. Es por eso que también hemos agregado una utilidad para actualizar masivamente el propietario de los registros secundarios existentes. + +Para utilizar esta utilidad, siga estos pasos: + +1. Inicie sesión como administrador en su aplicación AppGini. + +2. Vaya al área de administración y abra el menú **Utilidades**. + +3. Haga clic en **Corregir propietarios de registros**. + + ![Utilidades /> Corregir propietarios de registros](https://cdn.bigprof.com/images/utilties-fix-record-owners.png) + +4. Esto abrirá una página que enumera todas las tablas donde se puede actualizar el propietario de los registros secundarios. Haga clic en el botón **Iniciar** sobre la lista de tablas. + + ![Página Corregir propietarios de registros](https://cdn.bigprof.com/images/admin-area-fix-record-owners-page.png) + +5. Deje la página abierta hasta que se complete el proceso. Esto puede llevar un tiempo si tiene muchos registros. + +6. Una vez que se complete el proceso, el botón mostrará el mensaje **Hecho**. Ahora puede cerrar la página o navegar a otra página. + + ![Página Corregir propietarios de registros hecha](https://cdn.bigprof.com/images/admin-area-fix-record-owners-page-done.png) + +## Un ejemplo práctico: Establecer el gerente de ventas del país como propietario de todos los pedidos y artículos de pedido de ese país <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/setting-automatic-record-owners-based-on-parent-table.mp4" type="video/mp4"> -<a href="https://cdn.bigprof.com/screencasts/setting-automatic-record-owners-based-on-parent-table.mp4">Watch the video screencast</a> +<a href="https://cdn.bigprof.com/screencasts/setting-automatic-record-owners-based-on-parent-table.mp4">Ver el vídeo de demostración</a> </video> -In this screencast, we are using the Northwind sample application. We configure the record owner of the `orders` table to be the `CustomerID` field, which is a lookup field pointing to the `customers` table. This means that the owner of each order would be the same as the owner of the customer record it belongs to. - -We also configure the record owner of the `order_details` table to be the `OrderID` field, which in turn is a lookup field pointing to the `orders` table. This means that the owner of each order item would be the same as the owner of the order it belongs to. +En esta demostración, estamos utilizando la aplicación de ejemplo Northwind. Configuramos el propietario del registro de la tabla `orders` para que sea el campo `CustomerID`, que es un campo de búsqueda que apunta a la tabla `customers`. Esto significa que el propietario de cada pedido sería el mismo que el propietario del registro del cliente al que pertenece. -This way, the owner of the customer record would be the owner of all orders and order items belonging to that customer. We'll then list all customers from Germany and set the sales manager of Germany as the owner of all German customers' records. +También configuramos el propietario del registro de la tabla `order_details` para que sea el campo `OrderID`, que a su vez es un campo de búsqueda que apunta a la tabla `orders`. Esto significa que el propietario de cada artículo de pedido sería el mismo que el propietario del pedido al que pertenece. -If a sales person creates an order for a German customer, the sales manager of Germany would become the owner of that order and all order items belonging to that order. +De esta manera, el propietario del registro del cliente sería el propietario de todos los pedidos y artículos de pedido pertenecientes a ese cliente. Luego, enumeraremos todos los clientes de Alemania y estableceremos al gerente de ventas de Alemania como propietario de todos los registros de los clientes alemanes. -To apply this to existing German orders and order items, we use the **Fix record owners** utility to update the owner of all existing orders and order items. +Si un vendedor crea un pedido para un cliente alemán, el gerente de ventas de Alemania se convertiría en el propietario de ese pedido y de todos los artículos de pedido pertenecientes a ese pedido. +Para aplicar esto a los pedidos y artículos de pedido alemanes existentes, utilizamos la utilidad **Corregir propietarios de registros** para actualizar el propietario de todos los pedidos y artículos de pedido existentes. diff --git a/pages/template.md b/pages/template.md deleted file mode 100644 index a50a9fb..0000000 --- a/pages/template.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: -linkTitle: -slug: help/ -description: example_description -keywords: example_keywords ---- - - - diff --git a/pages/troubleshooting/configuring-file-upload-size.md b/pages/troubleshooting/configuring-file-upload-size.md index ac2e460..5b3b4f6 100644 --- a/pages/troubleshooting/configuring-file-upload-size.md +++ b/pages/troubleshooting/configuring-file-upload-size.md @@ -1,70 +1,68 @@ --- -title: Configuring file/image upload size in AppGini apps -linkTitle: File upload size +title: Configuración del tamaño de carga de archivos/imágenes en aplicaciones AppGini +linkTitle: Tamaño de carga de archivos slug: help/troubleshooting/configuring-file-upload-size -description: Learn how to configure the maximum file/image upload size in AppGini apps. -keywords: file upload, image upload, file size, image size, upload limit, php.ini, upload_max_filesize, post_max_size +description: Aprenda a configurar el tamaño máximo de carga de archivos/imágenes en las aplicaciones AppGini. +keywords: carga de archivos, carga de imágenes, tamaño de archivo, tamaño de imagen, límite de carga, php.ini, upload_max_filesize, post_max_size --- -# I can't upload large files/images in my AppGini app +# No puedo cargar archivos/imágenes grandes en mi aplicación AppGini -When you create a file or image upload field in your AppGini app, -you can configure the maximum file size that can be uploaded. -This can be done in the media tab, by clicking the **Configure** button, -and setting the maximum file size in kilobytes. +Cuando crea un campo de carga de archivos o imágenes en su aplicación AppGini, +puede configurar el tamaño máximo de archivo que se puede cargar. +Esto se puede hacer en la pestaña de medios, haciendo clic en el botón **Configurar**, +y estableciendo el tamaño máximo de archivo en kilobytes. -![Configuring file upload size in AppGini](https://cdn.bigprof.com/images/configure-upload-size-24.18.png) +![Configuración del tamaño de carga de archivos en AppGini](https://cdn.bigprof.com/images/configure-upload-size-24.18.png) -However, you might still face issues uploading large files, even if they are within the configured limit. -This is because the server on which your AppGini app is hosted might have a lower limit set in its PHP configuration. +Sin embargo, es posible que aún tenga problemas para cargar archivos grandes, incluso si están dentro del límite configurado. +Esto se debe a que el servidor en el que está alojada su aplicación AppGini podría tener un límite inferior establecido en su configuración de PHP. -To fix this, you need to increase the `upload_max_filesize` and `post_max_size` settings in your server's `php.ini` file. -Here's how to do this: +Para solucionar esto, debe aumentar la configuración de `upload_max_filesize` y `post_max_size` en el archivo `php.ini` de su servidor. +He aquí cómo hacerlo: -## Step 1: Locate the `php.ini` file +## Paso 1: Localice el archivo `php.ini` -Locate the `php.ini` file on your server. If you don't know where it is, the easiest way to check is to go to the admin area of your AppGini app, open the Utilities menu, and click on the **Server status** link. From there, search for `php.ini` in the page that opens. The path to the `php.ini` file should be displayed there. +Localice el archivo `php.ini` en su servidor. Si no sabe dónde está, la forma más fácil de verificarlo es ir al área de administración de su aplicación AppGini, abrir el menú Utilidades y hacer clic en el enlace **Estado del servidor**. Desde allí, busque `php.ini` en la página que se abre. La ruta al archivo `php.ini` debería mostrarse allí. -![Locating php.ini file in Server status page](https://cdn.bigprof.com/images/php-ini-location-24.18.png) - -If you don't see the **Server status** link in the Utilities menu, it means it's been disabled in your AppGini project. You can enable that page in your AXP project under the **Security settings** section > **Allow admin access to server status page**. +![Localización del archivo php.ini en la página de estado del servidor](https://cdn.bigprof.com/images/php-ini-location-24.18.png) -![Enabling server status page in AppGini project](https://cdn.bigprof.com/images/enable-server-status-24.18.png) +Si no ve el enlace **Estado del servidor** en el menú Utilidades, significa que se ha deshabilitado en su proyecto AppGini. Puede habilitar esa página en su proyecto AXP en la sección **Configuración de seguridad** > **Permitir acceso de administrador a la página de estado del servidor**. -Alternatively, you can check your server control panel or ask your hosting provider for help in locating the `php.ini` file. +![Habilitación de la página de estado del servidor en el proyecto AppGini](https://cdn.bigprof.com/images/enable-server-status-24.18.png) -## Step 2: Check and update the `upload_max_filesize` value - -Open the `php.ini` file in a text editor and search for the `upload_max_filesize` setting. It might look like this: +Alternativamente, puede consultar el panel de control de su servidor o pedir ayuda a su proveedor de alojamiento para localizar el archivo `php.ini`. + +## Paso 2: Verifique y actualice el valor de `upload_max_filesize` + +Abra el archivo `php.ini` en un editor de texto y busque la configuración `upload_max_filesize`. Podría verse así: ```ini upload_max_filesize = 2M ``` -Change the value to the desired maximum file size. For example, to allow 10MB uploads, change it to: +Cambie el valor al tamaño máximo de archivo deseado. Por ejemplo, para permitir cargas de 10 MB, cámbielo a: ```ini upload_max_filesize = 10M ``` -## Step 3: Check and update the `post_max_size` value +## Paso 3: Verifique y actualice el valor de `post_max_size` -Next, search for the `post_max_size` setting in the `php.ini` file. It might look like this: +A continuación, busque la configuración `post_max_size` en el archivo `php.ini`. Podría verse así: ```ini post_max_size = 8M ``` -Change the value to the desired maximum file size. For example, to allow 10MB uploads, change it to: +Cambie el valor al tamaño máximo de archivo deseado. Por ejemplo, para permitir cargas de 10 MB, cámbielo a: ```ini post_max_size = 10M ``` -## Step 4: Save and restart your web server - -Save the `php.ini` file and restart your web server. If you're not sure how to restart your web server, you can ask your hosting provider for help. - -Finally, try uploading the large file again in your AppGini app. It should work now. +## Paso 4: Guarde y reinicie su servidor web +Guarde el archivo `php.ini` y reinicie su servidor web. Si no está seguro de cómo reiniciar su servidor web, puede pedir ayuda a su proveedor de alojamiento. +Finalmente, intente cargar el archivo grande nuevamente en su aplicación AppGini. Debería funcionar ahora. diff --git a/pages/troubleshooting/index.md b/pages/troubleshooting/index.md index 92a6ffb..f148ccc 100644 --- a/pages/troubleshooting/index.md +++ b/pages/troubleshooting/index.md @@ -1,17 +1,16 @@ --- -title: Troubleshooting guides for AppGini and generated applications -linkTitle: Troubleshooting +title: Guías de solución de problemas para AppGini y aplicaciones generadas +linkTitle: Solución de problemas slug: help/troubleshooting -description: A listing of troubleshooting guides for common issues encountered while using AppGini and generated applications. -keywords: troubleshooting, help, support, issues, problems, errors +description: Una lista de guías de solución de problemas para problemas comunes encontrados al usar AppGini y aplicaciones generadas. +keywords: solución de problemas, ayuda, soporte, problemas, errores --- -# Troubleshooting guides for AppGini and generated applications +# Guías de solución de problemas para AppGini y aplicaciones generadas -The following section provides a compilation of troubleshooting guides for common issues encountered while using AppGini and generated applications. If you're facing an issue that's not covered here, please feel free to ask for help in the [AppGini forums](https://forums.appgini.com), or [submit a support request](https://bigprof.com/appgini/support-request). +La siguiente sección proporciona una compilación de guías de solución de problemas para problemas comunes encontrados al usar AppGini y aplicaciones generadas. Si se enfrenta a un problema que no está cubierto aquí, no dude en pedir ayuda en los [foros de AppGini](https://forums.appgini.com) o [enviar una solicitud de soporte](https://bigprof.com/appgini/support-request). -## List of troubleshooting guides - -- [I see an error message or a blank page in my AppGini-generated app](../advanced-topics/troubleshooting-errors-and-blank-pages.md) -- [I can't upload large files in my AppGini app](configuring-file-upload-size.md) +## Lista de guías de solución de problemas +- [Veo un mensaje de error o una página en blanco en mi aplicación generada por AppGini](../advanced-topics/troubleshooting-errors-and-blank-pages.md) +- [No puedo cargar archivos grandes en mi aplicación AppGini](configuring-file-upload-size.md) diff --git a/pages/useful-links.md b/pages/useful-links.md index df9a4c7..2af2ea3 100644 --- a/pages/useful-links.md +++ b/pages/useful-links.md @@ -1,121 +1,117 @@ --- -title: Useful links -linkTitle: Useful links +title: Enlaces útiles +linkTitle: Enlaces útiles slug: help/useful-links -keywords: test environment, Xampp, web server, MySQL, PHP, FTP client, FileZilla, upload feature, AppGini upload feature, online course, customizing AppGini applications, hosting providers, Digital Ocean, Bluehost, Docker, Docker container, code management, CVS software, TortoiseGit, HTML reference, CSS reference, Bootstrap 3 reference, jQuery API reference, PHP reference, MySQL SQL reference -description: Useful links for AppGini users, including setting up a test environment, uploading generated code, online course on customizing AppGini applications, hosting providers, running AppGini apps in Docker, code management, and reference material. +keywords: entorno de prueba, Xampp, servidor web, MySQL, PHP, cliente FTP, FileZilla, función de carga, función de carga de AppGini, curso en línea, personalización de aplicaciones AppGini, proveedores de alojamiento, Digital Ocean, Bluehost, Docker, contenedor Docker, gestión de código, software CVS, TortoiseGit, referencia HTML, referencia CSS, referencia Bootstrap 3, referencia API jQuery, referencia PHP, referencia SQL MySQL +description: Enlaces útiles para usuarios de AppGini, incluida la configuración de un entorno de prueba, la carga de código generado, un curso en línea sobre la personalización de aplicaciones AppGini, proveedores de alojamiento, ejecución de aplicaciones AppGini en Docker, gestión de código y material de referencia. --- -# Useful links +# Enlaces útiles -## Setting up a test environment for your web applications +## Configuración de un entorno de prueba para sus aplicaciones web -You can test your AppGini-generated web applications on a *local* machine -before deploying them online. To do so, you need to install a [web -server](http://httpd.apache.org/download.cgi) , -[MySQL](http://dev.mysql.com/downloads/) , and -[PHP](http://www.php.net/downloads.php) . Of course, installing and -configuring all of these programs is a lot of headache. Fortunately, -there is an easier way: download and install -[Xampp](http://www.apachefriends.org/en/xampp-windows.html) , a single -download that takes care of all the necessary work in one shot. +Puede probar sus aplicaciones web generadas por AppGini en una máquina *local* +antes de implementarlas en línea. Para ello, necesita instalar un [servidor +web](http://httpd.apache.org/download.cgi), +[MySQL](http://dev.mysql.com/downloads/) y +[PHP](http://www.php.net/downloads.php). Por supuesto, instalar y +configurar todos estos programas es un gran dolor de cabeza. Afortunadamente, +hay una forma más fácil: descargue e instale +[Xampp](http://www.apachefriends.org/en/xampp-windows.html), una única +descarga que se encarga de todo el trabajo necesario de una sola vez. -**Note:** All of the above tools are free and open source software. +**Nota:** Todas las herramientas anteriores son software gratuito y de código abierto. -## Uploading the generated code to your server +## Carga del código generado a su servidor -### Uploading using an FTP client *(NOT recommended)* +### Carga mediante un cliente FTP *(NO recomendado)* -To upload the generated code to your server, you could use an FTP -client, for example -[FileZilla](https://filezilla-project.org/download.php). However, -this could cause problems if you're not super careful. For example, you -might accidentally overwrite your server-side configuration files, or -you might upload files to the wrong directory structure. In addition, -AppGini creates many files and directories. But many of them are -unchanged from one generation to another. So, you might end up -unnecessarily uploading many files that are already on the server. +Para cargar el código generado a su servidor, podría utilizar un cliente FTP, +por ejemplo +[FileZilla](https://filezilla-project.org/download.php). Sin embargo, +esto podría causar problemas si no tiene mucho cuidado. Por ejemplo, podría +sobrescribir accidentalmente sus archivos de configuración del lado del servidor, o +podría cargar archivos en la estructura de directorios incorrecta. Además, +AppGini crea muchos archivos y directorios. Pero muchos de ellos no cambian +de una generación a otra. Por lo tanto, podría terminar +cargando innecesariamente muchos archivos que ya están en el servidor. -### Uploading using AppGini upload feature *(RECOMMENDED)* +### Carga mediante la función de carga de AppGini *(RECOMENDADO)* -As of AppGini 23.10, you can use the [built-in upload feature](application-uploader.md) to upload -your generated code to your server. This feature is much safer and more -efficient than using an FTP client. It only uploads the files that have -changed since the last generation, and it doesn't overwrite your -server-side configuration files. All you need to do to upload your code -is to click the `Upload` button, and AppGini will take care of the rest. +A partir de AppGini 23.10, puede utilizar la [función de carga integrada](application-uploader.md) para cargar +su código generado a su servidor. Esta función es mucho más segura y eficiente +que utilizar un cliente FTP. Solo carga los archivos que han cambiado +desde la última generación y no sobrescribe sus archivos de configuración +del lado del servidor. Todo lo que necesita hacer para cargar su código +es hacer clic en el botón `Cargar`, y AppGini se encargará del resto. -## Our online course on customizing AppGini applications +## Nuestro curso en línea sobre la personalización de aplicaciones AppGini -We prepared a course for power users of AppGini, who'd like to add more -functionality to their applications by writing custom code. Through 4.5 -hours of video, you'll finish 30 practical examples, featuring more than -500 lines of code, that cover the most common hook questions we receive -from users. [Preview the -course](https://bigrof.com/appgini/udemy-customization-course). +Hemos preparado un curso para usuarios avanzados de AppGini, a quienes les gustaría agregar más +funcionalidad a sus aplicaciones escribiendo código personalizado. A través de 4.5 +horas de video, completará 30 ejemplos prácticos, con más de +500 líneas de código, que cubren las preguntas más comunes sobre hooks que recibimos +de los usuarios. [Vista previa del +curso](https://bigrof.com/appgini/udemy-customization-course). -## Hosting providers +## Proveedores de alojamiento -Most hosting providers support hosting the applications generated by -AppGini out-of-the-box, since AppGini generates PHP applications that -connect to MySQL databases. PHP and MySQL are very widely available -through almost any hosting provider. +La mayoría de los proveedores de alojamiento admiten el alojamiento de las aplicaciones generadas por +AppGini listas para usar, ya que AppGini genera aplicaciones PHP que +se conectan a bases de datos MySQL. PHP y MySQL están muy disponibles +en casi cualquier proveedor de alojamiento. -If you're looking for a very easy to use and **highly reliable cloud -hosting service** , we've been using [Digital -Ocean](https://m.do.co/c/d30b7a2609f4) for many years and are quite -content with their simplicity and reliability. This [special -link](https://m.do.co/c/d30b7a2609f4) provides you with \$100 credit to -try their service. +Si está buscando un servicio de **alojamiento en la nube altamente confiable** y muy fácil de usar, +hemos estado utilizando [Digital +Ocean](https://m.do.co/c/d30b7a2609f4) durante muchos años y estamos bastante +contentos con su simplicidad y confiabilidad. Este [enlace +especial](https://m.do.co/c/d30b7a2609f4) le proporciona un crédito de 100 $ para +probar su servicio. -Digital Ocean however requires some experience managing your server -updates and software installations (they have [many detailed -guides](https://www.digitalocean.com/community/tutorials) for that -though). If you're looking for managed hosting (where the provider -takes care of installing, securing and upgrading your server software, -as well as resolving the majority of technical issues), -[Bluehost](https://www.bluehost.com/) is a very good -option. +Sin embargo, Digital Ocean requiere cierta experiencia en la gestión de las actualizaciones de su servidor +y las instalaciones de software (aunque tienen [muchas guías +detalladas](https://www.digitalocean.com/community/tutorials) para ello). +Si está buscando un alojamiento administrado (donde el proveedor +se encarga de instalar, proteger y actualizar el software de su servidor, +así como de resolver la mayoría de los problemas técnicos), +[Bluehost](https://www.bluehost.com/) es una muy buena +opción. -A good source of information regarding hosting providers is the -[webhostingtalk forum](https://www.webhostingtalk.com/) . +Una buena fuente de información sobre proveedores de alojamiento es el +[foro webhostingtalk](https://www.webhostingtalk.com/). -## Running AppGini apps inside a Docker container +## Ejecución de aplicaciones AppGini dentro de un contenedor Docker -Docker is a great way to run your AppGini applications in a containerized -environment. This way, you can easily move your applications between -different servers, and you can run multiple applications on the same -server without worrying about conflicts between them. Check out our -[guide template for running AppGini apps in Docker](https://github.com/bigprof-software/appgini-on-docker). +Docker es una excelente manera de ejecutar sus aplicaciones AppGini en un entorno contenedorizado. +De esta manera, puede mover fácilmente sus aplicaciones entre +diferentes servidores, y puede ejecutar múltiples aplicaciones en el mismo +servidor sin preocuparse por los conflictos entre ellas. Consulte nuestra +[plantilla de guía para ejecutar aplicaciones AppGini en Docker](https://github.com/bigprof-software/appgini-on-docker). -## Code management +## Gestión de código -If you plan to manually edit the generated code, you should be careful -to avoid overwriting your modifications in case you regenerate the code -later. CVS software helps greatly with organizing and versioning your -code. It makes it very easy to undo (revert) harmful changes, and merge -your modifications into newly generated code. One such great, easy and -free program is [TortoiseGit](https://tortoisegit.org/) . We have a -[tutorial on how to use it with AppGini -code](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes). - - -## Reference material - -- [HTML - reference](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5) -- [CSS - reference](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference) -- [Bootstrap 3 reference](https://getbootstrap.com/docs/3.4/css/) -- [jQuery API reference](https://api.jquery.com/) -- [PHP reference](http://www.php.net/manual/en/) -- [MySQL SQL - reference](https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html) +Si planea editar manualmente el código generado, debe tener cuidado +de evitar sobrescribir sus modificaciones en caso de que regenere el código +más tarde. El software CVS ayuda enormemente a organizar y versionar su +código. Hace que sea muy fácil deshacer (revertir) cambios perjudiciales y fusionar +sus modificaciones en el código recién generado. Un programa excelente, fácil y +gratuito es [TortoiseGit](https://tortoisegit.org/). Tenemos un +[tutorial sobre cómo usarlo con el código de AppGini](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes). +## Material de referencia +- [Referencia de + HTML](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5) +- [Referencia de + CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference) +- [Referencia de Bootstrap 3](https://getbootstrap.com/docs/3.4/css/) +- [Referencia de la API de jQuery](https://api.jquery.com/) +- [Referencia de PHP](http://www.php.net/manual/en/) +- [Referencia de SQL de + MySQL](https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html) diff --git a/pages/working-with-generated-web-database-application/index.md b/pages/working-with-generated-web-database-application/index.md index abfac20..3c3bfaa 100644 --- a/pages/working-with-generated-web-database-application/index.md +++ b/pages/working-with-generated-web-database-application/index.md @@ -1,124 +1,112 @@ --- -title: Working with the generated web database application -linkTitle: Working with generated web app +title: Trabajar con la aplicación de base de datos web generada +linkTitle: Trabajar con la aplicación web generada slug: help/working-with-generated-web-database-application -description: Learn how to work with the generated web database application. -keywords: working with generated web app, generated web app, generated web database application +description: Aprenda a trabajar con la aplicación de base de datos web generada. +keywords: trabajar con aplicación web generada, aplicación web generada, aplicación de base de datos web generada --- -# Working with the generated web database application - - - -After generating the PHP application based on your project, the next -step is to upload the files to your server and set up the database. The -generated files are saved to a folder you specify. Below is a screenshot -of a folder containing files generated from a project. - - -![A folder containing files generated from an AppGini project](https://cdn.bigprof.com/appgini-desktop/help/working-with-generated-web-app.png "A folder containing files generated from an AppGini project") - - -To upload the generated files, you should use an FTP client. A very good -(and open source) program is -[FileZilla](https://filezilla-project.org/download.php) . - -You should upload the entire folder to your web server. Make sure that -your web server is properly configured to run .php files as PHP scripts -(otherwise, they will probably be treated as text files and their entire -source code will be displayed in the visitors' browsers.) - -After you upload the files, you are ready to set up the database. Let's -move on! - -> **IMPORTANT Security note!** -Your database contains important information that you do not want any -unauthorized person to mangle with \... So, only authorized users should -have access to your database. - -The genrated AppGini app implements an advanced, yet -intuitive, user management system. This system allows users to log into -the generated application and have limited permissions that you (the -admin) have full control of. - -The admin has access to an [admin -area](/appgini/help/working-with-generated-web-database-application/the-admin-interface/) -where he can define groups. Each group has its own permissions over each -table in your application. - -For example, let's say that you have created an application for storing -clients' contacts, vendors' contacts, and employees' contacts. The -admin can define a group called 'HR' which can view and edit only the -employees' contacts, a group called 'Sales' which can view and edit -only the clients' contacts, and a group called 'Procurement' which -can view and edit only the vendors' contacts. Each group can have one -or more members, and each member inherits his group's permissions. The -following diagram explains this graphically. - - -![User groups and permissions in AppGini](https://cdn.bigprof.com/images/group.gif "User groups and permissions in AppGini") - - - -If a user of the Sales group tries to access the Vendors table, he will -not be permitted. If an anonymous user tries to access any table, he -will not be permitted. If the admin changes the access permissions of a -group, all members of that group will instantly be granted the new -permissions (and denied the old ones.) - -You can set the permissions of anonymous users in AppGini before file -generation. And you can change them later from the [admin -area](/appgini/help/working-with-generated-web-database-application/the-admin-interface/) -. Please be very careful with setting the anonymous permissions to avoid -compromising your data. - -## A briefing of the generated files - -For each table in your project, AppGini will generate several files. For -example, in the above file list, the \"categories\" table has these -files: - -- `templates/categories_templateDV.html` This file contains the - template that controls the layout of the detail view form of the - table. This form is where users can enter new records or edit - existing ones. - -- `templates/categories_templateDVP.html` This file contains the - template that controls the layout of the printer-friendly detail - view form of the table. - -- `templates/categories_templateTV.html` This file contains the - template for displaying each record in the table view. The table - view is a list of the records in the table. - -- `templates/categories_templateTVS.html` This is the same as the - `categories_templateTV.html`, except that it controls the template - for the selected record only. When users click on a record in the - table view to select it, the selected record is highlighted in the - table view, and its contents are displayed in the detail view for - editing or deleting. - -- `templates/children-categories.php` If categories table is - displayed as a child of another table, this is the file used to - format the child view. - -- `categories_dml.php` This file contains the code that controls - what happens on inserting a new record into the table, editing an - existing record, or deleting a record. - - This file also contains the `form()` function which controls the - display of the detail view, using the `categories_templateDV.html` - template file. - -- `categories_autofill.php` If you have [auto-fill lookup - fields](/appgini/help/working-with-projects/understanding-lookup-fields/) - in your table, this file contains the code to populate these - autofill fields. This file is called through an ajax request and - sends javascript code to the browser. - -- `categories_view.php` This is the controller page that welds all - the above files together into a single page. You can control several - display options and permissions in this page. - - - +# Trabajar con la aplicación de base de datos web generada + +Después de generar la aplicación PHP basada en su proyecto, el siguiente +paso es cargar los archivos a su servidor y configurar la base de datos. Los +archivos generados se guardan en una carpeta que usted especifique. A continuación se muestra una captura de pantalla +de una carpeta que contiene archivos generados a partir de un proyecto. + +![Una carpeta que contiene archivos generados a partir de un proyecto de AppGini](https://cdn.bigprof.com/appgini-desktop/help/working-with-generated-web-app.png "Una carpeta que contiene archivos generados a partir de un proyecto de AppGini") + +Para cargar los archivos generados, debe utilizar un cliente FTP. Un programa muy bueno +(y de código abierto) es +[FileZilla](https://filezilla-project.org/download.php). + +Debe cargar toda la carpeta a su servidor web. Asegúrese de que +su servidor web esté configurado correctamente para ejecutar archivos .php como scripts PHP +(de lo contrario, probablemente se tratarán como archivos de texto y todo su +código fuente se mostrará en los navegadores de los visitantes). + +Después de cargar los archivos, está listo para configurar la base de datos. ¡Continuemos! + +> **¡Nota de seguridad IMPORTANTE!** +Su base de datos contiene información importante que no desea que ninguna +persona no autorizada manipule... Por lo tanto, solo los usuarios autorizados deben +tener acceso a su base de datos. + +La aplicación AppGini generada implementa un sistema de gestión de usuarios avanzado, +pero intuitivo. Este sistema permite a los usuarios iniciar sesión en +la aplicación generada y tener permisos limitados de los que usted (el +administrador) tiene control total. + +El administrador tiene acceso a un [área de +administración](/appgini/help/working-with-generated-web-database-application/the-admin-interface/) +donde puede definir grupos. Cada grupo tiene sus propios permisos sobre cada +tabla de su aplicación. + +Por ejemplo, digamos que ha creado una aplicación para almacenar +contactos de clientes, contactos de proveedores y contactos de empleados. El +administrador puede definir un grupo llamado 'RRHH' que puede ver y editar solo los +contactos de los empleados, un grupo llamado 'Ventas' que puede ver y editar +solo los contactos de los clientes, y un grupo llamado 'Adquisiciones' que +puede ver y editar solo los contactos de los proveedores. Cada grupo puede tener uno +o más miembros, y cada miembro hereda los permisos de su grupo. El +siguiente diagrama explica esto gráficamente. + +![Grupos de usuarios y permisos en AppGini](https://cdn.bigprof.com/images/group.gif "Grupos de usuarios y permisos en AppGini") + +Si un usuario del grupo Ventas intenta acceder a la tabla Proveedores, no +se le permitirá. Si un usuario anónimo intenta acceder a cualquier tabla, no +se le permitirá. Si el administrador cambia los permisos de acceso de un +grupo, a todos los miembros de ese grupo se les otorgarán instantáneamente los nuevos +permisos (y se les denegarán los antiguos). + +Puede establecer los permisos de los usuarios anónimos en AppGini antes de la generación de +archivos. Y puede cambiarlos más tarde desde el [área de +administración](/appgini/help/working-with-generated-web-database-application/the-admin-interface/). +Tenga mucho cuidado al establecer los permisos anónimos para evitar +comprometer sus datos. + +## Un resumen de los archivos generados + +Para cada tabla de su proyecto, AppGini generará varios archivos. Por +ejemplo, en la lista de archivos anterior, la tabla "categorías" tiene estos +archivos: + +- `templates/categories_templateDV.html` Este archivo contiene la + plantilla que controla el diseño del formulario de vista detallada de la + tabla. Este formulario es donde los usuarios pueden ingresar nuevos registros o editar + los existentes. + +- `templates/categories_templateDVP.html` Este archivo contiene la + plantilla que controla el diseño del formulario de vista detallada imprimible + de la tabla. + +- `templates/categories_templateTV.html` Este archivo contiene la + plantilla para mostrar cada registro en la vista de tabla. La vista de tabla + es una lista de los registros de la tabla. + +- `templates/categories_templateTVS.html` Es lo mismo que + `categories_templateTV.html`, excepto que controla la plantilla + solo para el registro seleccionado. Cuando los usuarios hacen clic en un registro en la + vista de tabla para seleccionarlo, el registro seleccionado se resalta en la + vista de tabla y su contenido se muestra en la vista detallada para + editarlo o eliminarlo. + +- `templates/children-categories.php` Si la tabla de categorías se + muestra como secundaria de otra tabla, este es el archivo utilizado para + formatear la vista secundaria. + +- `categories_dml.php` Este archivo contiene el código que controla + lo que sucede al insertar un nuevo registro en la tabla, editar un + registro existente o eliminar un registro. + + Este archivo también contiene la función `form()` que controla la + visualización de la vista detallada, utilizando el archivo de plantilla `categories_templateDV.html`. + +- `categories_autofill.php` Si tiene [campos de búsqueda de + autocompletar](/appgini/help/working-with-projects/understanding-lookup-fields/) + en su tabla, este archivo contiene el código para completar estos + campos de autocompletar. Este archivo se llama a través de una solicitud ajax y + envía código javascript al navegador. + +- `categories_view.php` Esta es la página controladora que une todos + los archivos anteriores en una sola página. Puede controlar varias + opciones de visualización y permisos en esta página. diff --git a/pages/working-with-generated-web-database-application/setup.md b/pages/working-with-generated-web-database-application/setup.md index 5f47bb2..53799a0 100644 --- a/pages/working-with-generated-web-database-application/setup.md +++ b/pages/working-with-generated-web-database-application/setup.md @@ -1,111 +1,110 @@ --- -title: Setup of AppGini-generated applications -linkTitle: Setup of AppGini-generated applications -keywords: setup, appgini, generated applications, database, web applications, test connection, admin user, captcha -description: Learn how to set up your AppGini-generated web database application, including solving the captcha, filling in the database information, and creating the admin user. +title: Configuración de aplicaciones generadas por AppGini +linkTitle: Configuración de aplicaciones generadas por AppGini +keywords: configuración, appgini, aplicaciones generadas, base de datos, aplicaciones web, probar conexión, usuario administrador, captcha +description: Aprenda cómo configurar su aplicación de base de datos web generada por AppGini, incluyendo la resolución del captcha, el llenado de la información de la base de datos y la creación del usuario administrador. slug: help/working-with-generated-web-database-application/setup --- -# Setup of AppGini-generated applications +# Configuración de aplicaciones generadas por AppGini -## Accessing your application +## Acceso a su aplicación -After [uploading your PHP application files](../application-uploader.md) to your server, -you can access it by pointing your browser to the application's URL. Depending on your server, -the URL might look like this if you uploaded the files to the document root: +Después de [cargar los archivos de su aplicación PHP](../application-uploader.md) a su servidor, +puede acceder a ella apuntando su navegador a la URL de la aplicación. Dependiendo de su servidor, +la URL podría verse así si cargó los archivos en la raíz del documento: ```plaintext -https://www.yourserver.com/ +https://www.suserver.com/ ``` -Or like this if you uploaded the files to a subfolder named `myapp`: +O así si cargó los archivos en una subcarpeta llamada `miapp`: ```plaintext -https://www.yourserver.com/myapp/ +https://www.suserver.com/miapp/ ``` -Replace `www.yourserver.com` with your server name -(or IP address if you are running the server on an intranet), -and `myapp` with the path to the folder where you uploaded the files. +Reemplace `www.suserver.com` con el nombre de su servidor +(o dirección IP si está ejecutando el servidor en una intranet), +y `miapp` con la ruta a la carpeta donde cargó los archivos. -## Step 1: Solve the captcha +## Paso 1: Resuelva el captcha -The first time you access your application, you'll be presented with a captcha to solve. -This is a security measure to prevent bots from trying to access your setup page. +La primera vez que acceda a su aplicación, se le presentará un captcha para resolver. +Esta es una medida de seguridad para evitar que los bots intenten acceder a su página de configuración. -![Setup captcha](https://cdn.bigprof.com/images/appgini-setup-01-captcha.png "Setup captcha") +![Captcha de configuración](https://cdn.bigprof.com/images/appgini-setup-01-captcha.png "Captcha de configuración") -Simply solve the captcha and click the `Submit` button. Please note that this step -might not be displayed if your server doesn't have the `GD` library installed. In this case, -just skip to the next step. +Simplemente resuelva el captcha y haga clic en el botón `Enviar`. Tenga en cuenta que este paso +podría no mostrarse si su servidor no tiene instalada la biblioteca `GD`. En este caso, +simplemente salte al siguiente paso. -If you're unable to solve the captcha for any reason, you can disable it by editing the -generated `definitions.php` file and changing the following line: +Si no puede resolver el captcha por cualquier motivo, puede deshabilitarlo editando el +archivo `definitions.php` generado y cambiando la siguiente línea: ```php @define('FORCE_SETUP_CAPTCHA', true); ``` -to: +a: ```php @define('FORCE_SETUP_CAPTCHA', false); ``` -## Step 2: The setup form +## Paso 2: El formulario de configuración -In the next step, you should see the following intro screen: +En el siguiente paso, debería ver la siguiente pantalla de introducción: -![Setup intro](https://cdn.bigprof.com/images/appgini-setup-02-setup-intro.png "Setup intro") +![Introducción a la configuración](https://cdn.bigprof.com/images/appgini-setup-02-setup-intro.png "Introducción a la configuración") -Click 'Continue' to proceed to the setup checklist: +Haga clic en 'Continuar' para pasar a la lista de verificación de configuración: -![Setup checklist](https://cdn.bigprof.com/images/appgini-setup-03-prepare-db-info.png "Setup checklist") +![Lista de verificación de configuración](https://cdn.bigprof.com/images/appgini-setup-03-prepare-db-info.png "Lista de verificación de configuración") -This simply lists the required database information you need to have at hand before proceeding. -Usually, you can retrieve this information from your hosting control panel. -In some cases, you might need to create a new database and user for your application, -which you can also do from your hosting control panel, using a tool like phpMyAdmin, -or through the command line. +Esto simplemente enumera la información de base de datos requerida que necesita tener a mano antes de continuar. +Por lo general, puede recuperar esta información de su panel de control de alojamiento. +En algunos casos, es posible que deba crear una nueva base de datos y un usuario para su aplicación, +lo que también puede hacer desde su panel de control de alojamiento, utilizando una herramienta como phpMyAdmin, +o mediante la línea de comandos. -For more details, please refer to [how to create a new MySQL/MariaDB database and user](../create-mysql-database-and-user.md). +Para obtener más detalles, consulte [cómo crear una nueva base de datos y usuario MySQL/MariaDB](../create-mysql-database-and-user.md). -Once you have the required information, click 'Continue' to proceed to the database setup form: +Una vez que tenga la información requerida, haga clic en 'Continuar' para pasar al formulario de configuración de la base de datos: -![Database setup form](https://cdn.bigprof.com/images/appgini-setup-04-setup-form.png "Database setup form") +![Formulario de configuración de la base de datos](https://cdn.bigprof.com/images/appgini-setup-04-setup-form.png "Formulario de configuración de la base de datos") -Fill in the required information: +Complete la información requerida: -- **MySQL server (host)**: This is usually `localhost`, but it might be different depending on your hosting provider. -- **Database name**, **MySQL Username**, and **MySQL Password**: These are the database name, username, and password you created earlier. -- **MySQL port**: This is usually `3306`, but it might be different depending on your hosting provider. +- **Servidor MySQL (host)**: Suele ser `localhost`, pero podría ser diferente según su proveedor de alojamiento. +- **Nombre de la base de datos**, **Nombre de usuario de MySQL** y **Contraseña de MySQL**: Estos son el nombre de la base de datos, el nombre de usuario y la contraseña que creó anteriormente. +- **Puerto MySQL**: Suele ser `3306`, pero podría ser diferente según su proveedor de alojamiento. -After typing in the above information, a connection test will be performed to ensure that the application can connect to the database. -If the connection test fails, you'd see an error message as below: +Después de escribir la información anterior, se realizará una prueba de conexión para garantizar que la aplicación pueda conectarse a la base de datos. +Si la prueba de conexión falla, verá un mensaje de error como el siguiente: -![Database connection error](https://cdn.bigprof.com/images/appgini-setup-05-db-connection-error.png "Database connection error") +![Error de conexión a la base de datos](https://cdn.bigprof.com/images/appgini-setup-05-db-connection-error.png "Error de conexión a la base de datos") -In that case, double-check the information you entered and make sure it's correct. Then click the 'Retry' button to the right of the error message -to re-test the connection. +En ese caso, verifique la información que ingresó y asegúrese de que sea correcta. Luego haga clic en el botón 'Reintentar' a la derecha del mensaje de error +para volver a probar la conexión. -If the connection test succeeds, you'll see a success message as below: +Si la prueba de conexión tiene éxito, verá un mensaje de éxito como el siguiente: -![Database connection success](https://cdn.bigprof.com/images/appgini-setup-06-db-connection-success.png "Database connection success") +![Éxito de la conexión a la base de datos](https://cdn.bigprof.com/images/appgini-setup-06-db-connection-success.png "Éxito de la conexión a la base de datos") -Next, provide the desired admin username, email, and password for your application. -This will be the username and password you'll use to log in to your application's [admin area](the-admin-interface.md), where -you can manage your application's settings, users, groups, and more. +A continuación, proporcione el nombre de usuario, el correo electrónico y la contraseña de administrador deseados para su aplicación. +Este será el nombre de usuario y la contraseña que utilizará para iniciar sesión en el [área de administración](the-admin-interface.md) de su aplicación, donde +podrá administrar la configuración, los usuarios, los grupos y más de su aplicación. -After filling in the admin information, click 'Submit' to proceed to the final step. +Después de completar la información del administrador, haga clic en 'Enviar' para pasar al paso final. -## Step 3: Finalizing the setup +## Paso 3: Finalización de la configuración -Your AppGini-generated application will next attempt to create the necessary database tables and populate them with initial data. -If the setup process completes successfully, you'll see a success message as below: +Su aplicación generada por AppGini intentará a continuación crear las tablas de base de datos necesarias y poblarlas con datos iniciales. +Si el proceso de configuración se completa con éxito, verá un mensaje de éxito como el siguiente: -![Setup success](https://cdn.bigprof.com/images/appgini-setup-07-success.png "Setup success") +![Éxito de la configuración](https://cdn.bigprof.com/images/appgini-setup-07-success.png "Éxito de la configuración") -Depending on what you want to do next, click one of the options provided. - -That's it! You've successfully set up your AppGini-generated application. +Dependiendo de lo que quiera hacer a continuación, haga clic en una de las opciones proporcionadas. +¡Eso es todo! Ha configurado correctamente su aplicación generada por AppGini. diff --git a/pages/working-with-generated-web-database-application/shortcut-keys.md b/pages/working-with-generated-web-database-application/shortcut-keys.md index 9c79434..e8a77a8 100644 --- a/pages/working-with-generated-web-database-application/shortcut-keys.md +++ b/pages/working-with-generated-web-database-application/shortcut-keys.md @@ -1,134 +1,130 @@ --- -title: Shortcut keys -linkTitle: Shortcut keys +title: Teclas de acceso directo +linkTitle: Teclas de acceso directo slug: help/working-with-generated-web-database-application/shortcut-keys -keywords: shortcut keys, keyboard shortcuts, hotkeys, appgini shortcuts -description: Learn about the shortcut keys available in AppGini-generated web database applications. +keywords: teclas de acceso directo, atajos de teclado, teclas de acceso rápido, atajos de appgini +description: Obtenga información sobre las teclas de acceso directo disponibles en las aplicaciones de bases de datos web generadas por AppGini. --- -# Shortcut keys in AppGini apps - -Shortcut keys are a great way to speed up your work in AppGini-generated -applications. They allow you to quickly navigate between different -sections of your app, perform common actions, and more. This page -provides a reference for the available shortcut keys in AppGini apps. - -> Shortcut keys can be used in AppGini apps as of AppGini 5.90. - -## Enabling/disabling shortcut keys - -You can enable or disable shortcut keys in your AppGini app in 2 ways: - -1. Press **` CTRL `** or **` SHIFT `** + **` F1 `**. This will display a - list of available shortcut keys and a toggle button to enable or - disable shortcut keys. Click the toggle button to enable or disable - shortcut keys. - - ![Shortcut keys popup](https://cdn.bigprof.com/images/keyboard-shortcuts-popup-window.png) - -2. Alternatively, you can enable or disable shortcut keys by opening the profile - menu (by clicking your username at the top right corner of the page), - then clicking the **Keyboard shortcuts** link. This will open the - same popup as above. - - ![Enable/disable shortcut keys](https://cdn.bigprof.com/images/enable-shortcut-keys-in-appgini-app.png) - -## Shortcut keys reference - -**Note:** Unless otherwise specified (*1*) , pressing the shortcut keys -below focuses (highlights) the related link/button (rather than -performing the action itself -- this is intended to prevent doing any -unintended action by mistake if pressing the wrong shortcut key -combination). After a link is focused, you could press **` ENTER `** -to actually activate the link, **` TAB `** to navigate to the next -link, or **` SHIFT `** + **` TAB `** to navigate to the previous -link. - -> (*1*) Wherever the shortcut listings below mention *"instant action"* -> , this is an exception to the above rule, meaning that pressing this -> particular shortcut keys combination would instantly apply the related -> action. - - -#### General shortcuts available in all pages - -- **` CTRL `** or **` SHIFT `** + **` F1 `** : Display available shortcuts (and enable/disabled shortcut keys). -- **` ALT `** + **` 0 `** : Homepage. -- **` ALT `** + **` 1 `** to **` 9 `** : Open available navigation menus. -- **` ALT `** + **` M `** : Import CSV data (if you have permission to). -- **` ALT `** + **` A `** : Admin area (if you're signed in as admin). -- **` ALT `** + **` P `** : User profile. -- **` ALT `** + **` P `** then **` SHIFT `** + **` TAB `** : Sign out. - -#### Homepage - -- **` SHIFT `** + **` F2 `** : Highlight first table group. -- **` CTRL `** + **` F2 `** : Highlight the first table link. - -#### Table view - -- **` ALT `** + **` Q `** : Quick search (type your search then press **` ENTER `** ). -- **` ALT `** + **` SHIFT `** + Q: Clear quick search *(instant action)*. -- **` F2 `** : same as **` ALT `** + **` Q `**. -- **` SHIFT `** + **` F2 `** : First button in the buttons bar above the table. -- **` ALT `** + **` F2 `** : First element in the bottom navigation bar. -- **` CTRL `** + **` F2 `** : First record selector checkbox. - - You can then navigate to other records using **` CTRL `** + **` ↑ `** and **` CTRL `** + **` ↓ `**. - - **Tip:** to open the currently highlighted record in the detail view, press **` TAB `** then **` ENTER `**. -- **` ALT `** + **` CTRL `** + **` S `** : Select/unselect all records. -- **` ALT `** + **` CTRL `** + **` M `** : Open **More** menu. -- **` CTRL `** + **` ← `** : Previous page *(instant action)*. -- **` CTRL `** + **` → `** : Next page *(instant action)*. - -#### Detail view - -- **` F2 `** : First field in form. -- **` SHIFT `** + **` F2 `** : First button in the action buttons at the right of the form. -- **` CTRL `** + **` F2 `** : First child record. -- **` ALT `** + **` I `**: Show/hide admin information menu (if you're signed in as admin). -- **` F8 `** : First child link (from the child links above the detail view form). -- **` SHIFT `** + **` F8 `** : First child tab. -- **` ALT `** + **` F8 `** : First navigation button in child tab. -- **` CTRL `** + **` ← `** : Previous record *(instant action)*. -- **` CTRL `** + **` → `** : Next record *(instant action)*. -- **` CTRL `** + **` ↑ `** : Same as **` CTRL `** + **` ← `**. -- **` CTRL `** + **` ↓ `** : Same as **` CTRL `** + **` → `**. -- **` CTRL `** + **` ENTER `** : Save Changes *(instant action)*. -- **` ALT `** + **` X `** : Back to table view, discarding any changes made *(instant action)*. - -#### Filters page: - -- **` F2 `** : First filter. -- **` SHIFT `** + **` F2 `** : Apply filters button. -- **` CTRL `** + **` ENTER `** : Apply filters *(instant action)*. -- **` CTRL `** + **` SHIFT `** + **` ENTER `** : Save and apply filters *(instant action)*. -- **` ALT `** + **` X `** : Cancel and go back to table view *(instant action)*. - -#### Print preview of table view: - -- **` SHIFT `** + **` F2 `** : Print button. -- **` ALT `** + **` X `** : Back *(instant action)*. - -#### Print preview of detail view: - -- **` SHIFT `** + **` F2 `** : Print button. -- **` SHIFT `** + **` F8 `** : First child tab. You can then press - **` ENTER `** to expand/collapse children records. -- **` ALT `** + **` X `** : Back to detail view *(instant action)*. -- **` CTRL `** + **` ← `** : Previous record's detail view *(instant action)*. -- **` CTRL `** + **` → `** : Next record's detail view *(instant action)*. -- **` CTRL `** + **` ↑ `** : Same as **` CTRL `** + **` ← `**. -- **` CTRL `** + **` ↓ `** : Same as **` CTRL `** + **` → `**. - -## (AppGini 5.91+) Hide 'keyboard shortcuts reference' link - -In AppGini 5.91 and above, the shortcuts window includes a link at the -bottom that points to this page. This makes it easy for your app users -to see a full reference. You can remove this link if desired by adding -this line to `hooks/footer-extras.php`: +# Teclas de acceso directo en las aplicaciones AppGini + +Las teclas de acceso directo son una excelente manera de acelerar su trabajo en las aplicaciones generadas por AppGini. +Le permiten navegar rápidamente entre diferentes +secciones de su aplicación, realizar acciones comunes y más. Esta página +proporciona una referencia de las teclas de acceso directo disponibles en las aplicaciones AppGini. + +> Las teclas de acceso directo se pueden usar en las aplicaciones AppGini a partir de AppGini 5.90. + +## Habilitar/deshabilitar teclas de acceso directo + +Puede habilitar o deshabilitar las teclas de acceso directo en su aplicación AppGini de 2 maneras: + +1. Presione **` CTRL `** o **` SHIFT `** + **` F1 `**. Esto mostrará una + lista de las teclas de acceso directo disponibles y un botón de alternancia para habilitar o + deshabilitar las teclas de acceso directo. Haga clic en el botón de alternancia para habilitar o deshabilitar + las teclas de acceso directo. + + ![Ventana emergente de teclas de acceso directo](https://cdn.bigprof.com/images/keyboard-shortcuts-popup-window.png) + +2. Alternativamente, puede habilitar o deshabilitar las teclas de acceso directo abriendo el menú de perfil + (haciendo clic en su nombre de usuario en la esquina superior derecha de la página), + luego haciendo clic en el enlace **Atajos de teclado**. Esto abrirá la + misma ventana emergente que arriba. + + ![Habilitar/deshabilitar teclas de acceso directo](https://cdn.bigprof.com/images/enable-shortcut-keys-in-appgini-app.png) + +## Referencia de teclas de acceso directo + +**Nota:** A menos que se especifique lo contrario (*1*), al presionar las teclas de acceso directo +a continuación, se enfoca (resalta) el enlace/botón relacionado (en lugar de +realizar la acción en sí misma; esto tiene la intención de evitar realizar cualquier +acción no deseada por error si se presiona la combinación incorrecta de teclas de acceso directo). +Después de enfocar un enlace, puede presionar **` ENTER `** +para activar realmente el enlace, **` TAB `** para navegar al siguiente +enlace, o **` SHIFT `** + **` TAB `** para navegar al enlace anterior. + +> (*1*) Siempre que las listas de accesos directos a continuación mencionen *"acción instantánea"* +> , esto es una excepción a la regla anterior, lo que significa que presionar esta +> combinación particular de teclas de acceso directo aplicaría instantáneamente la acción relacionada. + + +#### Accesos directos generales disponibles en todas las páginas + +- **` CTRL `** o **` SHIFT `** + **` F1 `** : Mostrar accesos directos disponibles (y habilitar/deshabilitar teclas de acceso directo). +- **` ALT `** + **` 0 `** : Página de inicio. +- **` ALT `** + **` 1 `** a **` 9 `** : Abrir menús de navegación disponibles. +- **` ALT `** + **` M `** : Importar datos CSV (si tiene permiso para hacerlo). +- **` ALT `** + **` A `** : Área de administración (si ha iniciado sesión como administrador). +- **` ALT `** + **` P `** : Perfil de usuario. +- **` ALT `** + **` P `** luego **` SHIFT `** + **` TAB `** : Cerrar sesión. + +#### Página de inicio + +- **` SHIFT `** + **` F2 `** : Resaltar el primer grupo de tablas. +- **` CTRL `** + **` F2 `** : Resaltar el primer enlace de tabla. + +#### Vista de tabla + +- **` ALT `** + **` Q `** : Búsqueda rápida (escriba su búsqueda y luego presione **` ENTER `** ). +- **` ALT `** + **` SHIFT `** + Q: Borrar búsqueda rápida *(acción instantánea)*. +- **` F2 `** : igual que **` ALT `** + **` Q `**. +- **` SHIFT `** + **` F2 `** : Primer botón en la barra de botones sobre la tabla. +- **` ALT `** + **` F2 `** : Primer elemento en la barra de navegación inferior. +- **` CTRL `** + **` F2 `** : Primera casilla de verificación del selector de registros. + - Luego puede navegar a otros registros usando **` CTRL `** + **` ↑ `** y **` CTRL `** + **` ↓ `**. + - **Consejo:** para abrir el registro actualmente resaltado en la vista detallada, presione **` TAB `** y luego **` ENTER `**. +- **` ALT `** + **` CTRL `** + **` S `** : Seleccionar/deseleccionar todos los registros. +- **` ALT `** + **` CTRL `** + **` M `** : Abrir menú **Más**. +- **` CTRL `** + **` ← `** : Página anterior *(acción instantánea)*. +- **` CTRL `** + **` → `** : Página siguiente *(acción instantánea)*. + +#### Vista detallada + +- **` F2 `** : Primer campo del formulario. +- **` SHIFT `** + **` F2 `** : Primer botón en los botones de acción a la derecha del formulario. +- **` CTRL `** + **` F2 `** : Primer registro secundario. +- **` ALT `** + **` I `**: Mostrar/ocultar menú de información de administrador (si ha iniciado sesión como administrador). +- **` F8 `** : Primer enlace secundario (de los enlaces secundarios sobre el formulario de vista detallada). +- **` SHIFT `** + **` F8 `** : Primera pestaña secundaria. +- **` ALT `** + **` F8 `** : Primer botón de navegación en la pestaña secundaria. +- **` CTRL `** + **` ← `** : Registro anterior *(acción instantánea)*. +- **` CTRL `** + **` → `** : Siguiente registro *(acción instantánea)*. +- **` CTRL `** + **` ↑ `** : Igual que **` CTRL `** + **` ← `**. +- **` CTRL `** + **` ↓ `** : Igual que **` CTRL `** + **` → `**. +- **` CTRL `** + **` ENTER `** : Guardar cambios *(acción instantánea)*. +- **` ALT `** + **` X `** : Volver a la vista de tabla, descartando cualquier cambio realizado *(acción instantánea)*. + +#### Página de filtros: + +- **` F2 `** : Primer filtro. +- **` SHIFT `** + **` F2 `** : Botón Aplicar filtros. +- **` CTRL `** + **` ENTER `** : Aplicar filtros *(acción instantánea)*. +- **` CTRL `** + **` SHIFT `** + **` ENTER `** : Guardar y aplicar filtros *(acción instantánea)*. +- **` ALT `** + **` X `** : Cancelar y volver a la vista de tabla *(acción instantánea)*. + +#### Vista previa de impresión de la vista de tabla: + +- **` SHIFT `** + **` F2 `** : Botón Imprimir. +- **` ALT `** + **` X `** : Atrás *(acción instantánea)*. + +#### Vista previa de impresión de la vista detallada: + +- **` SHIFT `** + **` F2 `** : Botón Imprimir. +- **` SHIFT `** + **` F8 `** : Primera pestaña secundaria. Luego puede presionar + **` ENTER `** para expandir/contraer los registros secundarios. +- **` ALT `** + **` X `** : Volver a la vista detallada *(acción instantánea)*. +- **` CTRL `** + **` ← `** : Vista detallada del registro anterior *(acción instantánea)*. +- **` CTRL `** + **` → `** : Vista detallada del siguiente registro *(acción instantánea)*. +- **` CTRL `** + **` ↑ `** : Igual que **` CTRL `** + **` ← `**. +- **` CTRL `** + **` ↓ `** : Igual que **` CTRL `** + **` → `**. + +## (AppGini 5.91+) Ocultar enlace 'referencia de atajos de teclado' + +En AppGini 5.91 y superior, la ventana de accesos directos incluye un enlace en la +parte inferior que apunta a esta página. Esto facilita que los usuarios de su aplicación +vean una referencia completa. Puede eliminar este enlace si lo desea agregando +esta línea a `hooks/footer-extras.php`: ```javascript <script>_noShortcutsReference = true;</script> ``` - - diff --git a/pages/working-with-generated-web-database-application/the-admin-interface.md b/pages/working-with-generated-web-database-application/the-admin-interface.md index 3dd84c9..265f853 100644 --- a/pages/working-with-generated-web-database-application/the-admin-interface.md +++ b/pages/working-with-generated-web-database-application/the-admin-interface.md @@ -1,78 +1,71 @@ --- -title: The admin interface -linkTitle: The admin interface +title: La interfaz de administración +linkTitle: La interfaz de administración slug: help/working-with-generated-web-database-application/the-admin-interface --- -# The admin interface - - - -AppGini allows you to create member accounts and control the privileges -of members. For each table in your application, you can control whether -members can add new records, edit existing ones, and/or delete records. -Moreover, you can control which records a member can edit and/or delete: -only his own records (records added by the member himself), or his -group's records (records added by any member of the group to which our -member belongs), or all records entered by him and any other member of -any group. - -## Member groups - -To make administration of members easier, AppGini allows you to create -groups and assign each member to a group. Thus, instead of assigning -privileges to each individual member separately, you assign privileges -to a group. All members of the group are then automatically assigned -these privileges. - -### Sample scenario: A content publishing application - -For example, if you are developing a content publishing application, you -might create an authors group that has the privilege to add new records -to the articles table. Each member of the authors group can edit his own -records (articles), but not the articles of other members (authors). - -You would also create an editors group. Members of this group can edit -any record in the articles table, but are not allowed to delete or add -records. - -Finally, you might create a subscribers group. Members of this group can -only read articles (that is, view records of the articles table), but -not edit, delete or add records. - -## Accessing the admin homepage - -The admin interface allows you to define groups and their privileges, -approve and ban members, send email notifications to groups or -individual members, plus other administrative tasks. - -You can access the admin interface by signing in as an admin user, then clicking the 'Admin area' link at the top of the page. This will take you to the admin homepage, similar to the one below. - -!["The admin homepage of an AppGini application"](https://cdn.bigprof.com/appgini-desktop/help/the-admin-interface-2.png "The admin homepage of an AppGini application") - -After signing in, you'll see the admin homepage, which provides a quick -review of latest events: newest members, most active members, newest -records and updates, plus links to all admin tools. - -## Some features of the admin interface - - -- Managing user groups and users. -- The 'Admin settings' link in the admin homepage allows you to - adjust several administrative settings. These include: - - Changing the admin username and password. - - Changing the name and email used for the sender details when - sending email notifications to groups or members. - - Define/customize up to 4 info fields that new members are asked - to fill during sign-up. - - Customize the contents of the email sent to new members when - they are approved. - - Customize the date format used to display dates in the admin - interface. - - Customize the number of rows to display per page in the 'View - Groups', 'View Members' and 'View Member's Records' pages. - - Define the default sign-up mode for new groups. - - Change the name of the anonymous group and anonymous member. - - - +# La interfaz de administración + +AppGini le permite crear cuentas de miembros y controlar los privilegios +de los miembros. Para cada tabla de su aplicación, puede controlar si +los miembros pueden agregar nuevos registros, editar los existentes y/o eliminar registros. +Además, puede controlar qué registros puede editar y/o eliminar un miembro: +solo sus propios registros (registros agregados por el propio miembro), o los registros de su +grupo (registros agregados por cualquier miembro del grupo al que +pertenece nuestro miembro), o todos los registros ingresados por él y cualquier otro miembro de +cualquier grupo. + +## Grupos de miembros + +Para facilitar la administración de los miembros, AppGini le permite crear +grupos y asignar cada miembro a un grupo. Por lo tanto, en lugar de asignar +privilegios a cada miembro individual por separado, asigna privilegios +a un grupo. A todos los miembros del grupo se les asignan automáticamente +estos privilegios. + +### Escenario de ejemplo: una aplicación de publicación de contenido + +Por ejemplo, si está desarrollando una aplicación de publicación de contenido, podría +crear un grupo de autores que tenga el privilegio de agregar nuevos registros +a la tabla de artículos. Cada miembro del grupo de autores puede editar sus propios +registros (artículos), pero no los artículos de otros miembros (autores). + +También crearía un grupo de editores. Los miembros de este grupo pueden editar +cualquier registro en la tabla de artículos, pero no pueden eliminar ni agregar +registros. + +Finalmente, podría crear un grupo de suscriptores. Los miembros de este grupo solo pueden +leer artículos (es decir, ver registros de la tabla de artículos), pero +no editar, eliminar ni agregar registros. + +## Acceso a la página de inicio de administración + +La interfaz de administración le permite definir grupos y sus privilegios, +aprobar y prohibir miembros, enviar notificaciones por correo electrónico a grupos o +miembros individuales, además de otras tareas administrativas. + +Puede acceder a la interfaz de administración iniciando sesión como usuario administrador y luego haciendo clic en el enlace 'Área de administración' en la parte superior de la página. Esto lo llevará a la página de inicio de administración, similar a la siguiente. + +!["La página de inicio de administración de una aplicación AppGini"](https://cdn.bigprof.com/appgini-desktop/help/the-admin-interface-2.png "La página de inicio de administración de una aplicación AppGini") + +Después de iniciar sesión, verá la página de inicio de administración, que proporciona una revisión rápida +de los últimos eventos: miembros más nuevos, miembros más activos, registros y actualizaciones más recientes, +además de enlaces a todas las herramientas de administración. + +## Algunas características de la interfaz de administración + +- Gestión de grupos de usuarios y usuarios. +- El enlace 'Configuración de administrador' en la página de inicio de administración le permite + ajustar varias configuraciones administrativas. Estas incluyen: + - Cambiar el nombre de usuario y la contraseña del administrador. + - Cambiar el nombre y el correo electrónico utilizados para los detalles del remitente al + enviar notificaciones por correo electrónico a grupos o miembros. + - Definir/personalizar hasta 4 campos de información que se les pide a los nuevos miembros + que completen durante el registro. + - Personalizar el contenido del correo electrónico enviado a los nuevos miembros cuando + son aprobados. + - Personalizar el formato de fecha utilizado para mostrar las fechas en la interfaz de administración. + - Personalizar el número de filas que se mostrarán por página en las páginas 'Ver + grupos', 'Ver miembros' y 'Ver registros de miembros'. + - Definir el modo de registro predeterminado para nuevos grupos. + - Cambiar el nombre del grupo anónimo y del miembro anónimo. diff --git a/pages/working-with-generated-web-database-application/working-with-filters.md b/pages/working-with-generated-web-database-application/working-with-filters.md index 2f173e1..e7a7494 100644 --- a/pages/working-with-generated-web-database-application/working-with-filters.md +++ b/pages/working-with-generated-web-database-application/working-with-filters.md @@ -1,53 +1,42 @@ --- -title: Working with filters -linkTitle: Working with filters +title: Trabajar con filtros +linkTitle: Trabajar con filtros slug: help/working-with-generated-web-database-application/working-with-filters --- -# Working with filters +# Trabajar con filtros +Los filtros permiten a los usuarios tener un control avanzado sobre la visualización de datos. El +botón de filtros abre una página de filtros como se muestra a continuación. +![Página de filtros](https://cdn.bigprof.com/appgini-desktop/help/working-with-filters-1.png "Página de filtros") -Filters allow users to have advanced control over data display. The -filters button brings a filters page as shown below. +Por ejemplo, si deseamos encontrar todos los clientes de Francia, Alemania o +México, cuyos nombres de contacto comiencen con A, M o P, los filtros se verían +así: +![Filtros para clientes de Francia, Alemania o México, cuyos nombres de contacto comienzan con A, M o P](https://cdn.bigprof.com/appgini-desktop/help/northwind-customers.png "Filtros para clientes de Francia, Alemania o México, cuyos nombres de contacto comienzan con A, M o P") -![Filters page](https://cdn.bigprof.com/appgini-desktop/help/working-with-filters-1.png "Filters page") +Si un filtro comienza con 'Y', significa que la condición debe cumplirse, +y si comienza con 'O', entonces la condición es opcional. +Puede usar % (signo de porcentaje) y _ (guion bajo) en los valores de comparación +cuando el operador de comparación es 'Como' o 'No como'. % significa cualquier +número de caracteres y _ significa cualquier carácter individual. +Hay varios operadores de comparación disponibles para los filtros, el +siguiente menú desplegable de la página de filtros los muestra todos. -For example, if we wish to find all customers from France, Germany or -Mexico, whose contact names begin with A, M or P, the filters would look -like this: +![](https://cdn.bigprof.com/appgini-desktop/help/working-with-filters-3.png "Operadores de comparación") +Para aplicar filtros a la vista de tabla después de especificarlos, simplemente haga clic +en el botón "Aplicar filtros". -![Filters for customers from France, Germany or Mexico, whose contact names begin with A, M or P](https://cdn.bigprof.com/appgini-desktop/help/northwind-customers.png "Filters for customers from France, Germany or Mexico, whose contact names begin with A, M or P") +## Videotutoriales relacionados - -If a filter begins with 'And' it means the condition must be -fulfilled, and if it begins with 'Or' then the condition is optional. -You can use % (percentage sign) and \_ (underscore) in comparison values -when the comparison operator is 'Like' or 'Not Like'. % means any -number of characters and \_ means any single character. - -There are several comparison operators available for filters, the -following drop-down from the filters page shows them all. - - -![](https://cdn.bigprof.com/appgini-desktop/help/working-with-filters-3.png "Comparison operators") - - -To apply filters to the table view after specifying them, simply click -the \"Apply filters\" button. - -## Related screencasts - -#### Saving filters for use later +#### Guardar filtros para usarlos más tarde <iframe width="640" height="390" src="https://www.youtube.com/embed/7gMWoVh62wU" frameborder="0" allowfullscreen=""></iframe> -#### Performing advanced search queries in AppGini using filters +#### Realización de búsquedas avanzadas en AppGini mediante filtros <iframe width="640" height="390" src="https://www.youtube.com/embed/BNSFbWXWBJA" frameborder="0" allowfullscreen=""></iframe> - - - diff --git a/pages/working-with-generated-web-database-application/working-with-tables-and-records.md b/pages/working-with-generated-web-database-application/working-with-tables-and-records.md index 5bb643d..f6604cd 100644 --- a/pages/working-with-generated-web-database-application/working-with-tables-and-records.md +++ b/pages/working-with-generated-web-database-application/working-with-tables-and-records.md @@ -1,251 +1,250 @@ --- -title: Working with tables and records -linkTitle: Working with tables and records +title: Trabajar con tablas y registros +linkTitle: Trabajar con tablas y registros slug: help/working-with-generated-web-database-application/working-with-tables-and-records -keywords: tables, records, table view, detail view, homepage, filters, sorting, pagination, child records, export records, print records -description: Learn how to work with tables and records in your AppGini application. This page explains the homepage, table view, detail view, and how to filter, sort, and export records. +keywords: tablas, registros, vista de tabla, vista detallada, página de inicio, filtros, ordenación, paginación, registros secundarios, exportar registros, imprimir registros +description: Aprenda a trabajar con tablas y registros en su aplicación AppGini. Esta página explica la página de inicio, la vista de tabla, la vista detallada y cómo filtrar, ordenar y exportar registros. --- -# Working with tables and records +# Trabajar con tablas y registros -After [setting up your AppGini application](setup.md), you can start -working with your tables and records. This page will guide you through -the process of working with tables and records in your AppGini -application. +Después de [configurar su aplicación AppGini](setup.md), puede comenzar a +trabajar con sus tablas y registros. Esta página lo guiará a través del +proceso de trabajo con tablas y registros en su aplicación AppGini. -## The application homepage +## La página de inicio de la aplicación -This page provides links to accessible tables in your application, -depending on the group permissions of the logged user. In the following -screenshot, we can see the homepage of the [Northwind sample application](https://northwind.demos.appgini.com/). +Esta página proporciona enlaces a las tablas accesibles en su aplicación, +dependiendo de los permisos de grupo del usuario que ha iniciado sesión. En la siguiente +captura de pantalla, podemos ver la página de inicio de la [aplicación de ejemplo Northwind](https://northwind.demos.appgini.com/). -![app homepage](https://cdn.bigprof.com/images/northwind-app-homepage-24.15.png "app homepage") +![página de inicio de la aplicación](https://cdn.bigprof.com/images/northwind-app-homepage-24.15.png "página de inicio de la aplicación") -### Table groups +### Grupos de tablas -The homepage shows a list of tables accessible to the current user. AppGini allows -you to group related tables together by configuring **table groups** under the [table properties pane](../working-with-projects/table-properties-pane.md). -The homepage would then show these groups as collapsible sections, as shown in the screenshot above. +La página de inicio muestra una lista de tablas accesibles para el usuario actual. AppGini permite +agrupar tablas relacionadas configurando **grupos de tablas** en el [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md). +La página de inicio mostraría entonces estos grupos como secciones desplegables, como se muestra en la captura de pantalla anterior. -### Hide link in homepage +### Ocultar enlace en la página de inicio -The [table properties pane](../working-with-projects/table-properties-pane.md) in AppGini also allows you to control whether a table is shown in the homepage or not. -This can be done by checking the option **Hide link in homepage** in the table properties pane. +El [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md) en AppGini también le permite controlar si una tabla se muestra en la página de inicio o no. +Esto se puede hacer marcando la opción **Ocultar enlace en la página de inicio** en el panel de propiedades de la tabla. -### Table view title +### Título de la vista de tabla -The title of each table in the homepage is shown as a link. Clicking this link will take you to the table view page for that table. -You can customize the title of each table in the homepage by setting the **Table view title** option in the [table properties pane](../working-with-projects/table-properties-pane.md). +El título de cada tabla en la página de inicio se muestra como un enlace. Al hacer clic en este enlace, accederá a la página de vista de tabla para esa tabla. +Puede personalizar el título de cada tabla en la página de inicio configurando la opción **Título de la vista de tabla** en el [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md). -### Description +### Descripción -You can also add a description to each table in the homepage by setting the **Description** option in the [table properties pane](../working-with-projects/table-properties-pane.md). -You can use HTML tags in the description to format it as needed. Please note that based on the length of the description, it may be partially hidden in the homepage, and -a vertical scrollbar will appear to allow you to scroll through the description. +También puede agregar una descripción a cada tabla en la página de inicio configurando la opción **Descripción** en el [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md). +Puede usar etiquetas HTML en la descripción para formatearla según sea necesario. Tenga en cuenta que, según la longitud de la descripción, puede ocultarse parcialmente en la página de inicio y +aparecerá una barra de desplazamiento vertical para permitirle desplazarse por la descripción. -You can control the height of the description box in the homepage by setting the **Height of table panel in homepage (pixels)** -option in the [project properties pane](../working-with-projects/project-properties-pane.md). +Puede controlar la altura del cuadro de descripción en la página de inicio configurando la opción **Altura del panel de la tabla en la página de inicio (píxeles)** +en el [panel de propiedades del proyecto](../working-with-projects/project-properties-pane.md). -### Table icon +### Icono de tabla -You can set an icon for each table in the homepage by setting the **Table icon** option in the [table properties pane](../working-with-projects/table-properties-pane.md). -You can set this option by clicking the icon to the left of the table name in the table properties pane. +Puede establecer un icono para cada tabla en la página de inicio configurando la opción **Icono de tabla** en el [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md). +Puede establecer esta opción haciendo clic en el icono a la izquierda del nombre de la tabla en el panel de propiedades de la tabla. -### Show record count in homepage +### Mostrar recuento de registros en la página de inicio -The option **Show record count in homepage** in the [table properties pane](../working-with-projects/table-properties-pane.md) -in AppGini can be used to display the number of records in each table in the homepage. -This displays the number of records *accessible* to the current user rather than the total number of records in the table. +La opción **Mostrar recuento de registros en la página de inicio** en el [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md) +en AppGini se puede usar para mostrar el número de registros en cada tabla en la página de inicio. +Esto muestra el número de registros *accesibles* para el usuario actual en lugar del número total de registros en la tabla. -### Allow adding new records from homepage +### Permitir agregar nuevos registros desde la página de inicio -The option **Allow adding new records from homepage** in the [table properties pane](../working-with-projects/table-properties-pane.md) -in AppGini can be used to display an "Add new" button in the homepage for each table. -Clicking this button will display a modal dialog to add a new record to the table, as shown in the screenshot below. +La opción **Permitir agregar nuevos registros desde la página de inicio** en el [panel de propiedades de la tabla](../working-with-projects/table-properties-pane.md) +en AppGini se puede usar para mostrar un botón "Agregar nuevo" en la página de inicio para cada tabla. +Al hacer clic en este botón, se mostrará un cuadro de diálogo modal para agregar un nuevo registro a la tabla, como se muestra en la captura de pantalla a continuación. -![add new order from homepage](https://cdn.bigprof.com/images/northwind-add-new-order-from-homepage-24.15.png "add new order from homepage") +![agregar nuevo pedido desde la página de inicio](https://cdn.bigprof.com/images/northwind-add-new-order-from-homepage-24.15.png "agregar nuevo pedido desde la página de inicio") -### Searching for tables +### Búsqueda de tablas -*Available in AppGini 24.13 and later* +*Disponible en AppGini 24.13 y versiones posteriores* -The homepage also includes a search box at the top to allow you to search for a specific table by its name. -This is useful when you have a large number of tables in your application. +La página de inicio también incluye un cuadro de búsqueda en la parte superior para permitirle buscar una tabla específica por su nombre. +Esto es útil cuando tiene una gran cantidad de tablas en su aplicación. -![search for tables](https://cdn.bigprof.com/screencasts/live-search-in-homepage.gif "search for tables") +![buscar tablas](https://cdn.bigprof.com/screencasts/live-search-in-homepage.gif "buscar tablas") -You can programmatically hide the search box by adding this code to the `hooks/header-extras.php` file: +Puede ocultar mediante programación el cuadro de búsqueda agregando este código al archivo `hooks/header-extras.php`: ```html <script>AppGini.disableHomePageSearch = true;</script> ``` -By default, you can search for table names only. If you want to search for table descriptions as well, you can add this code to the `hooks/header-extras.php` file: +De forma predeterminada, solo puede buscar nombres de tablas. Si también desea buscar descripciones de tablas, puede agregar este código al archivo `hooks/header-extras.php`: ```html <script>AppGini.homePageSearchDescriptions = true;</script> ``` -### Displaying the table navigation menus in the homepage +### Visualización de los menús de navegación de tablas en la página de inicio -*Available in AppGini 24.14 and later* +*Disponible en AppGini 24.14 y versiones posteriores* -You can display the navigation menus in the homepage by adding this code to the `hooks/__bootstrap.php` file: +Puede mostrar los menús de navegación en la página de inicio agregando este código al archivo `hooks/__bootstrap.php`: ```php <?php define('HOMEPAGE_NAVMENUS', true); ?> ``` -> **Note:** If the `hooks/__bootstrap.php` file doesn't exist, just create it as an empty file in the `hooks` folder of your project, then add the above code to it. +> **Nota:** Si el archivo `hooks/__bootstrap.php` no existe, simplemente créelo como un archivo vacío en la carpeta `hooks` de su proyecto, luego agréguele el código anterior. -## The Table View page +## La página de vista de tabla -Clicking on a table link in the homepage takes you to the table view page. -Here you can navigate data records of your table and edit, add and -delete records. As shown in the figure below, the table view shows data -in a table where records appear in rows, and each column represents a -field of the table. +Al hacer clic en un enlace de tabla en la página de inicio, accederá a la página de vista de tabla. +Aquí puede navegar por los registros de datos de su tabla y editar, agregar y +eliminar registros. Como se muestra en la figura siguiente, la vista de tabla muestra los datos +en una tabla donde los registros aparecen en filas y cada columna representa un +campo de la tabla. -![customers table view](https://cdn.bigprof.com/images/northwind-customers-tv-24.15.png "customers table view") +![vista de tabla de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-24.15.png "vista de tabla de clientes") -To change the displayed column headers, you can set the **Caption** property of each field in the [field properties pane](../working-with-projects/field-properties-pane.md). +Para cambiar los encabezados de columna mostrados, puede establecer la propiedad **Título** de cada campo en el [panel de propiedades del campo](../working-with-projects/field-properties-pane.md). -### Sorting records +### Ordenación de registros -Column headers can be clicked to sort records by the clicked column. -Clicking a column header once sorts the records in ascending order, and clicking it again sorts the records in descending order. -The following screenshot shows the customers table sorted by the 'Country' column in ascending order. +Se puede hacer clic en los encabezados de las columnas para ordenar los registros por la columna en la que se hizo clic. +Al hacer clic en el encabezado de una columna una vez, los registros se ordenan en orden ascendente, y al hacer clic de nuevo, los registros se ordenan en orden descendente. +La siguiente captura de pantalla muestra la tabla de clientes ordenada por la columna 'País' en orden ascendente. -![customers tv sorted by country](https://cdn.bigprof.com/images/northwind-customers-tv-sorted-by-country-24.15.png "customers tv sorted by country") +![tv de clientes ordenada por país](https://cdn.bigprof.com/images/northwind-customers-tv-sorted-by-country-24.15.png "tv de clientes ordenada por país") -To sort by multiple columns, click the [**Filter** button](#filtering-records) above the table. From there, you can add multiple sorting criteria. +Para ordenar por varias columnas, haga clic en el botón [**Filtro**](#filtrado-de-registros) sobre la tabla. Desde allí, puede agregar múltiples criterios de ordenación. -### Quick search +### Búsqueda rápida -The quick search box above the table allows you to search for records containing a specific value in any of the fields. -The quick search is case-insensitive and searches for the entered value in all fields of the table. -The matching records are displayed in the table view, with the matching text highlighted in a different style, as shown in the screenshot below. +El cuadro de búsqueda rápida sobre la tabla le permite buscar registros que contengan un valor específico en cualquiera de los campos. +La búsqueda rápida no distingue entre mayúsculas y minúsculas y busca el valor ingresado en todos los campos de la tabla. +Los registros coincidentes se muestran en la vista de tabla, con el texto coincidente resaltado en un estilo diferente, como se muestra en la captura de pantalla a continuación. -![customers tv quick search](https://cdn.bigprof.com/images/northwind-customers-tv-quick-search-24.15.png "customers tv quick search") +![búsqueda rápida de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-quick-search-24.15.png "búsqueda rápida de tv de clientes") -To clear the quick search, click the **(X)** button at the right end of the quick search box. +Para borrar la búsqueda rápida, haga clic en el botón **(X)** en el extremo derecho del cuadro de búsqueda rápida. -### Filtering records +### Filtrado de registros -While quick search allows you to search for records containing a specific value in any field, -filtering allows you to search for records based on more granular criteria. -For example, the screenshot below shows the filters page where we are filtering customers from the United States, -who have placed orders with a total value between $20,000 and $100,000. +Si bien la búsqueda rápida le permite buscar registros que contengan un valor específico en cualquier campo, +el filtrado le permite buscar registros según criterios más granulares. +Por ejemplo, la captura de pantalla a continuación muestra la página de filtros donde estamos filtrando clientes de los Estados Unidos, +que han realizado pedidos con un valor total entre $20,000 y $100,000. -![customers tv filters](https://cdn.bigprof.com/images/northwind-customers-filters-example.png "customers tv filters") +![filtros de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-filters-example.png "filtros de tv de clientes") -To filter records, click the **Filter** button above the table view. This will display the filters page, -where you can set and combine multiple filters to search for specific records. +Para filtrar registros, haga clic en el botón **Filtro** sobre la vista de tabla. Esto mostrará la página de filtros, +donde puede establecer y combinar múltiples filtros para buscar registros específicos. -The filters page also allows users to specify a more granular sorting order for the records, -allowing sorting by up to four fields in ascending or descending order. +La página de filtros también permite a los usuarios especificar un orden de clasificación más granular para los registros, +permitiendo la clasificación por hasta cuatro campos en orden ascendente o descendente. -Users can also filter records based on ownership, allowing them to filter records owned by themselves, their group, or all records. -This section is displayed only if the current user has the access to records of their group or all records. +Los usuarios también pueden filtrar registros según la propiedad, lo que les permite filtrar registros de su propiedad, de su grupo o todos los registros. +Esta sección se muestra solo si el usuario actual tiene acceso a los registros de su grupo o a todos los registros. -> **Pro Tip:** You can use the [Search Page Maker plugin](https://bigprof.com/appgini/applications/search-page-maker-plugin) to replace -> the default filters page with a more customized and user-friendly search page. For example, the screenshot below shows the -> same filters from the previous screenshot, but defined in a more user-friendly way using the Search Page Maker plugin. +> **Consejo profesional:** Puede utilizar el [plugin Creador de páginas de búsqueda](https://bigprof.com/appgini/applications/search-page-maker-plugin) para reemplazar +> la página de filtros predeterminada con una página de búsqueda más personalizada y fácil de usar. Por ejemplo, la captura de pantalla a continuación muestra los +> mismos filtros de la captura de pantalla anterior, pero definidos de una manera más fácil de usar utilizando el plugin Creador de páginas de búsqueda. > -> ![customers tv filters spm](https://cdn.bigprof.com/images/northwind-customers-filters-spm.png "customers tv filters spm") +> ![filtros spm de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-filters-spm.png "filtros spm de tv de clientes") -After defining the filters, click the **Apply filters** button to apply the filters and display the filtered records in the table view. -Columns that are used in the filters would show a filter icon in the column header, as shown in the screenshot below. +Después de definir los filtros, haga clic en el botón **Aplicar filtros** para aplicar los filtros y mostrar los registros filtrados en la vista de tabla. +Las columnas que se utilizan en los filtros mostrarán un icono de filtro en el encabezado de la columna, como se muestra en la captura de pantalla a continuación. -![customers tv filters applied](https://cdn.bigprof.com/images/northwind-customers-tv-filters-applied-24.15.png "customers tv filters applied") +![filtros aplicados de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-filters-applied-24.15.png "filtros aplicados de tv de clientes") -To clear the filters, click the **Show All** button at the top of the table view. +Para borrar los filtros, haga clic en el botón **Mostrar todo** en la parte superior de la vista de tabla. -### Exporting records to CSV +### Exportación de registros a CSV -You can export the records in the current table view to a CSV file by clicking the **Save CSV** button above the table. -This will download a CSV file containing the records in the current table view. If you've applied any filters, quick search, or sorting, -the exported CSV file will contain only the records that match the applied filters and sorting. +Puede exportar los registros de la vista de tabla actual a un archivo CSV haciendo clic en el botón **Guardar CSV** sobre la tabla. +Esto descargará un archivo CSV que contiene los registros de la vista de tabla actual. Si ha aplicado filtros, búsqueda rápida u ordenación, +el archivo CSV exportado contendrá solo los registros que coincidan con los filtros y la ordenación aplicados. -Once you've exported the records to a CSV file, you can open it in a spreadsheet application like Microsoft Excel or Google Sheets. -From there, you can analyze the data, create charts, or share the data with others. +Una vez que haya exportado los registros a un archivo CSV, puede abrirlo en una aplicación de hoja de cálculo como Microsoft Excel o Google Sheets. +Desde allí, puede analizar los datos, crear gráficos o compartir los datos con otros. -![customers tv csv](https://cdn.bigprof.com/images/northwind-customers-tv-csv-24.15.png "customers tv csv") +![csv de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-csv-24.15.png "csv de tv de clientes") -### Printing records +### Impresión de registros -You can print the records in the current table view by clicking the **Print Preview** button above the table. -This will display *all* records in the current table view in a print-friendly format, without pagination. -If you've applied any filters, quick search, or sorting, the print preview will contain only the records that match the applied filters and sorting. +Puede imprimir los registros de la vista de tabla actual haciendo clic en el botón **Vista previa de impresión** sobre la tabla. +Esto mostrará *todos* los registros de la vista de tabla actual en un formato imprimible, sin paginación. +Si ha aplicado filtros, búsqueda rápida u ordenación, la vista previa de impresión contendrá solo los registros que coincidan con los filtros y la ordenación aplicados. -From the print preview, you can use the browser's print functionality to print the records or save them as a PDF file. +Desde la vista previa de impresión, puede utilizar la funcionalidad de impresión del navegador para imprimir los registros o guardarlos como un archivo PDF. -![customers tvp](https://cdn.bigprof.com/images/northwind-customers-tvp-24.15.png "customers tvp") +![tvp de clientes](https://cdn.bigprof.com/images/northwind-customers-tvp-24.15.png "tvp de clientes") -### Viewing the SQL query of the current table view +### Visualización de la consulta SQL de la vista de tabla actual -*Available in AppGini 24.11 and later* +*Disponible en AppGini 24.11 y versiones posteriores* -If you are signed in as the super admin, you can view the SQL query used to fetch the records displayed in the current table view. -This can be useful for creating custom reports or for debugging purposes. If the current table view is filtered, the SQL query will include the filters applied. -To display the SQL query, click the **SQL** button above the table view. +Si ha iniciado sesión como superadministrador, puede ver la consulta SQL utilizada para obtener los registros que se muestran en la vista de tabla actual. +Esto puede ser útil para crear informes personalizados o para fines de depuración. Si la vista de tabla actual está filtrada, la consulta SQL incluirá los filtros aplicados. +Para mostrar la consulta SQL, haga clic en el botón **SQL** sobre la vista de tabla. -To copy the SQL query, just click anywhere in the SQL query box. This would copy the entire query to your clipboard, ready to be pasted into your favorite SQL editor. -To hide the SQL query, click the **SQL** button again. +Para copiar la consulta SQL, simplemente haga clic en cualquier parte del cuadro de consulta SQL. Esto copiará toda la consulta a su portapapeles, lista para pegarla en su editor SQL favorito. +Para ocultar la consulta SQL, vuelva a hacer clic en el botón **SQL**. -![customers tv sql query](https://cdn.bigprof.com/images/northwind-customers-tv-sql-query-24.15.png "customers tv sql query") +![consulta sql de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-sql-query-24.15.png "consulta sql de tv de clientes") -To enable this feature, check the option **Allow admin access to table view SQL** under the **Security settings** section of the project properties pane in AppGini. +Para habilitar esta función, marque la opción **Permitir acceso de administrador a SQL de vista de tabla** en la sección **Configuración de seguridad** del panel de propiedades del proyecto en AppGini. -### Hide/Show columns +### Ocultar/Mostrar columnas -It's useful when there are many columns in a table to hide some of them to focus on the most important ones. -To do so, click the **Hide/Show columns** icon at the top right of the table view. This will display a dialog -where you can select which columns to hide or show. These settings are saved in the browser's local storage, -so they persist across sessions for each user. +Es útil cuando hay muchas columnas en una tabla ocultar algunas de ellas para centrarse en las más importantes. +Para ello, haga clic en el icono **Ocultar/Mostrar columnas** en la parte superior derecha de la vista de tabla. Esto mostrará un cuadro de diálogo +donde puede seleccionar qué columnas ocultar o mostrar. Estas configuraciones se guardan en el almacenamiento local del navegador, +por lo que persisten entre sesiones para cada usuario. -![customers tv show hide columns](https://cdn.bigprof.com/images/northwind-customers-tv-show-hide-columns-24.15.png "customers tv show hide columns") +![mostrar ocultar columnas de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-show-hide-columns-24.15.png "mostrar ocultar columnas de tv de clientes") -### Applying actions to multiple records +### Aplicación de acciones a múltiples registros -You can apply actions to multiple records in the table view by selecting the records you want to apply the action to. -Once you select one or more records, a **More** button appears at the top of the table view. Clicking this button displays a menu with the available actions. +Puede aplicar acciones a múltiples registros en la vista de tabla seleccionando los registros a los que desea aplicar la acción. +Una vez que seleccione uno o más registros, aparecerá un botón **Más** en la parte superior de la vista de tabla. Al hacer clic en este botón, se muestra un menú con las acciones disponibles. -![customers tv more menu](https://cdn.bigprof.com/images/northwind-customers-tv-more-menu-24.15.png "customers tv more menu") +![menú más de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-more-menu-24.15.png "menú más de tv de clientes") -The available actions depend on the permissions of the logged user. For example, -super admins can delete multiple records at once, and can change the ownership of multiple records at once. +Las acciones disponibles dependen de los permisos del usuario que ha iniciado sesión. Por ejemplo, +los superadministradores pueden eliminar múltiples registros a la vez y pueden cambiar la propiedad de múltiples registros a la vez. -For users who can access the detail view (inclucing the super admin), the **Print Preview Detail View** action is available. -This action allows you to print the detail view of multiple records at once. +Para los usuarios que pueden acceder a la vista detallada (incluido el superadministrador), está disponible la acción **Vista previa de impresión de vista detallada**. +Esta acción le permite imprimir la vista detallada de múltiples registros a la vez. -You can [add custom actions to this menu by using hooks](../advanced-topics/hooks/multiple-record-batch-actions.md). +Puede [agregar acciones personalizadas a este menú mediante hooks](../advanced-topics/hooks/multiple-record-batch-actions.md). -### Child records +### Registros secundarios -*Available in AppGini 23.15 and later* +*Disponible en AppGini 23.15 y versiones posteriores* -If a table has a one-to-many relationship with another table (see [lookup fields](../working-with-projects/understanding-lookup-fields.md)), -you can [configure](../working-with-projects/understanding-lookup-fields.md#parentchildren-settings) the parent table to display a child info column for some or all of its child tables. -For example, you can display the count of orders of each customer in the customers table view, in the *Customer's orders* column. -In the same columns, you can directly create a new order for a customer by clicking the **+** button. +Si una tabla tiene una relación de uno a muchos con otra tabla (consulte [campos de búsqueda](../working-with-projects/understanding-lookup-fields.md)), +puede [configurar](../working-with-projects/understanding-lookup-fields.md#parentchildren-settings) la tabla principal para mostrar una columna de información secundaria para algunas o todas sus tablas secundarias. +Por ejemplo, puede mostrar el recuento de pedidos de cada cliente en la vista de tabla de clientes, en la columna *Pedidos del cliente*. +En las mismas columnas, puede crear directamente un nuevo pedido para un cliente haciendo clic en el botón **+**. -![customers orders modal](https://cdn.bigprof.com/images/northwind-customers-orders-modal-24.15.png "customers orders modal") +![modal de pedidos de clientes](https://cdn.bigprof.com/images/northwind-customers-orders-modal-24.15.png "modal de pedidos de clientes") -### Pagination +### Paginación -If the table has many records, the table view is paginated. You can navigate between pages using the pagination controls at the bottom of the table view. -These include the **Previous** and **Next** buttons. You can also jump to a specific page using the **Go to page** dropdown. +Si la tabla tiene muchos registros, la vista de tabla está paginada. Puede navegar entre páginas utilizando los controles de paginación en la parte inferior de la vista de tabla. +Estos incluyen los botones **Anterior** y **Siguiente**. También puede saltar a una página específica utilizando el menú desplegable **Ir a la página**. -![customers tv goto page number](https://cdn.bigprof.com/images/northwind-customers-tv-goto-page-number-24.15.png "customers tv goto page number") +![número de página de ir a tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-goto-page-number-24.15.png "número de página de ir a tv de clientes") -As of AppGini 24.15, you can also control the number of records displayed per page by clicking the **Records per page** dropdown. -This setting is saved in the browser's local storage, so it persists across sessions for each user, for each table. +A partir de AppGini 24.15, también puede controlar el número de registros que se muestran por página haciendo clic en el menú desplegable **Registros por página**. +Esta configuración se guarda en el almacenamiento local del navegador, por lo que persiste entre sesiones para cada usuario, para cada tabla. -![customers tv records per page](https://cdn.bigprof.com/images/northwind-customers-tv-records-per-page-24.15.png "customers tv records per page") +![registros por página de tv de clientes](https://cdn.bigprof.com/images/northwind-customers-tv-records-per-page-24.15.png "registros por página de tv de clientes") -If you want to change the available options in the **Records per page** dropdown, you can do so by adding this JavaScript code to -the `hooks/footer-extras.php` or `hooks/header-extras.php` file: +Si desea cambiar las opciones disponibles en el menú desplegable **Registros por página**, puede hacerlo agregando este código JavaScript al +archivo `hooks/footer-extras.php` o `hooks/header-extras.php`: ```html <script> @@ -253,119 +252,118 @@ the `hooks/footer-extras.php` or `hooks/header-extras.php` file: </script> ``` -Adjust the values in the array to match the desired options. +Ajuste los valores de la matriz para que coincidan con las opciones deseadas. --- -## The Detail View +## La vista detallada -Clicking on a record in the table view takes you to the detail view page. -Here you can view and edit the details of the selected record. The detail view page -shows the record fields in a form layout, where you can edit the values of the fields. +Al hacer clic en un registro en la vista de tabla, accederá a la página de vista detallada. +Aquí puede ver y editar los detalles del registro seleccionado. La página de vista detallada +muestra los campos del registro en un diseño de formulario, donde puede editar los valores de los campos. -![customer detail view](https://cdn.bigprof.com/images/northwind-customers-dv-full-permissions-24.15.png "customer detail view") +![vista detallada del cliente](https://cdn.bigprof.com/images/northwind-customers-dv-full-permissions-24.15.png "vista detallada del cliente") -The above screenshot shows the detail view of a customer record in the -[Northwind sample application](https://northwind.demos.appgini.com/customers_view.php?SelectedID=ANATR). -The user has full permissions on this table, so they can view, edit and delete the record. For users -with limited permissions, some of the actions may be unavailable. For example, a user with read-only permissions -will see the detail view like this: +La captura de pantalla anterior muestra la vista detallada de un registro de cliente en la +[aplicación de ejemplo Northwind](https://northwind.demos.appgini.com/customers_view.php?SelectedID=ANATR). +El usuario tiene todos los permisos en esta tabla, por lo que puede ver, editar y eliminar el registro. Para los usuarios +con permisos limitados, algunas de las acciones pueden no estar disponibles. Por ejemplo, un usuario con permisos de solo lectura +verá la vista detallada así: -![customer detail view read-only](https://cdn.bigprof.com/images/northwind-customers-dv-read-only-24.15.png "customer detail view read-only") +![vista detallada del cliente de solo lectura](https://cdn.bigprof.com/images/northwind-customers-dv-read-only-24.15.png "vista detallada del cliente de solo lectura") -For clarity, let's assign a number to each section of the detail view so we can refer to them in the explanations below: +Para mayor claridad, asignemos un número a cada sección de la vista detallada para poder hacer referencia a ellas en las explicaciones siguientes: -![customer detail view sections](https://cdn.bigprof.com/images/northwind-customers-dv-full-permissions-labeled-24.15.png "customer detail view sections") +![secciones de la vista detallada del cliente](https://cdn.bigprof.com/images/northwind-customers-dv-full-permissions-labeled-24.15.png "secciones de la vista detallada del cliente") -### Detail view main header (1) +### Encabezado principal de la vista detallada (1) -The main header of the detail view shows the title of the table, as specified in the caption property of the table properties pane in AppGini. -It also shows the table icon, also specified in the table properties pane. If the user has the permission to insert new records, an **Add New** button is displayed here. +El encabezado principal de la vista detallada muestra el título de la tabla, como se especifica en la propiedad de título del panel de propiedades de la tabla en AppGini. +También muestra el icono de la tabla, también especificado en el panel de propiedades de la tabla. Si el usuario tiene permiso para insertar nuevos registros, aquí se muestra un botón **Agregar nuevo**. -### Detail view title (2) +### Título de la vista detallada (2) -The title of the detail view is shown at the top of the form. This title is specified in the **Detail view title** property of the table properties pane in AppGini. +El título de la vista detallada se muestra en la parte superior del formulario. Este título se especifica en la propiedad **Título de la vista detallada** del panel de propiedades de la tabla en AppGini. -### Admin info button (3) +### Botón de información de administrador (3) -If the current user is a super admin, an **Admin info** button is displayed at the top right of the detail view. -Clicking this button displays a dialog that displays the record owner, owner group, and the record creation and last modification dates. -It also allows the super admin to assign the record to a different owner, show all records of the owner or their group, and email the owner -or the owner group. +Si el usuario actual es un superadministrador, se muestra un botón **Información de administrador** en la parte superior derecha de la vista detallada. +Al hacer clic en este botón, se muestra un cuadro de diálogo que muestra el propietario del registro, el grupo propietario y las fechas de creación y última modificación del registro. +También permite al superadministrador asignar el registro a un propietario diferente, mostrar todos los registros del propietario o su grupo, y enviar un correo electrónico al propietario +o al grupo propietario. -![customer detail view admin info](https://cdn.bigprof.com/images/northwind-customers-dv-admin-info-menu-24.15.png "customer detail view admin info") +![información de administrador de la vista detallada del cliente](https://cdn.bigprof.com/images/northwind-customers-dv-admin-info-menu-24.15.png "información de administrador de la vista detallada del cliente") -### Child record links (4) +### Enlaces de registros secundarios (4) -If the current table has a one-to-many relationship with another table, and the child link is [configured](../working-with-projects/understanding-lookup-fields.md#parentchildren-settings) -to be displayed in the detail view, the child record links are displayed here. Clicking the link opens the table view of the child table, -filtered to show only the child records related to the current record. +Si la tabla actual tiene una relación de uno a muchos con otra tabla, y el enlace secundario está [configurado](../working-with-projects/understanding-lookup-fields.md#parentchildren-settings) +para mostrarse en la vista detallada, aquí se muestran los enlaces de registros secundarios. Al hacer clic en el enlace, se abre la vista de tabla de la tabla secundaria, +filtrada para mostrar solo los registros secundarios relacionados con el registro actual. -### Detail view layout toolbar (5) +### Barra de herramientas de diseño de vista detallada (5) -*Available in AppGini 24.14 and later* +*Disponible en AppGini 24.14 y versiones posteriores* -The detail view layout toolbar allows users to switch between different layouts of the detail view. -Based on the screen width, users may be able to switch between 1-column, 2-column, or 3-column layouts. -The sast-selected layout is saved in the browser's local storage, so it persists across sessions for each user -for each table. +La barra de herramientas de diseño de vista detallada permite a los usuarios cambiar entre diferentes diseños de la vista detallada. +Según el ancho de la pantalla, los usuarios pueden cambiar entre diseños de 1, 2 o 3 columnas. +El último diseño seleccionado se guarda en el almacenamiento local del navegador, por lo que persiste entre sesiones para cada usuario +para cada tabla. -![customer detail view layout toolbar](https://cdn.bigprof.com/screencasts/dv-layout-switcher.gif "customer detail view layout toolbar") +![barra de herramientas de diseño de vista detallada del cliente](https://cdn.bigprof.com/screencasts/dv-layout-switcher.gif "barra de herramientas de diseño de vista detallada del cliente") -### Detail view actions (6) +### Acciones de la vista detallada (6) -The detail view actions allow users to perform various actions on the current record. The available actions depend on the permissions of the logged user. -The **< Back** button allows users to return to the table view. +Las acciones de la vista detallada permiten a los usuarios realizar diversas acciones en el registro actual. Las acciones disponibles dependen de los permisos del usuario que ha iniciado sesión. +El botón **< Atrás** permite a los usuarios volver a la vista de tabla. -The **Print Preview** button allows users to preview a read-only version of the current record -for printing or saving as a PDF. +El botón **Vista previa de impresión** permite a los usuarios obtener una vista previa de una versión de solo lectura del registro actual +para imprimir o guardar como PDF. -![customer detail view print preview](https://cdn.bigprof.com/images/northwind-customers-dvp-24.15.png "customer detail view print preview") +![vista previa de impresión de la vista detallada del cliente](https://cdn.bigprof.com/images/northwind-customers-dvp-24.15.png "vista previa de impresión de la vista detallada del cliente") -The print preview page can be easily customized to control the number of columns and display/hide child records. +La página de vista previa de impresión se puede personalizar fácilmente para controlar el número de columnas y mostrar/ocultar registros secundarios. -If the user has the permission to edit the current record, the **Save Changes** button is displayed. Similarly, if the user has the permission to delete the current record, -the **Delete** button is displayed. +Si el usuario tiene permiso para editar el registro actual, se muestra el botón **Guardar cambios**. Del mismo modo, si el usuario tiene permiso para eliminar el registro actual, +se muestra el botón **Eliminar**. -To allow easier navigation between records, the **Previous** and **Next** buttons are displayed. These buttons allow users to navigate to the previous or next record -without returning to the table view. The order of records is based on the currently applied filters and sorting. +Para facilitar la navegación entre registros, se muestran los botones **Anterior** y **Siguiente**. Estos botones permiten a los usuarios navegar al registro anterior o siguiente +sin volver a la vista de tabla. El orden de los registros se basa en los filtros y la ordenación aplicados actualmente. -### Detail view fields (7) +### Campos de la vista detallada (7) -The detail view fields show the values of the record fields. The fields are displayed in the same -order as they are defined in AppGini, rather than the order they are defined in the database. -You can control the order of fields by moving them up or down in the project browser pane in AppGini. +Los campos de la vista detallada muestran los valores de los campos del registro. Los campos se muestran en el mismo +orden en que se definen en AppGini, en lugar del orden en que se definen en la base de datos. +Puede controlar el orden de los campos moviéndolos hacia arriba o hacia abajo en el panel del explorador de proyectos en AppGini. -If the current user doesn't have the permission to edit fields, the fields are displayed in a read-only mode. +Si el usuario actual no tiene permiso para editar campos, los campos se muestran en modo de solo lectura. -### Child record tabs (8) +### Pestañas de registros secundarios (8) -If the current table has a one-to-many relationship with one or more child tables, -and the child tabs are [configured](../working-with-projects/understanding-lookup-fields.md#parentchildren-settings) -to be displayed in the detail view, the child record tabs are displayed here. The tab title and icon can be -configured as well. +Si la tabla actual tiene una relación de uno a muchos con una o más tablas secundarias, +y las pestañas secundarias están [configuradas](../working-with-projects/understanding-lookup-fields.md#parentchildren-settings) +para mostrarse en la vista detallada, aquí se muestran las pestañas de registros secundarios. El título y el icono de la pestaña también se pueden +configurar. -Only users with the permission to view the child records will see the child tabs. +Solo los usuarios con permiso para ver los registros secundarios verán las pestañas secundarias. -### Adding new child records (9) +### Adición de nuevos registros secundarios (9) -If the current user has the permission to add new records to a child table, an **Add New** button is displayed at the top of that child tab. -Clicking this button opens a modal dialog to add a new record to the child table, with the parent lookup field pre-filled with -the current record's value (so that the new child record is automatically linked to the current parent record). +Si el usuario actual tiene permiso para agregar nuevos registros a una tabla secundaria, se muestra un botón **Agregar nuevo** en la parte superior de esa pestaña secundaria. +Al hacer clic en este botón, se abre un cuadro de diálogo modal para agregar un nuevo registro a la tabla secundaria, con el campo de búsqueda principal rellenado previamente con +el valor del registro actual (para que el nuevo registro secundario se vincule automáticamente al registro principal actual). -### Child table headers (10) +### Encabezados de tabla secundaria (10) -The child table headers show the title (caption) of the fields in the child table. The title of each field can be customized in the field properties pane in AppGini. -Clicking a column header sorts the child records by that column in ascending order. Clicking the same column header again sorts the records in descending order. +Los encabezados de la tabla secundaria muestran el título (leyenda) de los campos de la tabla secundaria. El título de cada campo se puede personalizar en el panel de propiedades del campo en AppGini. +Al hacer clic en el encabezado de una columna, los registros secundarios se ordenan por esa columna en orden ascendente. Al hacer clic de nuevo en el mismo encabezado de columna, los registros se ordenan en orden descendente. -### Open child record detail view (11) +### Abrir vista detallada de registro secundario (11) -Clicking this icon opens the detail view of the child record in a modal dialog. -This allows users to view and, if they have the permission, edit or delete the child record without leaving the parent record detail view. -After editing the child record, the child records tab is refreshed to reflect the changes. +Al hacer clic en este icono, se abre la vista detallada del registro secundario en un cuadro de diálogo modal. +Esto permite a los usuarios ver y, si tienen permiso, editar o eliminar el registro secundario sin salir de la vista detallada del registro principal. +Después de editar el registro secundario, la pestaña de registros secundarios se actualiza para reflejar los cambios. -### Child records pagination (12) - -This sections shows the pagination controls for the child records and the current position in the pagination. -If there is only one page of child records, the pagination controls are hidden. +### Paginación de registros secundarios (12) +Esta sección muestra los controles de paginación para los registros secundarios y la posición actual en la paginación. +Si solo hay una página de registros secundarios, los controles de paginación están ocultos. diff --git a/pages/working-with-projects/field-properties-pane.md b/pages/working-with-projects/field-properties-pane.md index 1921b55..7266e57 100644 --- a/pages/working-with-projects/field-properties-pane.md +++ b/pages/working-with-projects/field-properties-pane.md @@ -1,267 +1,263 @@ --- -title: Field properties pane -linkTitle: Field properties +title: Panel de propiedades del campo +linkTitle: Propiedades del campo slug: help/working-with-projects/field-properties-pane -description: The field properties pane in AppGini allows you to configure the properties of fields in your tables. -keywords: field properties, field properties pane, appgini field properties, appgini field properties pane, media tab, lookup field, options list, calculated field, data format, technical documentation +description: El panel de propiedades del campo en AppGini le permite configurar las propiedades de los campos en sus tablas. +keywords: propiedades del campo, panel de propiedades del campo, propiedades del campo de appgini, panel de propiedades del campo de appgini, pestaña de medios, campo de búsqueda, lista de opciones, campo calculado, formato de datos, documentación técnica --- -# Field properties pane +# Panel de propiedades del campo -![Field properties pane](https://cdn.bigprof.com/images/appgini-new-field-24.15.png) +![Panel de propiedades del campo](https://cdn.bigprof.com/images/appgini-new-field-24.15.png) -### Caption -The field caption is the title of the field as it would appear in the table view and the detail view of its table in the generated web application. +### Título +El título del campo es el título del campo tal como aparecería en la vista de tabla y la vista detallada de su tabla en la aplicación web generada. -### Description -This section allows you to provide an optional description for the field. +### Descripción +Esta sección le permite proporcionar una descripción opcional para el campo. -### Data Type -(Dropdown menu) This menu allows you to choose the type of data the field will store in your application's database. +### Tipo de datos +(Menú desplegable) Este menú le permite elegir el tipo de datos que el campo almacenará en la base de datos de su aplicación. -### Length -Specifies the maximum size of data that can be stored in this field. The way Length property works depends on the data type you choose for the field. -Please read the data type guidelines displayed at the bottom of the Properties window for more information. +### Longitud +Especifica el tamaño máximo de datos que se pueden almacenar en este campo. La forma en que funciona la propiedad Longitud depende del tipo de datos que elija para el campo. +Lea las directrices sobre tipos de datos que se muestran en la parte inferior de la ventana Propiedades para obtener más información. -### Precision -This property works with decimal data types only (e.g. Float, Double and Decimal). It specifies how many digits -to display after the decimal point. +### Precisión +Esta propiedad solo funciona con tipos de datos decimales (por ejemplo, Float, Double y Decimal). Especifica cuántos dígitos +mostrar después del punto decimal. -### Max characters in table view -Applicable for textual data types only. Specifies the number of characters to display in the table view for that field. If zero or empty, the entire -field value is displayed. This is very useful when you have a long field and you don't want to display all of its contents on the table view to -prevent the table view from becoming too wide. Thus you can set it to display just the first 40 characters for example. -When users select the record, the full field contents will be displayed in the detail view. +### Caracteres máximos en la vista de tabla +Aplicable solo para tipos de datos textuales. Especifica el número de caracteres que se mostrarán en la vista de tabla para ese campo. Si es cero o está vacío, se muestra todo el +valor del campo. Esto es muy útil cuando tiene un campo largo y no desea mostrar todo su contenido en la vista de tabla para +evitar que la vista de tabla se vuelva demasiado ancha. Por lo tanto, puede configurarlo para que muestre solo los primeros 40 caracteres, por ejemplo. +Cuando los usuarios seleccionen el registro, el contenido completo del campo se mostrará en la vista detallada. ![AppGini_scNVswME9v](https://github.com/bigprof-software/appgini-docs/assets/168858457/7ad719c6-dcbd-4ac4-964d-fdd92179efe5) -### Default -If you specify a default value, it will be placed in any records that the user creates while leaving this field empty -(if the user does want an empty field, she can delete the default value after the record has been added and then update the record). -If you click the 'Automatic Value' button at the right of the 'Default' box, you can select an automatic value to be -inserted into the field when the record is created or changed. This works only if the field is set as read-only. +### Predeterminado +Si especifica un valor predeterminado, se colocará en cualquier registro que el usuario cree mientras deja este campo vacío +(si el usuario desea un campo vacío, puede eliminar el valor predeterminado después de que se haya agregado el registro y luego actualizar el registro). +Si hace clic en el botón 'Valor automático' a la derecha del cuadro 'Predeterminado', puede seleccionar un valor automático para que se +inserte en el campo cuando se cree o cambie el registro. Esto solo funciona si el campo está configurado como de solo lectura. -### Automatic value -You can set a field to contain one or more automatic values by specifying them from the drop-down menu. -The field will be read-only and its value set automatically by the app. +### Valor automático +Puede configurar un campo para que contenga uno o más valores automáticos especificándolos en el menú desplegable. +El campo será de solo lectura y su valor se establecerá automáticamente por la aplicación. ![AppGini_rR91bDhpWk](https://github.com/bigprof-software/appgini-docs/assets/168858457/7244f2d8-665b-46a9-b972-ea8abf88865a) -### Read Only -If checked, this field will be displayed in the detail view but not editable. -This is useful in many scenarios, including forcing a default value (or automatic value), calculated fields, fields that are populated using custom code or a third party app, .. etc. +### Solo lectura +Si está marcado, este campo se mostrará en la vista detallada pero no será editable. +Esto es útil en muchos escenarios, incluido forzar un valor predeterminado (o valor automático), campos calculados, campos que se completan mediante código personalizado o una aplicación de terceros, etc. ![AppGini_rlaTzMBsVl](https://github.com/bigprof-software/appgini-docs/assets/168858457/781c5ba8-d657-426c-a6b7-65e74ae2e713) -### Primary key -If you check this option, the current field will be the primary key of the current table. -In AppGini, Every table must have a single primary key field in order to uniquely identify records of the table (multi-field primary keys are not supported by AppGini). +### Clave principal +Si marca esta opción, el campo actual será la clave principal de la tabla actual. +En AppGini, cada tabla debe tener un solo campo de clave principal para identificar de forma única los registros de la tabla (AppGini no admite claves principales de varios campos). ![AppGini_bI8MW1vvBU](https://github.com/bigprof-software/appgini-docs/assets/168858457/2f3e5609-4633-42ef-a93c-6cb138acef64) -### Zero Fill -Check this property to left-pad numeric data types with zeros when they are displayed, so that the total number of digits matches the field's 'Length' property. -For example, if the field length is 5 and is set as zero-fill, a field value of 22 would be displayed as 00022. +### Relleno con ceros +Marque esta propiedad para rellenar a la izquierda los tipos de datos numéricos con ceros cuando se muestren, de modo que el número total de dígitos coincida con la propiedad 'Longitud' del campo. +Por ejemplo, si la longitud del campo es 5 y está configurado como relleno con ceros, un valor de campo de 22 se mostraría como 00022. -### Required -If you check this property, users must provide a value for this field before submitting the form. -If a user attempts to submit a record while leaving a required field empty, they'd see an error message similar to the one below. -If you set the field as read-only, auto-increment or hidden in detail view, this property will be ignored. +### Obligatorio +Si marca esta propiedad, los usuarios deben proporcionar un valor para este campo antes de enviar el formulario. +Si un usuario intenta enviar un registro mientras deja un campo obligatorio vacío, verá un mensaje de error similar al siguiente. +Si configura el campo como de solo lectura, de incremento automático u oculto en la vista detallada, esta propiedad se ignorará. ![AppGini_jCaXOiKufz](https://github.com/bigprof-software/appgini-docs/assets/168858457/0aa74d48-01c1-438d-8f7b-76e7c12f46ab) -### Rich (HTML) area -If checked, this field will be displayed as a rich area in the detail view. A rich area provides advanced formatting features not available in a normal text area. For example, you can change the font/font size, colors, add links, add photos, ... etc. +### Área enriquecida (HTML) +Si está marcado, este campo se mostrará como un área enriquecida en la vista detallada. Un área enriquecida proporciona funciones de formato avanzadas que no están disponibles en un área de texto normal. Por ejemplo, puede cambiar la fuente/tamaño de fuente, los colores, agregar enlaces, agregar fotos, etc. ![AppGini_BNj6i82r3r](https://github.com/bigprof-software/appgini-docs/assets/168858457/3e5ee5eb-79b7-4bf9-833b-97d3f2e1e7f6) -### Auto increment -While defining the properties for the ID field (likely named "id"), look for an option labeled "Auto Increment". This option appear as a checkbox with an "Auto Increment" selection. +### Incremento automático +Al definir las propiedades del campo ID (probablemente llamado "id"), busque una opción etiquetada como "Incremento automático". Esta opción aparece como una casilla de verificación con una selección de "Incremento automático". -### Unique -The data values in this field cannot be repeated if you check this property. This is similar to the Primary key property except that unique fields can be empty (null). -If a user tries to enter a value that already exists into a unique field, they'll see an error message like the one below. +### Único +Los valores de datos en este campo no se pueden repetir si marca esta propiedad. Esto es similar a la propiedad Clave principal, excepto que los campos únicos pueden estar vacíos (nulos). +Si un usuario intenta ingresar un valor que ya existe en un campo único, verá un mensaje de error como el siguiente. ![AppGini_d3pskp8FXm](https://github.com/bigprof-software/appgini-docs/assets/168858457/3e5f90a8-6750-4f47-9eb8-cf9ba275d2ac) -### Show column sum -This option is enabled only for numeric fields. Currently, lookup fields are not supported (even if their parents are numeric). -If you check this option, the generated table view will include a calculated sum of the values stored in this field for all records. -If a filter is applied to the table view, the sum will be calculated only for filtered records rather than all records. +### Mostrar suma de columna +Esta opción solo está habilitada para campos numéricos. Actualmente, los campos de búsqueda no son compatibles (incluso si sus padres son numéricos). +Si marca esta opción, la vista de tabla generada incluirá una suma calculada de los valores almacenados en este campo para todos los registros. +Si se aplica un filtro a la vista de tabla, la suma se calculará solo para los registros filtrados en lugar de todos los registros. ![AppGini_mV8EBJjSMN](https://github.com/bigprof-software/appgini-docs/assets/168858457/284d849d-4cfe-4a45-bae5-531fb0ad8198) -### Text area -If checked, this field will be displayed as a text area in the detail view. This is useful if you want to allow multiple lines in a field, for example to enter addresses or notes. +### Área de texto +Si está marcado, este campo se mostrará como un área de texto en la vista detallada. Esto es útil si desea permitir varias líneas en un campo, por ejemplo, para ingresar direcciones o notas. ![AppGini_NVMbCU6ZpJ](https://github.com/bigprof-software/appgini-docs/assets/168858457/730161c5-eb3d-40ae-b3b7-54cbe0016bbc) -### Unsigned -This property works for numerical data types only. If you check it, the field will not accept negative data values. +### Sin signo +Esta propiedad solo funciona para tipos de datos numéricos. Si la marca, el campo no aceptará valores de datos negativos. -### Do not filter -If checked, the current field is not displayed in the filters page. Thus, users will not be able to use this field to filter data. +### No filtrar +Si está marcado, el campo actual no se muestra en la página de filtros. Por lo tanto, los usuarios no podrán usar este campo para filtrar datos. ![AppGini_at2OowSjus](https://github.com/bigprof-software/appgini-docs/assets/168858457/78582b1d-f4d3-45e8-9fdd-52c2f99915dd) -### Binary -This property works only with Char and VarChar data types. It forces the field to behave like a binary value rather than the default text behavior. -For example, the list (a,G,x,E,A,g) is sorted as (a,A,E,g,G,x) if it is treated as text values, and (A,E,G,a,g,x) if it is treated as binary values. +### Binario +Esta propiedad solo funciona con los tipos de datos Char y VarChar. Obliga al campo a comportarse como un valor binario en lugar del comportamiento de texto predeterminado. +Por ejemplo, la lista (a,G,x,E,A,g) se ordena como (a,A,E,g,G,x) si se trata como valores de texto, y (A,E,G,a,g,x) si se trata como valores binarios. -### Check box -If you check this property, the field will be displayed as a check box, where users can either check or uncheck it. +### Casilla de verificación +Si marca esta propiedad, el campo se mostrará como una casilla de verificación, donde los usuarios pueden marcarla o desmarcarla. ![AppGini_lPMFSpxirq](https://github.com/bigprof-software/appgini-docs/assets/168858457/9fba7e3a-764d-44f2-85a0-b4b99df7b8f9) -### Hide in table view -If checked, the current field is not displayed in the table view. This may be useful if you want to hide some fields or to decrease the width of tables. +### Ocultar en la vista de tabla +Si está marcado, el campo actual no se muestra en la vista de tabla. Esto puede ser útil si desea ocultar algunos campos o disminuir el ancho de las tablas. ![AppGini_ZTILEBmhaK](https://github.com/bigprof-software/appgini-docs/assets/168858457/3785b553-b15e-4035-ad53-03f16185543c) -### Hide in detail view -If checked, this field will not be displayed in the detail view. +### Ocultar en la vista detallada +Si está marcado, este campo no se mostrará en la vista detallada. ![AppGini_o49PVvFmMq](https://github.com/bigprof-software/appgini-docs/assets/168858457/ad747138-1d45-43e1-a334-c6066902f034) -### Alignment -Specifies the alignment of the field in the table view. +### Alineación +Especifica la alineación del campo en la vista de tabla. ![AppGini_lJl6g3oWof](https://github.com/bigprof-software/appgini-docs/assets/168858457/00189a6e-9851-48e8-932a-496f4d9a1ce9) -### Column width (pixels) -Specifies the width in pixels of the column that will display data from this field in the table view. -Please note that the width specified is the minimum (rather than exact) width. If the total width of all columns in the table view is less than the page width, each column would expand based on the ratio of its specified width to the total table width. +### Ancho de columna (píxeles) +Especifica el ancho en píxeles de la columna que mostrará los datos de este campo en la vista de tabla. +Tenga en cuenta que el ancho especificado es el ancho mínimo (en lugar de exacto). Si el ancho total de todas las columnas en la vista de tabla es menor que el ancho de la página, cada columna se expandirá según la proporción de su ancho especificado con respecto al ancho total de la tabla. - -### Media, Lookup field, Options list...etc -The various options in these tabs specify the behavior and appearance of the current field. +### Medios, Campo de búsqueda, Lista de opciones... etc. +Las diversas opciones en estas pestañas especifican el comportamiento y la apariencia del campo actual. ![AppGini_YJdwqUy65o](https://github.com/bigprof-software/appgini-docs/assets/168858457/67b09a66-a71b-43fa-9db9-f794b2b7f9da) -### Media tab > Link -Configures this field as a link to the detail view (the default behavior), a link to a URL, an email link, or no link. Click the 'Configure' button to change the link behavior. +### Pestaña Medios > Enlace +Configura este campo como un enlace a la vista detallada (el comportamiento predeterminado), un enlace a una URL, un enlace de correo electrónico o ningún enlace. Haga clic en el botón 'Configurar' para cambiar el comportamiento del enlace. ![AppGini_u1ZN8jSNjt](https://github.com/bigprof-software/appgini-docs/assets/168858457/137d8285-4874-4772-b9f6-5b4b3896e39e) -### Media tab > Image -Image Configures this field to accept an image upload and display as a full-size image or a thumbnail. +### Pestaña Medios > Imagen +Imagen Configura este campo para aceptar una carga de imagen y mostrarla como una imagen de tamaño completo o una miniatura. -his works only if the field has a textual data type (Char, Varchar, Text, ..etc). This is because the field actually stores the image file name, while the image itself is uploaded to the storage of the server running your AppGini app. +Esto solo funciona si el campo tiene un tipo de datos textual (Char, Varchar, Text, etc.). Esto se debe a que el campo en realidad almacena el nombre del archivo de imagen, mientras que la imagen en sí se carga en el almacenamiento del servidor que ejecuta su aplicación AppGini. ![AppGini_gG1TJkJGDp](https://github.com/bigprof-software/appgini-docs/assets/168858457/20dbc750-eb05-428c-bdbb-1e4ce7d358a4) -### Media tab > File upload -Configures this field as a file upload field. This works only if the field has a textual data type (Char, Varchar, Text, ..etc). -This is because the field actually stores the file name, while the file itself is uploaded to the storage of the server running your AppGini app. -In the configuration window, you can specify the maximum file size in KB that users are allowed to upload. Also, you can specify whether you want to delete the file from the server if the record is deleted. You can also configure how the field is displayed to users. +### Pestaña Medios > Carga de archivos +Configura este campo como un campo de carga de archivos. Esto solo funciona si el campo tiene un tipo de datos textual (Char, Varchar, Text, etc.). +Esto se debe a que el campo en realidad almacena el nombre del archivo, mientras que el archivo en sí se carga en el almacenamiento del servidor que ejecuta su aplicación AppGini. +En la ventana de configuración, puede especificar el tamaño máximo de archivo en KB que los usuarios pueden cargar. Además, puede especificar si desea eliminar el archivo del servidor si se elimina el registro. También puede configurar cómo se muestra el campo a los usuarios. ![AppGini_TNckzO2MHt](https://github.com/bigprof-software/appgini-docs/assets/168858457/c7f6e8b7-910f-4d02-b09c-5b3a478c6c64) -### Media tab > Google map -When enabled, this link would accept a Google maps link and would display the related map embedded in the page. +### Pestaña Medios > Mapa de Google +Cuando está habilitado, este enlace aceptaría un enlace de Google Maps y mostraría el mapa relacionado incrustado en la página. ![AppGini_yitzk1mLH7](https://github.com/bigprof-software/appgini-docs/assets/168858457/2fbe19f3-70bb-4e82-8d8c-0b3bf038d8c7) -### Media tab > Youtube video -When enabled, this link would accept a Youtube link and would display the related video embedded in the page. +### Pestaña Medios > Video de Youtube +Cuando está habilitado, este enlace aceptaría un enlace de Youtube y mostraría el video relacionado incrustado en la página. ![AppGini_3ff5I6qgqx](https://github.com/bigprof-software/appgini-docs/assets/168858457/d2ab79f7-593f-4aac-ac8e-7a835b7c9973) -### Lookup field > Parent table -If you want to set this field as a lookup field (foreign key), select its parent table from this menu. A parent table is the table which has the field containing the source data for the lookup field. -For more information about lookup fields, refer to the section 'Understanding lookup fields' in the online help. +### Campo de búsqueda > Tabla principal +Si desea establecer este campo como un campo de búsqueda (clave externa), seleccione su tabla principal en este menú. Una tabla principal es la tabla que tiene el campo que contiene los datos de origen para el campo de búsqueda. +Para obtener más información sobre los campos de búsqueda, consulte la sección 'Comprensión de los campos de búsqueda' en la ayuda en línea. ![AppGini_jNsUIjNBmK](https://github.com/bigprof-software/appgini-docs/assets/168858457/9d32f830-ff2d-4d4f-a252-6fc4e75a5370) -### Lookup field > Advanced ... -The advanced window allows you to specify a custom SQL query for populating the lookup drop-down. -You can use this typically to filter the possible values for this lookup field. For example, you can display products that are not discontinued rather than all products by adding a WHERE condition in the SQL query. +### Campo de búsqueda > Avanzado... +La ventana avanzada le permite especificar una consulta SQL personalizada para completar el menú desplegable de búsqueda. +Normalmente, puede usar esto para filtrar los posibles valores para este campo de búsqueda. Por ejemplo, puede mostrar productos que no están descontinuados en lugar de todos los productos agregando una condición WHERE en la consulta SQL. -### Lookup field > Parent caption field 1 -If this is a lookup field (foreign key), select the field to be used as the first part of the caption from this menu. A parent caption is the caption or alias that appears to the user in the lookup drop-down. -For more information about lookup fields, refer to the section 'Understanding lookup fields' in the online help. +### Campo de búsqueda > Campo de título principal 1 +Si este es un campo de búsqueda (clave externa), seleccione el campo que se utilizará como primera parte del título en este menú. Un título principal es el título o alias que aparece al usuario en el menú desplegable de búsqueda. +Para obtener más información sobre los campos de búsqueda, consulte la sección 'Comprensión de los campos de búsqueda' en la ayuda en línea. ![AppGini_BJblHapZLA](https://github.com/bigprof-software/appgini-docs/assets/168858457/379a1be6-425a-4df5-b0f7-9c27f4287d82) -### Lookup field > Separator -If this is a lookup field (foreign key) and you want its caption to be formed by joining values from 2 caption fields, type a separator here. -For example, if part 1 of the caption is a field called 'last_name', and part 2 is a field called 'first_name', you should use a command followed by a -space ',' as a separator. See the screenshot below - +### Campo de búsqueda > Separador +Si este es un campo de búsqueda (clave externa) y desea que su título se forme uniendo valores de 2 campos de título, escriba un separador aquí. +Por ejemplo, si la parte 1 del título es un campo llamado 'apellido', y la parte 2 es un campo llamado 'nombre', debe usar una coma seguida de un +espacio ',' como separador. Vea la captura de pantalla a continuación. ![AppGini_jLCg6vx72k](https://github.com/bigprof-software/appgini-docs/assets/168858457/d1361d50-bfbb-42c6-9bce-55b8da4c647f) -### Lookup field > Parent caption field 2 -If this is a lookup field (foreign key), select the field to be used as the second part of the caption from this menu. A parent caption is the caption or alias that appears to the user in the lookup drop-down. -For more information about lookup fields, refer to the section 'Understanding lookup fields' in the online help. +### Campo de búsqueda > Campo de título principal 2 +Si este es un campo de búsqueda (clave externa), seleccione el campo que se utilizará como segunda parte del título en este menú. Un título principal es el título o alias que aparece al usuario en el menú desplegable de búsqueda. +Para obtener más información sobre los campos de búsqueda, consulte la sección 'Comprensión de los campos de búsqueda' en la ayuda en línea. ![AppGini_2VmbYdPyMx](https://github.com/bigprof-software/appgini-docs/assets/168858457/f4d671ed-b401-4ae5-aefd-e59ede55c11b) -### Field properties > Show as radio buttons -When this option is checked, the lookup field is displayed as a set of radio buttons rather than a drop down menu. This applies only if the lookup field is not set as 'Auto-fill'. +### Propiedades del campo > Mostrar como botones de opción +Cuando esta opción está marcada, el campo de búsqueda se muestra como un conjunto de botones de opción en lugar de un menú desplegable. Esto solo se aplica si el campo de búsqueda no está configurado como 'Autocompletar'. ![AppGini_WiL0WHggir](https://github.com/bigprof-software/appgini-docs/assets/168858457/375f4ac0-e758-4ae6-be24-d91615224874) -### Field properties > Inherit access permissions -Check this option to limit the contents of the lookup drop down to only the parent records that the logged member is allowed to view. If not checked, all parent records are listed regardless of the member's permissions. +### Propiedades del campo > Heredar permisos de acceso +Marque esta opción para limitar el contenido del menú desplegable de búsqueda solo a los registros principales que el miembro conectado puede ver. Si no está marcada, se enumeran todos los registros principales independientemente de los permisos del miembro. ![AppGini_nELOWUibN4](https://github.com/bigprof-software/appgini-docs/assets/168858457/0ac007ee-abe3-4259-bc36-28ccde0a5763) -### Field properties > Link to parent record in detail view -In the detail view, lookup fields can have an adjacent link to the parent record. This drop down specifies whether to show that link, and how the link behaves when clicked. +### Propiedades del campo > Enlazar al registro principal en la vista detallada +En la vista detallada, los campos de búsqueda pueden tener un enlace adyacente al registro principal. Este menú desplegable especifica si se debe mostrar ese enlace y cómo se comporta el enlace cuando se hace clic. ![AppGini_tkO9m89sRq](https://github.com/bigprof-software/appgini-docs/assets/168858457/33d274c9-dee7-4bb0-bd5c-4d8b54cf8fdd) -### Options list > List values -If you want to limit the possible values for a field to a specific list of values, type the allowable values here, separated by double semi-colons. -The first screenshot below shows an example of how to specify the list values. The second screenshot below it shows how the field will be displayed to users (options are sorted alphabetically in the drop-down). +### Lista de opciones > Valores de la lista +Si desea limitar los posibles valores de un campo a una lista específica de valores, escriba los valores permitidos aquí, separados por dos puntos y coma. +La primera captura de pantalla a continuación muestra un ejemplo de cómo especificar los valores de la lista. La segunda captura de pantalla debajo muestra cómo se mostrará el campo a los usuarios (las opciones se ordenan alfabéticamente en el menú desplegable). ![AppGini_P48IuTLrxY](https://github.com/bigprof-software/appgini-docs/assets/168858457/2db1c1e1-ba13-4b90-b693-c1751bb90a0d) -### Options list > Quick list! -Choose a popular predefined set of options from the quick list instead of having to type them manually. -To add your own predefined list, create a text file containing the list and save it into the 'add-ons' folder inside your AppGini installation folder. The extension of your list file must be '.Ist'. +### Lista de opciones > ¡Lista rápida! +Elija un conjunto popular predefinido de opciones de la lista rápida en lugar de tener que escribirlas manualmente. +Para agregar su propia lista predefinida, cree un archivo de texto que contenga la lista y guárdelo en la carpeta 'add-ons' dentro de su carpeta de instalación de AppGini. La extensión de su archivo de lista debe ser '.Ist'. ![AppGini_W4eEPywd51](https://github.com/bigprof-software/appgini-docs/assets/168858457/9b2bc409-720a-4836-a557-b36bf0a10d81) -### Options list > Drop-down list -If you choose to display an options list as a drop-down list, users can select a value from the drop-down, and can search for values by typing part of their content in the search box. -Recommended if you have a large number of options. +### Lista de opciones > Lista desplegable +Si elige mostrar una lista de opciones como una lista desplegable, los usuarios pueden seleccionar un valor del menú desplegable y pueden buscar valores escribiendo parte de su contenido en el cuadro de búsqueda. +Recomendado si tiene una gran cantidad de opciones. ![AppGini_Cc7Gs5XGGu](https://github.com/bigprof-software/appgini-docs/assets/168858457/92808c8d-9234-499d-9a4b-63c911c32911) -### Options list > Multiple-choice list box -If you choose to display an options list as a multiple-choice list box, users can select one or more values from the drop-down, and can search for values by typing part of their content in the search box. -To use this option, the field data type must be a TEXT or BLOB type. -The screenshot below shows an example where the user has selected 2 values form the drop-down. +### Lista de opciones > Cuadro de lista de selección múltiple +Si elige mostrar una lista de opciones como un cuadro de lista de selección múltiple, los usuarios pueden seleccionar uno o más valores del menú desplegable y pueden buscar valores escribiendo parte de su contenido en el cuadro de búsqueda. +Para usar esta opción, el tipo de datos del campo debe ser un tipo TEXT o BLOB. +La captura de pantalla a continuación muestra un ejemplo en el que el usuario ha seleccionado 2 valores del menú desplegable. ![AppGini_3IrB4EUtGC](https://github.com/bigprof-software/appgini-docs/assets/168858457/83e87dc4-e240-4260-8c79-78e7cba3c31c) -### Options list > Radio buttons -If this field is an options list, and you choose to display it as radio buttons, the values of the list are displayed as radio button options, each on a separate line. The advantage of radio buttons is that they are very easy to use and the user can see all the possible options without scrolling. -Not recommended though if you have a large number of options, as this will cause the form to become too long. Use a drop-down list in this case. -Options are sorted in the same order you enter them if you choose radio buttons. -To hide the 'None' option, set the field as required. +### Lista de opciones > Botones de opción +Si este campo es una lista de opciones y elige mostrarlo como botones de opción, los valores de la lista se muestran como opciones de botones de opción, cada una en una línea separada. La ventaja de los botones de opción es que son muy fáciles de usar y el usuario puede ver todas las opciones posibles sin desplazarse. +Sin embargo, no se recomienda si tiene una gran cantidad de opciones, ya que esto hará que el formulario sea demasiado largo. Utilice una lista desplegable en este caso. +Las opciones se ordenan en el mismo orden en que las ingresa si elige botones de opción. +Para ocultar la opción 'Ninguno', configure el campo como obligatorio. ![AppGini_FxCj19ijih](https://github.com/bigprof-software/appgini-docs/assets/168858457/e7079346-61f7-4385-a76e-2edbc0857237) -### Data format > Format this field as -Use this option if you want to apply a special format to the data stored in this field. -Examples of special formats include currency formats, Date/time formats, ... etc. -You can add or edit data formats by editing the file `C:\Program Files\AppGini\add-ons\dataFormats.cfg` in a text editor. -Rules: Each data format on a separate line. The line begins with the description of the data format, followed by a semi-colon (;) and a space, followed by the format code (written in MySQL syntax). The description of the data format can't include semi-colons. +### Formato de datos > Formatear este campo como +Utilice esta opción si desea aplicar un formato especial a los datos almacenados en este campo. +Ejemplos de formatos especiales incluyen formatos de moneda, formatos de fecha/hora, etc. +Puede agregar o editar formatos de datos editando el archivo `C:\Program Files\AppGini\add-ons\dataFormats.cfg` en un editor de texto. +Reglas: Cada formato de datos en una línea separada. La línea comienza con la descripción del formato de datos, seguida de un punto y coma (;) y un espacio, seguido del código de formato (escrito en sintaxis MySQL). La descripción del formato de datos no puede incluir puntos y comas. ![AppGini_8lyktlLxci](https://github.com/bigprof-software/appgini-docs/assets/168858457/2358b9fa-2c47-4956-b632-31d568611fb3) -### Calculated field > Automatically calculate the value of this field using the following SQL query -This is an advanced feature that requires some SQL knowledge. -Instead of receiving user input, or a default value, calculated fields are populated by running the specified SQL query, and storing the returned value. -The SQL query should return a single value: single row and single column. Use the 'Query helper' button to open an advanced query editor that makes it much easier to build queries. The list of variables at the right allows you to insert special placeholders in the SQL query, to be replaced by their -corresponding values before running the query. For more details and examples, please refer to the online help. - -### Show technical documentation page in the admin area -Technical documentation is a way of adding comments/documentation to your app. If the option 'Show technical documentation page in the admin area' is checked, the documentation will also be visible to the admin user rather than just in AppGini. Documentation text can optionally include HTML code. Bootstrap CSS classes can also be used. - +### Campo calculado > Calcular automáticamente el valor de este campo utilizando la siguiente consulta SQL +Esta es una función avanzada que requiere algunos conocimientos de SQL. +En lugar de recibir la entrada del usuario o un valor predeterminado, los campos calculados se completan ejecutando la consulta SQL especificada y almacenando el valor devuelto. +La consulta SQL debe devolver un solo valor: una sola fila y una sola columna. Utilice el botón 'Ayudante de consulta' para abrir un editor de consultas avanzado que facilita mucho la creación de consultas. La lista de variables a la derecha le permite insertar marcadores de posición especiales en la consulta SQL, para que se reemplacen por sus +valores correspondientes antes de ejecutar la consulta. Para obtener más detalles y ejemplos, consulte la ayuda en línea. +### Mostrar página de documentación técnica en el área de administración +La documentación técnica es una forma de agregar comentarios/documentación a su aplicación. Si la opción 'Mostrar página de documentación técnica en el área de administración' está marcada, la documentación también será visible para el usuario administrador en lugar de solo en AppGini. El texto de la documentación puede incluir opcionalmente código HTML. También se pueden utilizar clases CSS de Bootstrap. diff --git a/pages/working-with-projects/generating-the-php-application.md b/pages/working-with-projects/generating-the-php-application.md index 7ed164d..363d113 100644 --- a/pages/working-with-projects/generating-the-php-application.md +++ b/pages/working-with-projects/generating-the-php-application.md @@ -1,37 +1,36 @@ --- -title: Generating the PHP application -linkTitle: Generating the PHP application +title: Generación de la aplicación PHP +linkTitle: Generación de la aplicación PHP slug: help/working-with-projects/generating-the-php-application --- -# Generating the PHP application +# Generación de la aplicación PHP - -![The 'Generate App' icon](https://cdn.bigprof.com/images/generate-app-icon.png) -After you have finished working with your project (defining tables, fields and styles) the only thing remaining now is firing your application. Click the 'Generate App' icon. You'll be asked to select (or create) an output folder. - +![El icono 'Generar aplicación'](https://cdn.bigprof.com/images/generate-app-icon.png) -!['Specify output folder' dialog](https://cdn.bigprof.com/screencasts/specify-output-folder-dialog.png) +Después de haber terminado de trabajar con su proyecto (definiendo tablas, campos y estilos), lo único que queda ahora es iniciar su aplicación. Haga clic en el icono 'Generar aplicación'. Se le pedirá que seleccione (o cree) una carpeta de salida. -If you've generated code for the open project before, this dialog will, by default, display the same output folder used before. You can select the output folder using the _Browse ..._ button to navigate to any other folder. -By clicking the yellow folder button, you can change the output folder to the parent folder of the one currently specified. _Same as project file_ would set the output folder to the same as the folder containing the AXP project file, and _Last used folder_ would set the output folder to the one you used last (beware! this might contain an app generated by a different project file). +!['Especificar carpeta de salida' diálogo](https://cdn.bigprof.com/screencasts/specify-output-folder-dialog.png) - -If you choose a folder that already contains previously-generated code, you'll see a window that lists all the files that will be generated. You can specify in this window (shown below) which files to overwrite and which to skip. - +Si ha generado código para el proyecto abierto anteriormente, este cuadro de diálogo mostrará, de forma predeterminada, la misma carpeta de salida utilizada anteriormente. Puede seleccionar la carpeta de salida utilizando el botón _Examinar..._ para navegar a cualquier otra carpeta. -!['Select files to overwrite' dialog](https://cdn.bigprof.com/appgini-desktop/help/generating-php-application-3.png) +Al hacer clic en el botón de la carpeta amarilla, puede cambiar la carpeta de salida a la carpeta principal de la especificada actualmente. _Igual que el archivo de proyecto_ establecería la carpeta de salida en la misma que la carpeta que contiene el archivo de proyecto AXP, y _Última carpeta utilizada_ establecería la carpeta de salida en la que utilizó por última vez (¡cuidado! esto podría contener una aplicación generada por un archivo de proyecto diferente). - -Finally, a log window (shown below) reports events that happened during file generation: error checking, files overwritten, files skipped, failed files, and instructions for deploying the generated application. You can save the log for future reference if you click the "Save log" button. At this point you are finished with AppGini. The next step is to upload and set up your PHP application. - -![Log of generated files](https://cdn.bigprof.com/appgini-desktop/help/generating-php-application-4.png) - - -**Tip:** If you want to customize some of the generated files and don't want AppGini to overwrite them if you regenerate your project later, set them as read-only. This is a very easy way of retaining your customized code. AppGini will just report that it couldn't overwrite that file, and will continue generating the other files normally. - -For more advanced code management, you should consider using [hooks](/appgini/help/advanced-topics/hooks/). Hooks allow you to add more functionality and customize your application behavior without loosing your customizations whenever you regenerate the application later. +Si elige una carpeta que ya contiene código generado previamente, verá una ventana que enumera todos los archivos que se generarán. Puede especificar en esta ventana (que se muestra a continuación) qué archivos sobrescribir y cuáles omitir. + +!['Seleccionar archivos para sobrescribir' diálogo](https://cdn.bigprof.com/appgini-desktop/help/generating-php-application-3.png) + + +Finalmente, una ventana de registro (que se muestra a continuación) informa los eventos que ocurrieron durante la generación de archivos: verificación de errores, archivos sobrescritos, archivos omitidos, archivos fallidos e instrucciones para implementar la aplicación generada. Puede guardar el registro para referencia futura si hace clic en el botón "Guardar registro". En este punto, ha terminado con AppGini. El siguiente paso es cargar y configurar su aplicación PHP. + + +![Registro de archivos generados](https://cdn.bigprof.com/appgini-desktop/help/generating-php-application-4.png) + + +**Consejo:** Si desea personalizar algunos de los archivos generados y no desea que AppGini los sobrescriba si regenera su proyecto más tarde, configúrelos como de solo lectura. Esta es una forma muy fácil de conservar su código personalizado. AppGini simplemente informará que no pudo sobrescribir ese archivo y continuará generando los otros archivos normalmente. + +Para una gestión de código más avanzada, debería considerar el uso de [hooks](/appgini/help/advanced-topics/hooks/). Los hooks le permiten agregar más funcionalidad y personalizar el comportamiento de su aplicación sin perder sus personalizaciones cada vez que regenere la aplicación más tarde. diff --git a/pages/working-with-projects/getting-help-while-you-work.md b/pages/working-with-projects/getting-help-while-you-work.md index b72a214..9a2e617 100644 --- a/pages/working-with-projects/getting-help-while-you-work.md +++ b/pages/working-with-projects/getting-help-while-you-work.md @@ -1,22 +1,19 @@ --- -title: Getting help while you work -linkTitle: Live help +title: Obtener ayuda mientras trabaja +linkTitle: Ayuda en vivo slug: help/working-with-projects/getting-help-while-you-work --- -# Getting help while you work +# Obtener ayuda mientras trabaja -In addition to this online help file, there are several additional help resources: there is the continuously expanding [tips and tutorials](/appgini/tips-and-tutorials) section, [AppGini FAQs](/appgini/faqs), the context help inside AppGini, and the [AppGini community forums](http://forums.appgini.com/phpbb/). Context help is a handy tool for obtaining help while you work with your projects without having to be online. +Además de este archivo de ayuda en línea, existen varios recursos de ayuda adicionales: está la sección de [consejos y tutoriales](/appgini/tips-and-tutorials) en continua expansión, las [Preguntas frecuentes de AppGini](/appgini/faqs), la ayuda contextual dentro de AppGini y los [foros de la comunidad de AppGini](http://forums.appgini.com/phpbb/). La ayuda contextual es una herramienta útil para obtener ayuda mientras trabaja con sus proyectos sin tener que estar en línea. ![F1](https://cdn.bigprof.com/appgini-desktop/help/f1.gif) -To activate context help, press **`F1`**. This would open the help section at the right side of the AppGini window. This section displays help on whatever element has the focus at the moment. You can use the mouse or the Tab key to move the focus between all the elements of the project window. To hide the help section, press **`F1`** again. +Para activar la ayuda contextual, presione **`F1`**. Esto abrirá la sección de ayuda en el lado derecho de la ventana de AppGini. Esta sección muestra ayuda sobre cualquier elemento que tenga el foco en ese momento. Puede usar el mouse o la tecla Tab para mover el foco entre todos los elementos de la ventana del proyecto. Para ocultar la sección de ayuda, presione **`F1`** nuevamente. +![Panel de propiedades del proyecto AppGini, que muestra la sección de ayuda](https://github.com/bigprof-software/appgini-docs/assets/168858457/1b8c5ff8-8f8a-4a5e-9647-6ba752df8948 "Panel de propiedades del proyecto AppGini, que muestra la sección de ayuda") -![AppGini project properties pane, showing help section](https://github.com/bigprof-software/appgini-docs/assets/168858457/1b8c5ff8-8f8a-4a5e-9647-6ba752df8948 "AppGini project properties pane, showing help section") +Al presionar la tecla **`F1`** se abre la sección de ayuda en el panel del lado derecho. Este panel muestra ayuda sensible al contexto según el elemento actualmente enfocado. - -Pressing **`F1`** key opens the help section in the right-side panel. This panel displays context-sensitive help based on the currently focused element. - - -![AppGini context help based on the currently focused element](https://github.com/bigprof-software/appgini-docs/assets/168858457/062b478d-bd6b-424c-bdda-81052762fbb4 "AppGini context help based on the currently focused element") +![Ayuda contextual de AppGini basada en el elemento actualmente enfocado](https://github.com/bigprof-software/appgini-docs/assets/168858457/062b478d-bd6b-424c-bdda-81052762fbb4 "Ayuda contextual de AppGini basada en el elemento actualmente enfocado") diff --git a/pages/working-with-projects/index.md b/pages/working-with-projects/index.md index 0fba66c..b5ccae2 100644 --- a/pages/working-with-projects/index.md +++ b/pages/working-with-projects/index.md @@ -1,61 +1,60 @@ --- -title: AppGini projects -description: Learn how to work with AppGini projects, create new projects, and save them. -keywords: appgini projects, appgini project window, appgini new project, appgini project browser, appgini project properties, working with projects -linkTitle: Working with projects +title: Proyectos de AppGini +description: Aprenda a trabajar con proyectos de AppGini, crear nuevos proyectos y guardarlos. +keywords: proyectos de appgini, ventana de proyecto de appgini, nuevo proyecto de appgini, explorador de proyectos de appgini, propiedades de proyecto de appgini, trabajar con proyectos +linkTitle: Trabajar con proyectos slug: help/working-with-projects --- -# AppGini projects +# Proyectos de AppGini -## What is an AppGini project? +## ¿Qué es un proyecto de AppGini? -To create a web database application using AppGini, you start by creating a project. In the project, you define your database tables and fields, and configure your application's appearance and behavior. Once you have finished working on your project, you can generate the PHP code for your application by clicking the "Generate" button on the toolbar or pressing F5. AppGini will then save the generated code to a folder of your choice. Finally, you can deploy the generated files to your web server. +Para crear una aplicación de base de datos web con AppGini, comienza creando un proyecto. En el proyecto, define sus tablas y campos de base de datos, y configura la apariencia y el comportamiento de su aplicación. Una vez que haya terminado de trabajar en su proyecto, puede generar el código PHP para su aplicación haciendo clic en el botón "Generar" en la barra de herramientas o presionando F5. AppGini luego guardará el código generado en una carpeta de su elección. Finalmente, puede implementar los archivos generados en su servidor web. -![The Generate button on the toolbar.](https://cdn.bigprof.com/appgini-desktop/help/magic-stick.png) +![El botón Generar en la barra de herramientas.](https://cdn.bigprof.com/appgini-desktop/help/magic-stick.png) -## How do I start a new project? +## ¿Cómo inicio un nuevo proyecto? -To start a new project in AppGini, follow these steps: +Para iniciar un nuevo proyecto en AppGini, siga estos pasos: -1. Launch AppGini. -2. From the File menu, select New, or click the 'New Project' icon on the toolbar. -3. A new project window will appear, as shown below. -4. By default, the project is named 'new_db'. To change the name, click on the project name at the top of the left section (the project browser pane), then press **` F2 `** and type the new name. +1. Inicie AppGini. +2. En el menú Archivo, seleccione Nuevo, o haga clic en el icono 'Nuevo proyecto' en la barra de herramientas. +3. Aparecerá una nueva ventana de proyecto, como se muestra a continuación. +4. De forma predeterminada, el proyecto se llama 'new_db'. Para cambiar el nombre, haga clic en el nombre del proyecto en la parte superior de la sección izquierda (el panel del explorador de proyectos), luego presione **` F2 `** y escriba el nuevo nombre. -### The project name +### El nombre del proyecto -Note that the project name you specify in AppGini doesn't have to match the name of the database on your server. It's used only for display purposes and will be used as the basis for the application title, which is displayed at the top of the project properties pane (see the screenshot below) and in the generated application's title bar. +Tenga en cuenta que el nombre del proyecto que especifique en AppGini no tiene que coincidir con el nombre de la base de datos en su servidor. Se usa solo con fines de visualización y se usará como base para el título de la aplicación, que se muestra en la parte superior del panel de propiedades del proyecto (vea la captura de pantalla a continuación) y en la barra de título de la aplicación generada. -> You can configure the actual database name and credentials during the generated application setup, which is explained in detail [here](/appgini/help/working-with-generated-web-database-application/setup/). +> Puede configurar el nombre real de la base de datos y las credenciales durante la configuración de la aplicación generada, lo que se explica en detalle [aquí](/appgini/help/working-with-generated-web-database-application/setup/). -## The project window +## La ventana del proyecto -![New project window](https://cdn.bigprof.com/appgini-desktop/help/appgini-new-project-24.12.png) +![Nueva ventana de proyecto](https://cdn.bigprof.com/appgini-desktop/help/appgini-new-project-24.12.png) -This is your working area. This window has two sections: the project browser pane at the left lets you view your project components (the project, tables and fields) in an easy to navigate hierarchical manner. The right section is the properties pane. When you click on any item in the project browser, its properties are displayed in the properties pane. +Esta es su área de trabajo. Esta ventana tiene dos secciones: el panel del explorador de proyectos a la izquierda le permite ver los componentes de su proyecto (el proyecto, las tablas y los campos) de una manera jerárquica fácil de navegar. La sección derecha es el panel de propiedades. Cuando hace clic en cualquier elemento en el explorador de proyectos, sus propiedades se muestran en el panel de propiedades. -At the bottom of the project window, you'll find the project search box. You can use this box to quickly find any item in your project by typing a few characters of its name. +En la parte inferior de la ventana del proyecto, encontrará el cuadro de búsqueda del proyecto. Puede usar este cuadro para encontrar rápidamente cualquier elemento en su proyecto escribiendo algunos caracteres de su nombre. -## How do I save a project? +## ¿Cómo guardo un proyecto? -In the professional version of AppGini, projects can be saved as project files, with the extension `.axp`. You can open them later to continue working on your project or modify it. The freeware version can open project files but can not save changes to them. +En la versión profesional de AppGini, los proyectos se pueden guardar como archivos de proyecto, con la extensión `.axp`. Puede abrirlos más tarde para continuar trabajando en su proyecto o modificarlo. La versión gratuita puede abrir archivos de proyecto pero no puede guardar cambios en ellos. -To save a project, click the 'Save' icon on the toolbar or press **` Ctrl `** + **` S `**. You'll be prompted to choose a location to save your project file if you haven't saved it before. You can also save your project by selecting 'Save' from the File menu. +Para guardar un proyecto, haga clic en el icono 'Guardar' en la barra de herramientas o presione **` Ctrl `** + **` S `**. Se le pedirá que elija una ubicación para guardar su archivo de proyecto si no lo ha guardado antes. También puede guardar su proyecto seleccionando 'Guardar' en el menú Archivo. -> Note: Saving a project file doesn't save the generated application files. To save the generated application files, you need to click the 'Generate' button on the toolbar or press **` F5 `**. +> Nota: Guardar un archivo de proyecto no guarda los archivos de la aplicación generada. Para guardar los archivos de la aplicación generada, debe hacer clic en el botón 'Generar' en la barra de herramientas o presionar **` F5 `**. -## Auto save of projects +## Guardado automático de proyectos -You can configure AppGini to automatically save your project every few minutes. To do this, click the 'AppGini Preferences' icon on the toolbar, then check the 'Auto-save interval (minutes)' option and specify the interval in minutes. +Puede configurar AppGini para que guarde automáticamente su proyecto cada pocos minutos. Para hacer esto, haga clic en el icono 'Preferencias de AppGini' en la barra de herramientas, luego marque la opción 'Intervalo de guardado automático (minutos)' y especifique el intervalo en minutos. -## Opening an existing project +## Abrir un proyecto existente -When you launch AppGini, you'll see the 'How do you want to begin?' dialog. You can choose to start a new project, open an existing project, or open last project. If you don't see this dialog, it means you've disabled it before. You can enable it again by checking the 'Show how do you want to begin' option in the 'AppGini Preferences' dialog. +Cuando inicie AppGini, verá el cuadro de diálogo '¿Cómo desea comenzar?'. Puede elegir iniciar un nuevo proyecto, abrir un proyecto existente o abrir el último proyecto. Si no ve este cuadro de diálogo, significa que lo deshabilitó antes. Puede habilitarlo nuevamente marcando la opción 'Mostrar cómo desea comenzar' en el cuadro de diálogo 'Preferencias de AppGini'. -You can also open an existing project by selecting 'Open' from the File menu or clicking the 'Open Project' icon on the toolbar. Then, navigate to the location of your project file and select it. +También puede abrir un proyecto existente seleccionando 'Abrir' en el menú Archivo o haciendo clic en el icono 'Abrir proyecto' en la barra de herramientas. Luego, navegue a la ubicación de su archivo de proyecto y selecciónelo. -## Advanced: The project file format - -AppGini project files have the extension `.axp`. They are XML files that store all the information about your project, including the tables, fields, and their properties, as well as the project settings. You can open an `.axp` file in a text/code editor to see its contents. You can also make modifications to the file, but be careful not to corrupt it, as this may prevent you from opening the project in AppGini. +## Avanzado: El formato del archivo de proyecto +Los archivos de proyecto de AppGini tienen la extensión `.axp`. Son archivos XML que almacenan toda la información sobre su proyecto, incluidas las tablas, los campos y sus propiedades, así como la configuración del proyecto. Puede abrir un archivo `.axp` en un editor de texto/código para ver su contenido. También puede realizar modificaciones en el archivo, pero tenga cuidado de no dañarlo, ya que esto podría impedirle abrir el proyecto en AppGini. diff --git a/pages/working-with-projects/keyboard-shortcuts.md b/pages/working-with-projects/keyboard-shortcuts.md index 77dfc0a..602d3a9 100644 --- a/pages/working-with-projects/keyboard-shortcuts.md +++ b/pages/working-with-projects/keyboard-shortcuts.md @@ -1,29 +1,27 @@ --- -title: Keyboard shortcuts in AppGini -linkTitle: Keyboard shortcuts +title: Atajos de teclado en AppGini +linkTitle: Atajos de teclado slug: help/working-with-projects/keyboard-shortcuts -description: Learn about the keyboard shortcuts in AppGini that will help you work even faster with projects. -keywords: keyboard shortcuts, AppGini, project, table, field, application, theme, context help, project browser, properties pane, project search box +description: Aprenda sobre los atajos de teclado en AppGini que le ayudarán a trabajar aún más rápido con los proyectos. +keywords: atajos de teclado, AppGini, proyecto, tabla, campo, aplicación, tema, ayuda contextual, explorador de proyectos, panel de propiedades, cuadro de búsqueda de proyectos --- -# Keyboard shortcuts in AppGini +# Atajos de teclado en AppGini -There are several keyboard shortcuts in AppGini that will help you work even faster with projects. Here is a list of them. - -* **` Ctrl `** + **` N `**: Create a new project. -* **` Ctrl `** + **` O `**: Open an existing project. -* **` Ctrl `** + **` S `**: Save the current project. -* **` Ctrl `** + **` Q `**: Quit AppGini. -* **` Ctrl `** + **` T `**: Create a new table. -* **` Ctrl `** + **` F `**: Create a new field. -* **` F2 `**: Rename the selected table or field. -* **` F5 `**: Generate the application. - > Tip: Hold **` Ctrl `** while clicking the "Generate AppGini app" icon to generate your application using the most recent options you selected before (last output folder and file overwriting settings) without showing the options dialogs. -* **` F3 `**: Show the project properties pane. -* **` Shift `** + **` F3 `**: Show the application theme selector window. -* **` F1 `**: Show/hide the context help pane. -* **` F4 `**: Navigate between the project browser (left pane), the properties pane (right pane), and the project search box. - -See also: [Shortcut keys in generated applications](/appgini/help/working-with-generated-web-database-application/shortcut-keys/) +Hay varios atajos de teclado en AppGini que le ayudarán a trabajar aún más rápido con los proyectos. Aquí tiene una lista de ellos. +* **` Ctrl `** + **` N `**: Crear un nuevo proyecto. +* **` Ctrl `** + **` O `**: Abrir un proyecto existente. +* **` Ctrl `** + **` S `**: Guardar el proyecto actual. +* **` Ctrl `** + **` Q `**: Salir de AppGini. +* **` Ctrl `** + **` T `**: Crear una nueva tabla. +* **` Ctrl `** + **` F `**: Crear un nuevo campo. +* **` F2 `**: Cambiar el nombre de la tabla o campo seleccionado. +* **` F5 `**: Generar la aplicación. + > Consejo: Mantenga presionada la tecla **` Ctrl `** mientras hace clic en el icono "Generar aplicación AppGini" para generar su aplicación utilizando las opciones más recientes que seleccionó anteriormente (última carpeta de salida y configuración de sobrescritura de archivos) sin mostrar los cuadros de diálogo de opciones. +* **` F3 `**: Mostrar el panel de propiedades del proyecto. +* **` Shift `** + **` F3 `**: Mostrar la ventana del selector de temas de la aplicación. +* **` F1 `**: Mostrar/ocultar el panel de ayuda contextual. +* **` F4 `**: Navegar entre el explorador de proyectos (panel izquierdo), el panel de propiedades (panel derecho) y el cuadro de búsqueda del proyecto. +Ver también: [Teclas de acceso directo en aplicaciones generadas](/appgini/help/working-with-generated-web-database-application/shortcut-keys/) diff --git a/pages/working-with-projects/media-tab.md b/pages/working-with-projects/media-tab.md index 8e6856d..07a176a 100644 --- a/pages/working-with-projects/media-tab.md +++ b/pages/working-with-projects/media-tab.md @@ -1,139 +1,136 @@ --- -title: The Media Tab -linkTitle: The Media Tab +title: La pestaña Medios +linkTitle: La pestaña Medios slug: help/working-with-projects/media-tab -description: Learn how to configure your field to be displayed as a web-link, an image, a file, a google map or even a YouTube video. -keywords: media tab, link, image, file upload, google map, youtube video, geolocation, google maps api key +description: Aprenda a configurar su campo para que se muestre como un enlace web, una imagen, un archivo, un mapa de Google o incluso un video de YouTube. +keywords: pestaña de medios, enlace, imagen, carga de archivos, mapa de google, video de youtube, geolocalización, clave api de google maps --- -# The Media Tab +# La pestaña Medios -This tab allows you to configure your field to be displayed as a web-link, an image, a file, a Google map or even a YouTube video. +Esta pestaña le permite configurar su campo para que se muestre como un enlace web, una imagen, un archivo, un mapa de Google o incluso un video de YouTube. -## Link option +## Opción de enlace -Configure the way your field behaves when clicked. It can be configured to open the detail view of the current record, a URL, an email link, or not be clickable at all. +Configure la forma en que se comporta su campo cuando se hace clic en él. Se puede configurar para abrir la vista detallada del registro actual, una URL, un enlace de correo electrónico o para que no se pueda hacer clic en absoluto. -![Link option](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/link_appgini.png) +![Opción de enlace](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/link_appgini.png) -If you configure the field to display as a web-link and the user clicks that field, the link is opened in a new window. +Si configura el campo para que se muestre como un enlace web y el usuario hace clic en ese campo, el enlace se abre en una nueva ventana. -![Link as displayed in the table view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/link-browser.png) +![Enlace como se muestra en la vista de tabla](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/link-browser.png) -## The Image option +## La opción Imagen -This option allows you to configure the field to be displayed as an image. You can allow users to upload jpg, jpeg, gif and png images. You can also configure the maximum allowed file size. +Esta opción le permite configurar el campo para que se muestre como una imagen. Puede permitir a los usuarios cargar imágenes jpg, jpeg, gif y png. También puede configurar el tamaño máximo de archivo permitido. -![Image option](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/image_appgini.png) +![Opción de imagen](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/image_appgini.png) -You can choose how to display the image. It can be displayed as a zoomable thumbnail image in the table and detail view. You can also configure the thumbnail size. +Puede elegir cómo mostrar la imagen. Se puede mostrar como una imagen en miniatura ampliable en la vista de tabla y en la vista detallada. También puede configurar el tamaño de la miniatura. -This is an example of how the image is displayed in the detail view. +Este es un ejemplo de cómo se muestra la imagen en la vista detallada. -![Image thumbnail in the detail view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/image_detail_view.png) +![Miniatura de imagen en la vista detallada](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/image_detail_view.png) -And this is how the image is displayed in the table view. +Y así es como se muestra la imagen en la vista de tabla. -![Image thumbnail in the table view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/image_field_tv.png) +![Miniatura de imagen en la vista de tabla](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/image_field_tv.png) -## The File upload option +## La opción Carga de archivos -This option allows the user to upload many different file types. You can configure the field to be displayed as the field content, clickable icon or contents of another page. +Esta opción permite al usuario cargar muchos tipos de archivos diferentes. Puede configurar el campo para que se muestre como el contenido del campo, un icono en el que se puede hacer clic o el contenido de otra página. -![File upload option](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/file_upload_appgini.png) +![Opción de carga de archivos](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/file_upload_appgini.png) -This is how the file upload field is displayed in the detail view. +Así es como se muestra el campo de carga de archivos en la vista detallada. -![File upload field in the detail view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/file_upload_dv.png) +![Campo de carga de archivos en la vista detallada](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/file_upload_dv.png) -You can configure the field to be displayed as the field content, clickable icon or contents of another field. +Puede configurar el campo para que se muestre como el contenido del campo, un icono en el que se puede hacer clic o el contenido de otro campo. -![File upload field in the table view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/file_upload_browser.png) +![Campo de carga de archivos en la vista de tabla](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/file_upload_browser.png) -## Google maps +## Mapas de Google -Google map fields allow you to display a Google map in your application. +Los campos de mapa de Google le permiten mostrar un mapa de Google en su aplicación. -![Google map field in a detail view form](https://cdn.bigprof.com/images/input-types-dv-google-map-24.18.png "Google map field in a detail view form") +![Campo de mapa de Google en un formulario de vista detallada](https://cdn.bigprof.com/images/input-types-dv-google-map-24.18.png "Campo de mapa de Google en un formulario de vista detallada") +Para crear un campo de mapa de Google, establezca el tipo de datos de su campo en `Varchar` o `Char` con una longitud de al menos 200 caracteres. Luego, en la pestaña **Medios** de las propiedades del campo, seleccione la opción **Mapa de Google**. Esto debería abrir el cuadro de diálogo **Opciones de mapa de Google** (puede abrirlo más tarde haciendo clic en el botón **Configurar** en la pestaña **Medios**). -To create a Google map field, set the data type of your field to `Varchar` or `Char` with a length of at least 200 characters. Then, under the **Media** tab in the field properties, select the **Google map** option. This should open the **Google map options** dialog (you can open it later by clicking the **Configure** button in the **Media** tab). +![Cuadro de diálogo de opciones de mapa de Google](https://cdn.bigprof.com/images/google-map-dialog-24.18.png "Cuadro de diálogo de opciones de mapa de Google") -![Google map options dialog](https://cdn.bigprof.com/images/google-map-dialog-24.18.png "Google map options dialog") +### Clave API de Google -### Google API key +Los campos de mapa de Google requieren una [clave API de Google](../configure-google-maps-api-key.md) para funcionar correctamente. Puede ingresar su clave API de Google en la página **Configuración de administrador** de su aplicación siguiendo los pasos a continuación: -Google map fields require a [Google API key](../configure-google-maps-api-key.md) to work correctly. You can enter your Google API key in the **Admin settings** page of your application by following the steps below: +1. Inicie sesión en su aplicación como superadministrador. +2. Vaya al **Área de administración** » menú **Utilidades** » **Configuración de administrador**. +3. En la pestaña **Aplicación**, ingrese su clave API de Google Maps en el campo **Clave API de Google**. -1. Sign in to your application as the super admin. -2. Go to the **Admin area** » **Utilities** menu » **Admin settings**. -3. Under the **Application** tab, enter your Google maps API key in the **Google API key** field. + ![Configuración de la clave API de Google Maps](https://cdn.bigprof.com/images/google-maps-api-key-setting-24.18.png "Configuración de la clave API de Google Maps") - ![Google maps API key setting](https://cdn.bigprof.com/images/google-maps-api-key-setting-24.18.png "Google maps API key setting") +Si, en lugar del mapa de Google, ve un mensaje de error como *`Google maps Platform rechazó su solicitud...`*, debe proporcionar una [clave API de Google Maps configurada correctamente](../configure-google-maps-api-key.md). -If, instead of the Google map, you see an error message like *`Google maps Platform rejected your request...`*, you need to provide a [correctly configured Google maps API key](../configure-google-maps-api-key.md). +### Opciones de comportamiento y ubicación del mapa -### Map behavior and location options +Al configurar un campo para mostrar un mapa de Google, están disponibles las siguientes opciones para configurar el comportamiento y la ubicación del mapa: -When configuring a field to display a Google map, the following options are available for setting up map behavior and location: +#### 1. Mapa desde URL -#### 1. Map from URL +Muestra un mapa utilizando una URL proporcionada por el usuario. -Displays a map using a user-provided URL. +![Campo de mapa de Google en un formulario de vista detallada, basado en una URL proporcionada por el usuario](https://cdn.bigprof.com/images/input-types-dv-google-map-24.18.png "Campo de mapa de Google en un formulario de vista detallada, basado en una URL proporcionada por el usuario") -![Google map field in a detail view form, based on a user-provided URL](https://cdn.bigprof.com/images/input-types-dv-google-map-24.18.png "Google map field in a detail view form, based on a user-provided URL") +#### 2. Mapa con un marcador de la ubicación del usuario en el momento de guardar un nuevo registro -#### 2. Map with a pin of the user location at the time of saving a new record +Fija automáticamente la ubicación del usuario cuando se guarda un nuevo registro. -Automatically pins the user's location when a new record is saved. +![Campo de mapa de Google con la ubicación actual del usuario](https://cdn.bigprof.com/images/input-types-dv-google-map-with-user-location-24.18.png "Campo de mapa de Google con la ubicación actual del usuario") -![Google map field with user's current location](https://cdn.bigprof.com/images/input-types-dv-google-map-with-user-location-24.18.png "Google map field with user's current location") +#### 3. Mapa con un marcador de la ubicación del usuario en el momento de guardar un registro nuevo o existente -#### 3. Map with a pin of the user location at the time of saving a new or existing record +Igual que la opción anterior, pero también muestra la ubicación del usuario al guardar un registro existente. -Same as the previous option, but also shows the user's location when saving an existing record. +#### 4. Mapa con un marcador de la ubicación del usuario solo si el usuario hace clic en *Capturar mi ubicación* -#### 4. Map with a pin of the user location only if the user clicks *Capture my location* +Muestra un marcador solo cuando el usuario elige capturar su ubicación manualmente. -Shows a pin only when the user chooses to capture their location manually. - -![Google map field with user's current location, captured manually](https://cdn.bigprof.com/images/input-types-dv-google-map-with-user-location-manual-24.18.png "Google map field with user's current location, captured manually") +![Campo de mapa de Google con la ubicación actual del usuario, capturada manualmente](https://cdn.bigprof.com/images/input-types-dv-google-map-with-user-location-manual-24.18.png "Campo de mapa de Google con la ubicación actual del usuario, capturada manualmente") -> Options 2, 3, and 4 were introduced in AppGini 24.18. They require the user's consent to access their location. If the user denies access, the map will not show their location. +> Las opciones 2, 3 y 4 se introdujeron en AppGini 24.18. Requieren el consentimiento del usuario para acceder a su ubicación. Si el usuario niega el acceso, el mapa no mostrará su ubicación. -### Map View Configuration +### Configuración de la vista del mapa -#### Table View (Thumbnail) +#### Vista de tabla (Miniatura) -In the table view, the map field is displayed as a thumbnail image (static map). For [option 1](#1-map-from-url) above, the thumbnail map is generated from the URL provided by the user, without a pin/marker. For [options 2 and 3](#2-map-with-a-pin-of-the-user-location-at-the-time-of-saving-a-new-record), the thumbnail map shows the user's location at the time of saving the record, with a pin/marker. And for [option 4](#4-map-with-a-pin-of-the-user-location-only-if-the-user-clicks-capture-my-location), the thumbnail map shows the user's locationat the time when they click the *Capture my location* button. +En la vista de tabla, el campo del mapa se muestra como una imagen en miniatura (mapa estático). Para la [opción 1](#1-mapa-desde-url) anterior, el mapa en miniatura se genera a partir de la URL proporcionada por el usuario, sin un marcador. Para las [opciones 2 y 3](#2-mapa-con-un-marcador-de-la-ubicación-del-usuario-en-el-momento-de-guardar-un-nuevo-registro), el mapa en miniatura muestra la ubicación del usuario en el momento de guardar el registro, con un marcador. Y para la [opción 4](#4-mapa-con-un-marcador-de-la-ubicación-del-usuario-solo-si-el-usuario-hace-clic-en-capturar-mi-ubicación), el mapa en miniatura muestra la ubicación del usuario en el momento en que hace clic en el botón *Capturar mi ubicación*. -![Google map field in the table view, showing a thumbnail map](https://cdn.bigprof.com/images/input-types-tv-google-map-24.18.png "Google map field in the table view, showing a thumbnail map") +![Campo de mapa de Google en la vista de tabla, que muestra un mapa en miniatura](https://cdn.bigprof.com/images/input-types-tv-google-map-24.18.png "Campo de mapa de Google en la vista de tabla, que muestra un mapa en miniatura") -- **Width in pixels**: Set the width of the thumbnail map shown in the table view. Default is `50` pixels. -- **Height in pixels**: Set the height of the thumbnail map in the table view. Default is `50` pixels. +- **Ancho en píxeles**: Establezca el ancho del mapa en miniatura que se muestra en la vista de tabla. El valor predeterminado es `50` píxeles. +- **Alto en píxeles**: Establezca el alto del mapa en miniatura en la vista de tabla. El valor predeterminado es `50` píxeles. -#### Detail View (Interactive Map) +#### Vista detallada (Mapa interactivo) -- **Width**: Width is set automatically for the interactive map in the detail view to fit the available space. -- **Height in pixels**: Set the height of the interactive map shown in the detailed record view. Default is `360` pixels. +- **Ancho**: El ancho se establece automáticamente para el mapa interactivo en la vista detallada para que se ajuste al espacio disponible. +- **Alto en píxeles**: Establezca el alto del mapa interactivo que se muestra en la vista detallada del registro. El valor predeterminado es `360` píxeles. -### Forcing the capture of the user's location +### Forzar la captura de la ubicación del usuario -If you want to force the capture of the user's location when saving a new or existing record, set the Google map field as **Required** in AppGini. This will ensure that the user's location is captured before the record is saved. -If the user denies access to their location, an error message will be displayed, and the record will not be saved. +Si desea forzar la captura de la ubicación del usuario al guardar un registro nuevo o existente, establezca el campo Mapa de Google como **Obligatorio** en AppGini. Esto garantizará que se capture la ubicación del usuario antes de guardar el registro. +Si el usuario niega el acceso a su ubicación, se mostrará un mensaje de error y el registro no se guardará. -## YouTube video +## Video de YouTube -This field accepts a YouTube URL and displays it as a movie in the detail view. +Este campo acepta una URL de YouTube y la muestra como una película en la vista detallada. -![YouTube video option](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/youtube_field_appgini.png) +![Opción de video de YouTube](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/youtube_field_appgini.png) -You can configure how to display the YouTube video in the detail view and the table view. Here is an example of how the YouTube video is displayed in the detail view. +Puede configurar cómo mostrar el video de YouTube en la vista detallada y en la vista de tabla. Aquí hay un ejemplo de cómo se muestra el video de YouTube en la vista detallada. -![YouTube video in the detail view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/youtube_field_dv.png) - -And this is how the YouTube video is displayed in the table view. - -![YouTube video in the table view](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/youtube_field_tv.png) +![Video de YouTube en la vista detallada](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/youtube_field_dv.png) +Y así es como se muestra el video de YouTube en la vista de tabla. +![Video de YouTube en la vista de tabla](https://cdn.bigprof.com/appgini-desktop/help/appgini-5.40/youtube_field_tv.png) diff --git a/pages/working-with-projects/project-properties-pane.md b/pages/working-with-projects/project-properties-pane.md index 5b2067b..0569830 100644 --- a/pages/working-with-projects/project-properties-pane.md +++ b/pages/working-with-projects/project-properties-pane.md @@ -1,12 +1,11 @@ --- -title: Project properties pane -linkTitle: Project properties +title: Panel de propiedades del proyecto +linkTitle: Propiedades del proyecto slug: help/working-with-projects/Project-properties-pane --- -# Project properties pane +# Panel de propiedades del proyecto -![Project properties pane](https://cdn.bigprof.com/images/appgini-project-properties-pane.png) - -> *TODO: Add description of each property in the project properties pane.* +![Panel de propiedades del proyecto](https://cdn.bigprof.com/images/appgini-project-properties-pane.png) +> *POR HACER: Agregar descripción de cada propiedad en el panel de propiedades del proyecto.* diff --git a/pages/working-with-projects/table-properties-pane.md b/pages/working-with-projects/table-properties-pane.md index 2fdfe53..a4c7292 100644 --- a/pages/working-with-projects/table-properties-pane.md +++ b/pages/working-with-projects/table-properties-pane.md @@ -1,10 +1,10 @@ --- -title: Table properties pane -linkTitle: Table properties +title: Panel de propiedades de la tabla +linkTitle: Propiedades de la tabla slug: help/working-with-projects/table-properties-pane --- -# Table properties pane +# Panel de propiedades de la tabla <div style=" width: 100%; overflow-y: auto;" id="map-link"> <img src="https://cdn.bigprof.com/appgini-desktop/help/appgini-table-properties-pane.png" usemap="#map" id="map-image" style="width: 100%; max-width: 1135px;" /> @@ -74,375 +74,374 @@ slug: help/working-with-projects/table-properties-pane </map> </div> -## Toolbar > New project +## Barra de herramientas > Nuevo proyecto -Click on this icon to start a new empty project. This is the starting point for any AppGini application. You will have an empty project that contains only an empty database and predefined default styles. +Haga clic en este icono para iniciar un nuevo proyecto vacío. Este es el punto de partida para cualquier aplicación AppGini. Tendrá un proyecto vacío que solo contiene una base de datos vacía y estilos predefinidos predeterminados. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Table view title +## Propiedades de la tabla > Título de la vista de tabla -The table view title is the title of the table as it will appear in the pages of the generated PHP application. +El título de la vista de tabla es el título de la tabla tal como aparecerá en las páginas de la aplicación PHP generada. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Open Project +## Barra de herramientas > Abrir proyecto -Click on this icon to open a previously saved project. +Haga clic en este icono para abrir un proyecto guardado anteriormente. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Save Project +## Barra de herramientas > Guardar proyecto -Click on this icon to save the currently open project. If you haven't saved your project before, you'll be prompted for a file name and location. +Haga clic en este icono para guardar el proyecto actualmente abierto. Si no ha guardado su proyecto antes, se le pedirá un nombre de archivo y una ubicación. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Project Properties +## Barra de herramientas > Propiedades del proyecto -Click on this icon to bring the Project Properties area where you can specify the database connection parameters. +Haga clic en este icono para abrir el área de Propiedades del proyecto, donde puede especificar los parámetros de conexión de la base de datos. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Application Theme +## Barra de herramientas > Tema de la aplicación -Click on this icon to preview (and edit) the theme of your application. +Haga clic en este icono para obtener una vista previa (y editar) el tema de su aplicación. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > New Table +## Barra de herramientas > Nueva tabla -Click on this icon to add a new table to your database. +Haga clic en este icono para agregar una nueva tabla a su base de datos. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > New Field +## Barra de herramientas > Nuevo campo -Click on this icon to add a new field to the current table. +Haga clic en este icono para agregar un nuevo campo a la tabla actual. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Delete Selected Table/Field +## Barra de herramientas > Eliminar tabla/campo seleccionado -Click on this icon to remove the highlighted field or table from your database. +Haga clic en este icono para eliminar el campo o la tabla resaltada de su base de datos. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Move Table/Field up +## Barra de herramientas > Mover tabla/campo hacia arriba -Click on this icon to move the highlighted field down/up in the current table. +Haga clic en este icono para mover el campo resaltado hacia abajo/arriba en la tabla actual. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Move Table/Field down +## Barra de herramientas > Mover tabla/campo hacia abajo -Click on this icon to move the highlighted field down/up in the current table. +Haga clic en este icono para mover el campo resaltado hacia abajo/arriba en la tabla actual. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Generate PHP Code +## Barra de herramientas > Generar código PHP -Click on this icon to let AppGini generate the PHP code for your web database application based on the database, tables and fields you defined in your project. You'll be prompted for a location to save the generated files. +Haga clic en este icono para permitir que AppGini genere el código PHP para su aplicación de base de datos web en función de la base de datos, las tablas y los campos que definió en su proyecto. Se le pedirá una ubicación para guardar los archivos generados. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Preferences +## Barra de herramientas > Preferencias -Click on this icon to open the preferences window, where you can set various AppGini options. +Haga clic en este icono para abrir la ventana de preferencias, donde puede establecer varias opciones de AppGini. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Help +## Barra de herramientas > Ayuda -Click on this icon to view the online help. +Haga clic en este icono para ver la ayuda en línea. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > About AppGini +## Barra de herramientas > Acerca de AppGini -Click on this icon to view version and contact information for AppGini +Haga clic en este icono para ver la información de la versión y de contacto de AppGini. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Ideas and tips on our Twitter page +## Barra de herramientas > Ideas y consejos en nuestra página de Twitter -Click on this icon to visit (and optionally subscribe to) our Twitter feed, which includes a lot of helpful resources and tips to get the most out of AppGini. +Haga clic en este icono para visitar (y opcionalmente suscribirse a) nuestro feed de Twitter, que incluye muchos recursos y consejos útiles para aprovechar al máximo AppGini. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Learn to use Appgini through our YouTube playlist +## Barra de herramientas > Aprenda a usar Appgini a través de nuestra lista de reproducción de YouTube -Click on this icon to visit (and optionally subscribe to) our Youtube channel where you can watch many short video tutorials explaining various features of AppGini. +Haga clic en este icono para visitar (y opcionalmente suscribirse a) nuestro canal de YouTube, donde puede ver muchos tutoriales en video cortos que explican varias funciones de AppGini. -[back to top](#map-link) +[volver arriba](#map-link) -## Toolbar > Exit +## Barra de herramientas > Salir -Click on this icon to quit the program. If you have an open project, you'll be asked to save your work first. +Haga clic en este icono para salir del programa. Si tiene un proyecto abierto, se le pedirá que guarde su trabajo primero. -[back to top](#map-link) +[volver arriba](#map-link) -## Project Browser Window +## Ventana del explorador de proyectos -This is the project browser window where you can see a list of the database, table and field names in the current project arranged in a hierarchical view. Click on any item on the window to view and edit its properties in the Properties window. +Esta es la ventana del explorador de proyectos donde puede ver una lista de los nombres de la base de datos, la tabla y los campos del proyecto actual organizados en una vista jerárquica. Haga clic en cualquier elemento de la ventana para ver y editar sus propiedades en la ventana Propiedades. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Table view title +## Propiedades de la tabla > Título de la vista de tabla -The table view title is the title of the table as it will appear in the pages of the generated PHP application. +El título de la vista de tabla es el título de la tabla tal como aparecerá en las páginas de la aplicación PHP generada. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Description +## Propiedades de la tabla > Descripción -If you provide a description for the table, this description will be displayed in the home page of the generated application. You can use HTML code in this description. +Si proporciona una descripción para la tabla, esta descripción se mostrará en la página de inicio de la aplicación generada. Puede usar código HTML en esta descripción. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Records per page +## Propiedades de la tabla > Registros por página -The number of records that appear on one page in the generated PHP application. Records are displayed as horizontal rows of a table. If you put a large number here, your application user might have to scroll down the page to view records. +El número de registros que aparecen en una página en la aplicación PHP generada. Los registros se muestran como filas horizontales de una tabla. Si ingresa un número grande aquí, es posible que el usuario de su aplicación deba desplazarse hacia abajo en la página para ver los registros. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Show quick search box +## Propiedades de la tabla > Mostrar cuadro de búsqueda rápida -If you want to display a quick search box above the table view, check this option. When the user enters a word in that search box and clicks the search button or presses Enter key, the table is searched for matches in any field. This is much easier than the advanced filters if you want a simple search technique. +Si desea mostrar un cuadro de búsqueda rápida sobre la vista de tabla, marque esta opción. Cuando el usuario ingresa una palabra en ese cuadro de búsqueda y hace clic en el botón de búsqueda o presiona la tecla Intro, la tabla se busca en busca de coincidencias en cualquier campo. Esto es mucho más fácil que los filtros avanzados si desea una técnica de búsqueda simple. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Default sort by,Descendingly +## Propiedades de la tabla > Ordenar por defecto, Descendentemente -If you'd like records in the table view sorted by default, select the field that you want to sort by from the 'Default sort by' drop down. The default sorting direction is ascendingly (A-Z, 0-9) unless you check the 'Descendingly' option. If you don't want any default sorting, select 'None' from the 'Default sort by' drop down. +Si desea que los registros de la vista de tabla se ordenen de forma predeterminada, seleccione el campo por el que desea ordenar en el menú desplegable 'Ordenar por defecto'. La dirección de ordenación predeterminada es ascendente (A-Z, 0-9) a menos que marque la opción 'Descendentemente'. Si no desea ninguna ordenación predeterminada, seleccione 'Ninguno' en el menú desplegable 'Ordenar por defecto'. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow sorting +## Propiedades de la tabla > Permitir ordenación -This option controls whether users are allowed to sort records in the table or not. Note that this doesn't affect the table in the database, only the query that displays data to the user. +Esta opción controla si los usuarios pueden ordenar los registros de la tabla o no. Tenga en cuenta que esto no afecta a la tabla de la base de datos, solo a la consulta que muestra los datos al usuario. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow filters +## Propiedades de la tabla > Permitir filtros -This option controls whether users are allowed to filter records in the table or not. Note that this doesn't affect the table in the database, only the query that displays data to the user. +Esta opción controla si los usuarios pueden filtrar los registros de la tabla o no. Tenga en cuenta que esto no afecta a la tabla de la base de datos, solo a la consulta que muestra los datos al usuario. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow saving data to CSV files +## Propiedades de la tabla > Permitir guardar datos en archivos CSV -If you check this option, users will see a Save button above the table view that allows them to save data as a CSV file (Comma-Separated values). +Si marca esta opción, los usuarios verán un botón Guardar sobre la vista de tabla que les permite guardar datos como un archivo CSV (valores separados por comas). -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow print-view +## Propiedades de la tabla > Permitir vista de impresión -This option controls whether users are allowed to view the table data as a printer-friendly page. +Esta opción controla si los usuarios pueden ver los datos de la tabla como una página imprimible. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow users to save filters +## Propiedades de la tabla > Permitir a los usuarios guardar filtros -If you check this option, users will see a Save button in the filters page. If they click this Save button, they will view some HTML code that they can copy and paste to any external web page. This HTML code creates a button linking users to the filtered table view (without having to redefine filters). TIP: Usually, you would want to allow this option temporarily till all users have determined which preset filters they want to save. Later on, you can disable this option and regenerate the code. +Si marca esta opción, los usuarios verán un botón Guardar en la página de filtros. Si hacen clic en este botón Guardar, verán un código HTML que pueden copiar y pegar en cualquier página web externa. Este código HTML crea un botón que enlaza a los usuarios con la vista de tabla filtrada (sin tener que redefinir los filtros). CONSEJO: Por lo general, querrá permitir esta opción temporalmente hasta que todos los usuarios hayan determinado qué filtros preestablecidos desean guardar. Más tarde, puede deshabilitar esta opción y regenerar el código. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Hide link in homepage +## Propiedades de la tabla > Ocultar enlace en la página de inicio -If checked, this table will not have a link to it in the homepage of the generated application. Usually used with the option 'Hide link in navigation menu' checked as well. This is useful for example if this is a child table and you want users to access it only from its parent table rather than directly through a link. +Si está marcada, esta tabla no tendrá un enlace a ella en la página de inicio de la aplicación generada. Generalmente se usa también con la opción 'Ocultar enlace en el menú de navegación' marcada. Esto es útil, por ejemplo, si se trata de una tabla secundaria y desea que los usuarios accedan a ella solo desde su tabla principal en lugar de directamente a través de un enlace. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow mass delete +## Propiedades de la tabla > Permitir eliminación masiva -This option controls whether users who have permission to delete records can delete multiple records at once. +Esta opción controla si los usuarios que tienen permiso para eliminar registros pueden eliminar varios registros a la vez. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Filter before showing table view +## Propiedades de la tabla > Filtrar antes de mostrar la vista de tabla -When this option is checked, users see the filters page first before seeing the table data. This is useful if you want users to search the table and display the search results to them. +Cuando esta opción está marcada, los usuarios ven primero la página de filtros antes de ver los datos de la tabla. Esto es útil si desea que los usuarios busquen en la tabla y les muestren los resultados de la búsqueda. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Hide link in navigation menu +## Propiedades de la tabla > Ocultar enlace en el menú de navegación -If checked, this table will not have a link to it in the navigation menu of the generated application. Usually used with the option 'Hide link in homepage' checked as well. This is useful for example if this is a child table and you want users to access it only from its parent table rather than directly through a link. +Si está marcada, esta tabla no tendrá un enlace a ella en el menú de navegación de la aplicación generada. Generalmente se usa también con la opción 'Ocultar enlace en la página de inicio' marcada. Esto es útil, por ejemplo, si se trata de una tabla secundaria y desea que los usuarios accedan a ella solo desde su tabla principal en lugar de directamente a través de un enlace. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Show record count in Homepage +## Propiedades de la tabla > Mostrar recuento de registros en la página de inicio -Check this option to display the count of accessible records of this table in the application homepage. +Marque esta opción para mostrar el recuento de registros accesibles de esta tabla en la página de inicio de la aplicación. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Table group +## Propiedades de la tabla > Grupo de tablas -Click this button to open the Table group dialog, where you can group tables for easier navigation. +Haga clic en este botón para abrir el cuadro de diálogo Grupo de tablas, donde puede agrupar tablas para facilitar la navegación. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Table template +## Propiedades de la tabla > Plantilla de tabla -Click this button to open the Table view template dialog, where you can configure layout options of the table view for this table. +Haga clic en este botón para abrir el cuadro de diálogo Plantilla de vista de tabla, donde puede configurar las opciones de diseño de la vista de tabla para esta tabla. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Detail view title +## Propiedades de la tabla > Título de la vista detallada -The title of the detail view form. The detail view form is where users can edit and add data to the table. +El título del formulario de vista detallada. El formulario de vista detallada es donde los usuarios pueden editar y agregar datos a la tabla. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Redirect after insert +## Propiedades de la tabla > Redirigir después de insertar -If you type a web address here, users will be sent to that address after they insert a new record. If you leave this box empty, users will be sent to the table view page. If you add the characters #ID# as part of the web address, they will get replaced by the primary key value of the newly inserted record. For example, these are valid addresses that you can put into the box: thanks.html +Si escribe una dirección web aquí, los usuarios serán enviados a esa dirección después de insertar un nuevo registro. Si deja este cuadro vacío, los usuarios serán enviados a la página de vista de tabla. Si agrega los caracteres #ID# como parte de la dirección web, se reemplazarán por el valor de la clave principal del registro recién insertado. Por ejemplo, estas son direcciones válidas que puede poner en el cuadro: gracias.html -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Display a link to children records from +## Propiedades de la tabla > Mostrar un enlace a los registros secundarios desde -If you have lookup fields in other tables whose parent table is set to the current table, you'll find them listed here as children tables. If you check any of the children tables listed here, users will see a link to that table displayed in the detail view when a record is selected from the current (parent) table. This link displays records of the child table related to the current parent record. For example, you may have an artists table, and a songs table. The songs table has an 'Artist' field whose parent table is the artists table. Using this feature, users who select an artist from the artists table will see a 'songs' link in the detail view of the selected artist. Clicking on that songs link, users will see all the songs that belong to the selected artist. +Si tiene campos de búsqueda en otras tablas cuya tabla principal está configurada como la tabla actual, los encontrará enumerados aquí como tablas secundarias. Si marca alguna de las tablas secundarias enumeradas aquí, los usuarios verán un enlace a esa tabla que se muestra en la vista detallada cuando se selecciona un registro de la tabla principal actual. Este enlace muestra los registros de la tabla secundaria relacionados con el registro principal actual. Por ejemplo, puede tener una tabla de artistas y una tabla de canciones. La tabla de canciones tiene un campo 'Artista' cuya tabla principal es la tabla de artistas. Con esta función, los usuarios que seleccionen un artista de la tabla de artistas verán un enlace 'canciones' en la vista detallada del artista seleccionado. Al hacer clic en ese enlace de canciones, los usuarios verán todas las canciones que pertenecen al artista seleccionado. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Default focus field +## Propiedades de la tabla > Campo de enfoque predeterminado -Specify which field (if any) is focused by default when the user opens the detail view. +Especifique qué campo (si corresponde) se enfoca de forma predeterminada cuando el usuario abre la vista detallada. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Enable detail view +## Propiedades de la tabla > Habilitar vista detallada -Use this option to control whether users can see the detail view or not. +Utilice esta opción para controlar si los usuarios pueden ver la vista detallada o no. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow detail print-view +## Propiedades de la tabla > Permitir vista de impresión detallada -If you check this option, users will see a 'Print preview' button in the detail view when selecting a record. Clicking that button would display a printer-friendly view of the selected record. +Si marca esta opción, los usuarios verán un botón 'Vista previa de impresión' en la vista detallada al seleccionar un registro. Al hacer clic en ese botón, se mostrará una vista imprimible del registro seleccionado. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Hide 'Save As Copy' when editing +## Propiedades de la tabla > Ocultar 'Guardar como copia' al editar -By default, when a user selects a record for editing, the 'Save As Copy' button is displayed in the detail view so that the user can save a copy of the selected field. Checking this option would disable this behavior and the 'Save As Copy' button won't be displayed. +De forma predeterminada, cuando un usuario selecciona un registro para editarlo, el botón 'Guardar como copia' se muestra en la vista detallada para que el usuario pueda guardar una copia del campo seleccionado. Marcar esta opción deshabilitaría este comportamiento y el botón 'Guardar como copia' no se mostraría. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Allow adding new records from Homepage +## Propiedades de la tabla > Permitir agregar nuevos registros desde la página de inicio -If you check this option, users with insert permission can directly add records to this table from the homepage, without having to navigate to the table and click the Add new button in there. +Si marca esta opción, los usuarios con permiso de inserción pueden agregar directamente registros a esta tabla desde la página de inicio, sin tener que navegar a la tabla y hacer clic en el botón Agregar nuevo allí. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Delete records even if they have children records +## Propiedades de la tabla > Eliminar registros incluso si tienen registros secundarios -The default behavior when a user tries to delete a record is that the AppGini-generated code will check to see if this record has one or more child records (records that have lookup fields pointing to the record to be deleted). If one or more children are found, the record is not deleted. +El comportamiento predeterminado cuando un usuario intenta eliminar un registro es que el código generado por AppGini verificará si este registro tiene uno o más registros secundarios (registros que tienen campos de búsqueda que apuntan al registro que se va a eliminar). Si se encuentran uno o más elementos secundarios, el registro no se elimina. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Display detail view in a separate page +## Propiedades de la tabla > Mostrar vista detallada en una página separada -If you check this option, the detail view (the form where users can add or insert records) will be displayed in a separate page instead of below the table view. +Si marca esta opción, la vista detallada (el formulario donde los usuarios pueden agregar o insertar registros) se mostrará en una página separada en lugar de debajo de la vista de tabla. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Keep action buttons visible while scrolling down +## Propiedades de la tabla > Mantener visibles los botones de acción al desplazarse hacia abajo -For long detail view forms, we recommend checking this option so that the action buttons (Save changes, Back, Print preview, Delete, .. etc) are always visible to the user, without having to scroll up/down to find them. +Para formularios de vista detallada largos, recomendamos marcar esta opción para que los botones de acción (Guardar cambios, Atrás, Vista previa de impresión, Eliminar, etc.) estén siempre visibles para el usuario, sin tener que desplazarse hacia arriba/abajo para encontrarlos. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Table technical documentation +## Propiedades de la tabla > Documentación técnica de la tabla -This section is where you can edit and preview the technical documentation of this table. The technical documentation is useful for adding notes and technical descriptions for your project, tables and fields. It's not visible to your app users, but can be viewable in the admin area if the option Show technical documentation page in the admin area under project properties is checked. +Esta sección es donde puede editar y obtener una vista previa de la documentación técnica de esta tabla. La documentación técnica es útil para agregar notas y descripciones técnicas para su proyecto, tablas y campos. No es visible para los usuarios de su aplicación, pero puede verse en el área de administración si la opción Mostrar página de documentación técnica en el área de administración en las propiedades del proyecto está marcada. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Edit Technical Documentation +## Propiedades de la tabla > Editar documentación técnica -Click this button to open the technical documentation editor for this table. +Haga clic en este botón para abrir el editor de documentación técnica para esta tabla. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Technical documentation preview +## Propiedades de la tabla > Vista previa de la documentación técnica -Here you can see a preview of the technical documentation for this table. +Aquí puede ver una vista previa de la documentación técnica para esta tabla. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Parent/Children settings +## Propiedades de la tabla > Configuración de padres/hijos -This feature is enabled only if the current table has children tables. Displays settings for showing the children records in the detail view. +Esta función solo está habilitada si la tabla actual tiene tablas secundarias. Muestra la configuración para mostrar los registros secundarios en la vista detallada. -[back to top](#map-link) +[volver arriba](#map-link) -## Table properties > Table icon +## Propiedades de la tabla > Icono de tabla -Click this icon to select a new icon for the table. The table icon is displayed in the homepage and the navigation menu of the generated application. +Haga clic en este icono para seleccionar un nuevo icono para la tabla. El icono de la tabla se muestra en la página de inicio y en el menú de navegación de la aplicación generada. -[back to top](#map-link) +[volver arriba](#map-link) -## Search box +## Cuadro de búsqueda -You can use this box to search for a specific table/field by typing its name or part of it then clicking the lens icon. Click it again to move to the next matching table/field. +Puede usar este cuadro para buscar una tabla/campo específico escribiendo su nombre o parte de él y luego haciendo clic en el icono de la lente. Vuelva a hacer clic para pasar a la siguiente tabla/campo coincidente. -[back to top](#map-link) +[volver arriba](#map-link) -## File menu +## Menú Archivo -Includes commands for starting a new project, opening an existing one, importing from an existing MySQL database or a CSV file, and saving current project. +Incluye comandos para iniciar un nuevo proyecto, abrir uno existente, importar desde una base de datos MySQL existente o un archivo CSV, y guardar el proyecto actual. -[back to top](#map-link) +[volver arriba](#map-link) -## Tables menu +## Menú Tablas -Includes commands for adding and deleting tables and fields from the current project. +Incluye comandos para agregar y eliminar tablas y campos del proyecto actual. -[back to top](#map-link) +[volver arriba](#map-link) -## Project menu +## Menú Proyecto -Includes commands for generating the web application, and for changing the application theme. +Incluye comandos para generar la aplicación web y para cambiar el tema de la aplicación. -[back to top](#map-link) +[volver arriba](#map-link) -## Add-ons menu +## Menú Complementos -Open this menu to see a list of available AppGini add-ons and plugins that can enhance your project and add more functions to it. +Abra este menú para ver una lista de complementos y plugins de AppGini disponibles que pueden mejorar su proyecto y agregarle más funciones. -[back to top](#map-link) +[volver arriba](#map-link) -## Help menu +## Menú Ayuda -Includes various help resources +Incluye varios recursos de ayuda. -[back to top](#map-link) +[volver arriba](#map-link) -## Copy +## Copiar -Copies the selected table or field to the clipboard +Copia la tabla o el campo seleccionado al portapapeles. -[back to top](#map-link) +[volver arriba](#map-link) -## Paste +## Pegar -Pastes a copy of the field or table in the clipboard to the project +Pega una copia del campo o tabla del portapapeles al proyecto. -[back to top](#map-link) +[volver arriba](#map-link) -## Toggle Highlight +## Alternar resaltado -Marks/unmarks the current table or field with a yellow background for easily returning to it later on. +Marca/desmarca la tabla o campo actual con un fondo amarillo para volver fácilmente a él más tarde. -[back to top](#map-link) +[volver arriba](#map-link) -## Activate/deactivate help for toolbar icons +## Activar/desactivar ayuda para los iconos de la barra de herramientas -Click this icon to switch to help mode where clicking any icon would show its help rather than execute its action. Click again to switch to normal mode. - -[back to top](#map-link) +Haga clic en este icono para cambiar al modo de ayuda, donde al hacer clic en cualquier icono se mostrará su ayuda en lugar de ejecutar su acción. Vuelva a hacer clic para cambiar al modo normal. +[volver arriba](#map-link) diff --git a/pages/working-with-projects/understanding-lookup-fields.md b/pages/working-with-projects/understanding-lookup-fields.md index 223e6d1..84c2d34 100644 --- a/pages/working-with-projects/understanding-lookup-fields.md +++ b/pages/working-with-projects/understanding-lookup-fields.md @@ -1,138 +1,137 @@ --- -title: Understanding lookup fields -linkTitle: Lookup fields +title: Comprensión de los campos de búsqueda +linkTitle: Campos de búsqueda slug: help/working-with-projects/understanding-lookup-fields -keywords: lookup fields, foreign keys, parent table, child table, master detail, parent children settings, radio buttons, options list -description: Lookup fields are how AppGini links 2 fields from 2 tables together. This page explains how to set up lookup fields, how they appear in the generated application, and how to configure parent/children settings. +keywords: campos de búsqueda, claves externas, tabla principal, tabla secundaria, maestro detalle, configuración de padres e hijos, botones de opción, lista de opciones +description: Los campos de búsqueda son la forma en que AppGini vincula 2 campos de 2 tablas. Esta página explica cómo configurar campos de búsqueda, cómo aparecen en la aplicación generada y cómo configurar los ajustes de padres/hijos. --- -# Understanding lookup fields +# Comprensión de los campos de búsqueda -## Foreign keys in relational databases +## Claves externas en bases de datos relacionales -In the world of relational databases, a foreign key is a field in a table that uniquely identifies a row in another table. -For example, let's say we have a table for storing orders and another table for storing customers. Each order is placed by a customer, so the orders table should have a field that uniquely identifies the customer who placed the order. This field is called a foreign key, and it links the orders table to the customers table. +En el mundo de las bases de datos relacionales, una clave externa es un campo en una tabla que identifica de forma única una fila en otra tabla. +Por ejemplo, digamos que tenemos una tabla para almacenar pedidos y otra tabla para almacenar clientes. Cada pedido es realizado por un cliente, por lo que la tabla de pedidos debe tener un campo que identifique de forma única al cliente que realizó el pedido. Este campo se llama clave externa y vincula la tabla de pedidos con la tabla de clientes. -![Example ER diagram showing a foreign key linking orders to customers](https://cdn.bigprof.com/images/simple-er-diagram.png "Example ER diagram showing a foreign key linking orders to customers") +![Diagrama ER de ejemplo que muestra una clave externa que vincula pedidos con clientes](https://cdn.bigprof.com/images/simple-er-diagram.png "Diagrama ER de ejemplo que muestra una clave externa que vincula pedidos con clientes") -One might ask, why not just store the customer name in the orders table? The answer is that storing the customer name in the orders table would lead to data redundancy. For example, if a customer changes their name, we would have to update all orders placed by that customer. This is not only cumbersome but also error-prone. By using a foreign key, we only store the customer ID in the orders table, and the customer name is stored in the customers table. This way, if a customer changes their name, we only need to update the customers table, and all orders placed by that customer would automatically reflect the new name. +Uno podría preguntarse, ¿por qué no simplemente almacenar el nombre del cliente en la tabla de pedidos? La respuesta es que almacenar el nombre del cliente en la tabla de pedidos conduciría a la redundancia de datos. Por ejemplo, si un cliente cambia su nombre, tendríamos que actualizar todos los pedidos realizados por ese cliente. Esto no solo es engorroso sino también propenso a errores. Al usar una clave externa, solo almacenamos el ID del cliente en la tabla de pedidos, y el nombre del cliente se almacena en la tabla de clientes. De esta manera, si un cliente cambia su nombre, solo necesitamos actualizar la tabla de clientes, y todos los pedidos realizados por ese cliente reflejarían automáticamente el nuevo nombre. -The above concept is referred to as ***normalization*** in database design. It's a set of rules that help us design databases in a way that minimizes data redundancy and ensures data integrity. +El concepto anterior se conoce como ***normalización*** en el diseño de bases de datos. Es un conjunto de reglas que nos ayudan a diseñar bases de datos de una manera que minimice la redundancia de datos y garantice la integridad de los datos. -## Lookup fields in AppGini +## Campos de búsqueda en AppGini -AppGini implements the concept of foreign keys using ***lookup fields***. Just like foreign keys in relational databases, lookup fields in AppGini link 2 fields from 2 tables together. -AppGini adds some interesting features to lookup fields, such as displaying the linked data as a drop-down menu or radio buttons, and automatically copying child records when copying parent records. -Also, AppGini allows you to configure parent/children settings to display child records below the detail view of the parent record, and to display the count of child records in the table view of the parent table. +AppGini implementa el concepto de claves externas utilizando ***campos de búsqueda***. Al igual que las claves externas en las bases de datos relacionales, los campos de búsqueda en AppGini vinculan 2 campos de 2 tablas. +AppGini agrega algunas características interesantes a los campos de búsqueda, como mostrar los datos vinculados como un menú desplegable o botones de opción, y copiar automáticamente los registros secundarios al copiar los registros principales. +Además, AppGini le permite configurar los ajustes de padres/hijos para mostrar los registros secundarios debajo de la vista detallada del registro principal y para mostrar el recuento de registros secundarios en la vista de tabla de la tabla principal. -We'll discuss these features in more detail in the following sections. +Discutiremos estas características con más detalle en las siguientes secciones. -The following screenshot from the [orders table](https://northwind.demos.appgini.com/orders_view.php) of the [Northwind online demo](https://northwind.demos.appgini.com/) shows a list of orders. The "Customer" field is a lookup field that links each order to a customer in the customers table. The "Employee" field is another lookup field that links each order to an employee in the employees table. +La siguiente captura de pantalla de la [tabla de pedidos](https://northwind.demos.appgini.com/orders_view.php) de la [demostración en línea de Northwind](https://northwind.demos.appgini.com/) muestra una lista de pedidos. El campo "Cliente" es un campo de búsqueda que vincula cada pedido a un cliente en la tabla de clientes. El campo "Empleado" es otro campo de búsqueda que vincula cada pedido a un empleado en la tabla de empleados. -![Lookup fields in the orders table of the Northwind online demo](https://cdn.bigprof.com/images/lookup-fields-displayed-in-table-view.png "Lookup fields in the orders table of the Northwind online demo") +![Campos de búsqueda en la tabla de pedidos de la demostración en línea de Northwind](https://cdn.bigprof.com/images/lookup-fields-displayed-in-table-view.png "Campos de búsqueda en la tabla de pedidos de la demostración en línea de Northwind") -You can also see the "Order items" column at the right of the table in the above screenshot. This column displays the count of order items for each order. And it also allows you to add new order items directly from the table view of orders. This is a feature that can be enabled in AppGini by configuring parent/children settings, as we'll see later in this page. +También puede ver la columna "Artículos del pedido" a la derecha de la tabla en la captura de pantalla anterior. Esta columna muestra el recuento de artículos de pedido para cada pedido. Y también le permite agregar nuevos artículos de pedido directamente desde la vista de tabla de pedidos. Esta es una característica que se puede habilitar en AppGini configurando los ajustes de padres/hijos, como veremos más adelante en esta página. -## Configuring lookup fields in AppGini +## Configuración de campos de búsqueda en AppGini -![Lookup field tab in AppGini](https://cdn.bigprof.com/images/appgini-lookup-tab-24.14.png) +![Pestaña de campo de búsqueda en AppGini](https://cdn.bigprof.com/images/appgini-lookup-tab-24.14.png) -The above screenshot shows the lookup field tab in the field properties pane of AppGini. This tab is where you configure a field as a lookup field. Here, we are configuring the "Customer" field in the orders table to be a lookup field that links to the customers table. Let's review the options in the lookup field tab: +La captura de pantalla anterior muestra la pestaña de campo de búsqueda en el panel de propiedades del campo de AppGini. Esta pestaña es donde configura un campo como un campo de búsqueda. Aquí, estamos configurando el campo "Cliente" en la tabla de pedidos para que sea un campo de búsqueda que se vincule a la tabla de clientes. Revisemos las opciones en la pestaña de campo de búsqueda: -* **Parent table**: This is the table that contains the source data for the lookup field. In our example, the parent table is the customers table. -* **Parent caption field part 1**: This is the field in the parent table that contains the data to be displayed in the lookup field. In our example, the parent caption field is the "CompanyName" field in the customers table. -* **Parent caption field part 2**: This is an optional field that can be joined to the first field to display more data in the lookup field. For example, you could join the "FirstName" and "LastName" fields in the customers table to display the full name in the lookup field. -* **Separator**: This is the character (or characters) that separates the data from the first and second fields in the lookup field. For example, you could use a space character as a separator to display the full name as "John Doe" instead of "JohnDoe". -* **Show as radio buttons**: If checked, the lookup field will be displayed as radio buttons instead of a drop-down menu. This is useful when you have a small number of options to choose from. - ![A lookup field displayed as radio buttons in the detail view](https://cdn.bigprof.com/appgini-desktop/help/understanding-lookup-fields-4.png) -* **Inherit access permissions**: If checked, the lookup field will inherit the access permissions of the parent table. This is useful when you want to restrict the list of options in the lookup field based on the user's permissions in the parent table. -* **Link to parent record in detail view**: This drop-down menu allows you to display a link to the parent record in the detail view of the child record. This is useful when you want to quickly navigate to the parent record from the child record. - The following options are available: - * **Disabled**: No link will be displayed. - * **Open parent record in a modal popup window**: The parent record will be displayed in a modal popup window. - * **Open parent record in the same page**: The parent record will be displayed in the same page, navigating away from the child record. - * **Open parent record in a new window**: The parent record will be displayed in a new browser tab or window. +* **Tabla principal**: Esta es la tabla que contiene los datos de origen para el campo de búsqueda. En nuestro ejemplo, la tabla principal es la tabla de clientes. +* **Parte 1 del campo de título principal**: Este es el campo de la tabla principal que contiene los datos que se mostrarán en el campo de búsqueda. En nuestro ejemplo, el campo de título principal es el campo "CompanyName" en la tabla de clientes. +* **Parte 2 del campo de título principal**: Este es un campo opcional que se puede unir al primer campo para mostrar más datos en el campo de búsqueda. Por ejemplo, podría unir los campos "FirstName" y "LastName" en la tabla de clientes para mostrar el nombre completo en el campo de búsqueda. +* **Separador**: Este es el carácter (o caracteres) que separa los datos del primer y segundo campo en el campo de búsqueda. Por ejemplo, podría usar un carácter de espacio como separador para mostrar el nombre completo como "John Doe" en lugar de "JohnDoe". +* **Mostrar como botones de opción**: Si está marcado, el campo de búsqueda se mostrará como botones de opción en lugar de un menú desplegable. Esto es útil cuando tiene una pequeña cantidad de opciones para elegir. + ![Un campo de búsqueda que se muestra como botones de opción en la vista detallada](https://cdn.bigprof.com/appgini-desktop/help/understanding-lookup-fields-4.png) +* **Heredar permisos de acceso**: Si está marcado, el campo de búsqueda heredará los permisos de acceso de la tabla principal. Esto es útil cuando desea restringir la lista de opciones en el campo de búsqueda según los permisos del usuario en la tabla principal. +* **Enlace al registro principal en la vista detallada**: Este menú desplegable le permite mostrar un enlace al registro principal en la vista detallada del registro secundario. Esto es útil cuando desea navegar rápidamente al registro principal desde el registro secundario. + Están disponibles las siguientes opciones: + * **Deshabilitado**: No se mostrará ningún enlace. + * **Abrir registro principal en una ventana emergente modal**: El registro principal se mostrará en una ventana emergente modal. + * **Abrir registro principal en la misma página**: El registro principal se mostrará en la misma página, navegando fuera del registro secundario. + * **Abrir registro principal en una nueva ventana**: El registro principal se mostrará en una nueva pestaña o ventana del navegador. -To set a field as a lookup field in AppGini, create a new field and, in its properties pane, go to the "Lookup field" tab, as displayed in the above screenshot. From the "Parent table" drop-down, select the table that contains the source data. From the "Parent caption field part 1" drop-down, select the source field. Set other options as needed, as described above. +Para establecer un campo como un campo de búsqueda en AppGini, cree un nuevo campo y, en su panel de propiedades, vaya a la pestaña "Campo de búsqueda", como se muestra en la captura de pantalla anterior. En el menú desplegable "Tabla principal", seleccione la tabla que contiene los datos de origen. En el menú desplegable "Parte 1 del campo de título principal", seleccione el campo de origen. Establezca otras opciones según sea necesario, como se describe anteriormente. -> **Note**: AppGini will change the data type of the lookup field to be the same as that of the primary key of the parent table. This is normal behavior and you shouldn't alter it. +> **Nota**: AppGini cambiará el tipo de datos del campo de búsqueda para que sea el mismo que el de la clave principal de la tabla principal. Este es un comportamiento normal y no debe alterarlo. -## How would the lookup field appear in the detail view of the generated application? +## ¿Cómo aparecería el campo de búsqueda en la vista detallada de la aplicación generada? -![Lookup field in the detail view of the generated application](https://cdn.bigprof.com/appgini-desktop/help/understanding-lookup-fields-2.png) +![Campo de búsqueda en la vista detallada de la aplicación generada](https://cdn.bigprof.com/appgini-desktop/help/understanding-lookup-fields-2.png) -The above screenshot shows the detail view of the products table as generated by AppGini. The detail view is where users can edit records of the table. The "Supplier" and "Category" fields are lookup fields that bring their data from the suppliers and products tables, respectively. This data is represented in a drop-down menu for each field. +La captura de pantalla anterior muestra la vista detallada de la tabla de productos generada por AppGini. La vista detallada es donde los usuarios pueden editar los registros de la tabla. Los campos "Proveedor" y "Categoría" son campos de búsqueda que obtienen sus datos de las tablas de proveedores y productos, respectivamente. Estos datos se representan en un menú desplegable para cada campo. -If you choose to display the lookup field as radio buttons, the detail view would look like this: +Si elige mostrar el campo de búsqueda como botones de opción, la vista detallada se vería así: -![A lookup field displayed as radio buttons in the detail view](https://cdn.bigprof.com/appgini-desktop/help/understanding-lookup-fields-4.png) +![Un campo de búsqueda que se muestra como botones de opción en la vista detallada](https://cdn.bigprof.com/appgini-desktop/help/understanding-lookup-fields-4.png) -## Parent/Children settings +## Configuración de padres/hijos <img src="https://cdn.bigprof.com/screencasts/parent-children-settings-button.png" style="float: right; margin-left: 1rem;"> -When you configure a field as a lookup field, the parent table you specify for that field can, in turn, be configured to show some special behavior. In AppGini, if you click the parent table, you should see a button labeled Parent/Children settings, like the one to the right. +Cuando configura un campo como un campo de búsqueda, la tabla principal que especifique para ese campo puede, a su vez, configurarse para mostrar un comportamiento especial. En AppGini, si hace clic en la tabla principal, debería ver un botón con la etiqueta Configuración de padres/hijos, como el de la derecha. -Clicking that button displays the Parent/Children settings window - as shown below, which allows you to enable displaying child records below the detail view of the parent record. +Al hacer clic en ese botón, se muestra la ventana Configuración de padres/hijos, como se muestra a continuación, que le permite habilitar la visualización de registros secundarios debajo de la vista detallada del registro principal. -![Parent/Children settings window in AppGini](https://cdn.bigprof.com/appgini-desktop/help/appgini-23.15-parent-children-settings.png) +![Ventana de configuración de padres/hijos en AppGini](https://cdn.bigprof.com/appgini-desktop/help/appgini-23.15-parent-children-settings.png) -This window lists all child tables of the current table (that is, tables that contains a lookup field where the parent table is set to the current table). Select a child table from the grid at the left to configure its related behavior in the parent table. An example of parent and child tables is the orders and order_details tables. The orders table is a parent table of order_details. Every order saved in the orders table would have one or more items saved in the order_details table. +Esta ventana enumera todas las tablas secundarias de la tabla actual (es decir, tablas que contienen un campo de búsqueda donde la tabla principal está configurada como la tabla actual). Seleccione una tabla secundaria de la cuadrícula de la izquierda para configurar su comportamiento relacionado en la tabla principal. Un ejemplo de tablas principales y secundarias son las tablas de pedidos y detalles_pedido. La tabla de pedidos es una tabla principal de detalles_pedido. Cada pedido guardado en la tabla de pedidos tendría uno o más artículos guardados en la tabla de detalles_pedido. -* **Show tab below detail view** would display a list of child records below the detail view when you select a parent record. For example, this is how an order looks like in the detail view, where the order items are listed at the bottom. +* **Mostrar pestaña debajo de la vista detallada** mostraría una lista de registros secundarios debajo de la vista detallada cuando seleccione un registro principal. Por ejemplo, así es como se ve un pedido en la vista detallada, donde los artículos del pedido se enumeran en la parte inferior. - ![Child records displayed below the detail view of a parent record](https://cdn.bigprof.com/screencasts/orders-table-order-details-child-records.png) + ![Registros secundarios que se muestran debajo de la vista detallada de un registro principal](https://cdn.bigprof.com/screencasts/orders-table-order-details-child-records.png) - * **Show icon** would display the child table icon to the left of the tab name. This is useful when you have many child tables and you want to quickly identify the child table you're looking at. - * **Auto close modal after saving changes** would automatically close the modal window after saving changes to a child record. This is useful when you have many child records to edit and you want to quickly navigate between them. + * **Mostrar icono** mostraría el icono de la tabla secundaria a la izquierda del nombre de la pestaña. Esto es útil cuando tiene muchas tablas secundarias y desea identificar rápidamente la tabla secundaria que está viendo. + * **Cerrar automáticamente el modal después de guardar los cambios** cerraría automáticamente la ventana modal después de guardar los cambios en un registro secundario. Esto es útil cuando tiene muchos registros secundarios para editar y desea navegar rápidamente entre ellos. -* **Copy child records when copying parent** would copy child records if the user copies the parent record by clicking the **Save As Copy** button. The lookup field in the copied child records would be automatically set to the new parent record. This is a very handy feature for scenarios like duplicating an order and all its order items, a product, and all the items in its bill of materials, ... etc. It saves users the time to manually add child records from scratch. +* **Copiar registros secundarios al copiar el principal** copiaría los registros secundarios si el usuario copia el registro principal haciendo clic en el botón **Guardar como copia**. El campo de búsqueda en los registros secundarios copiados se establecería automáticamente en el nuevo registro principal. Esta es una función muy útil para escenarios como duplicar un pedido y todos sus artículos de pedido, un producto y todos los artículos de su lista de materiales, etc. Ahorra a los usuarios el tiempo de agregar manualmente registros secundarios desde cero. - > Copying child records requires *cURL PHP extension* to be installed and enabled on your server. + > Copiar registros secundarios requiere que la *extensión PHP cURL* esté instalada y habilitada en su servidor. - As of [AppGini 5.81](https://bigprof.com/appgini/release-log), a new configuration parameter, `$host`, was added in `config.php`. The value of this parameter is set by default to the host name of your server as automatically detected by PHP. However, if copying of child records is not working (and curl PHP extension is enabled), you might need to check and change this value manually by editing the config file. PHP might not detect the internal host name correctly in cases where servers are behind NAT or load balancers, Docker containers, or similar network configurations. + A partir de [AppGini 5.81](https://bigprof.com/appgini/release-log), se agregó un nuevo parámetro de configuración, `$host`, en `config.php`. El valor de este parámetro se establece de forma predeterminada en el nombre de host de su servidor detectado automáticamente por PHP. Sin embargo, si la copia de registros secundarios no funciona (y la extensión PHP curl está habilitada), es posible que deba verificar y cambiar este valor manualmente editando el archivo de configuración. Es posible que PHP no detecte correctamente el nombre de host interno en los casos en que los servidores se encuentren detrás de NAT o equilibradores de carga, contenedores Docker o configuraciones de red similares. -* **Display child info in the table view**. Starting with AppGini 23.15, the Parent/Children settings dialog includes the option **Show count of children in table view**. Enabling this option displays the count of child records in the table view. You can also add new child records directly from the table view by enabling the option **Add new children from table view**. The screenshot below shows how both options would be displayed in the table view of the orders table, showing the count of order items in each order, and allowing users to add new items directly from the table view of orders. +* **Mostrar información secundaria en la vista de tabla**. A partir de AppGini 23.15, el cuadro de diálogo Configuración de padres/hijos incluye la opción **Mostrar recuento de hijos en la vista de tabla**. Al habilitar esta opción, se muestra el recuento de registros secundarios en la vista de tabla. También puede agregar nuevos registros secundarios directamente desde la vista de tabla habilitando la opción **Agregar nuevos hijos desde la vista de tabla**. La captura de pantalla a continuación muestra cómo se mostrarían ambas opciones en la vista de tabla de la tabla de pedidos, mostrando el recuento de artículos de pedido en cada pedido y permitiendo a los usuarios agregar nuevos artículos directamente desde la vista de tabla de pedidos. - ![Displaying child info in the table view](https://cdn.bigprof.com/appgini-desktop/help/child-info-column-in-table-view.png) + ![Visualización de información secundaria en la vista de tabla](https://cdn.bigprof.com/appgini-desktop/help/child-info-column-in-table-view.png) - *See also the related [video tutorial](#displaying-child-info-count-add-new-in-the-table-view)* + *Consulte también el [video tutorial](#visualización-de-información-secundaria-recuento--agregar-nuevo-en-la-vista-de-tabla) relacionado* -## Related screencasts +## Videotutoriales relacionados -### AppGini lookup fields and master detail pages +### Campos de búsqueda de AppGini y páginas maestro-detalle -The following video tutorial demonstrates how to set up lookup fields in AppGini and how to configure parent/children settings to display child records below the detail view of the parent record. +El siguiente video tutorial demuestra cómo configurar campos de búsqueda en AppGini y cómo configurar los ajustes de padres/hijos para mostrar los registros secundarios debajo de la vista detallada del registro principal. <iframe width="854" height="464" src="https://www.youtube.com/embed/XQh-9S7yd34" frameborder="0" allowfullscreen=""></iframe> -### Using auto-fill lookup fields to automatically populate fields from another table +### Uso de campos de búsqueda de autocompletar para completar automáticamente campos de otra tabla -Auto-fill lookup fields are a special type of lookup fields that is automatically filled with data from the parent table based -on the value of another lookup field. The following video tutorial demonstrates how to set up auto-fill lookup fields in AppGini. +Los campos de búsqueda de autocompletar son un tipo especial de campos de búsqueda que se completan automáticamente con datos de la tabla principal según +el valor de otro campo de búsqueda. El siguiente video tutorial demuestra cómo configurar campos de búsqueda de autocompletar en AppGini. <iframe width="854" height="464" src="https://www.youtube.com/embed/bzAWn_YybxY" frameborder="0" allowfullscreen=""></iframe> -### Creating cascading drop-downs with AppGini +### Creación de menús desplegables en cascada con AppGini -It's possible to set up a lookup field to filter its options based on the value of another lookup field. For example, you could set up a lookup field for "Country" and another lookup field for "City". The "City" field would only show cities in the selected country. The following video tutorial demonstrates how to set up cascading drop-downs in AppGini. +Es posible configurar un campo de búsqueda para filtrar sus opciones según el valor de otro campo de búsqueda. Por ejemplo, podría configurar un campo de búsqueda para "País" y otro campo de búsqueda para "Ciudad". El campo "Ciudad" solo mostraría las ciudades del país seleccionado. El siguiente video tutorial demuestra cómo configurar menús desplegables en cascada en AppGini. <iframe width="854" height="464" src="https://www.youtube.com/embed/ySABQLupBRs" frameborder="0" allowfullscreen=""></iframe> -### Displaying child info (count + add new) in the table view +### Visualización de información secundaria (recuento + agregar nuevo) en la vista de tabla <video style="width: 100%; height: auto;" controls> <source src="https://cdn.bigprof.com/screencasts/child-info-in-parent-table-view.mp4" type="video/mp4"> -Your browser does not support the video tag. +Su navegador no es compatible con la etiqueta de video. </video> -## Querying lookup fields in SQL +## Consulta de campos de búsqueda en SQL -Although lookup fields display data from the parent table in the generated application, the actual data stored in the database is the primary key of the parent record. For example, the "Customer" field in the orders table stores the customer ID from the customers table. This is how foreign keys work in relational databases. If you need to query the data stored in a lookup field, you should join the parent table to the child table using the primary key stored in the lookup field. +Aunque los campos de búsqueda muestran datos de la tabla principal en la aplicación generada, los datos reales almacenados en la base de datos son la clave principal del registro principal. Por ejemplo, el campo "Cliente" en la tabla de pedidos almacena el ID del cliente de la tabla de clientes. Así es como funcionan las claves externas en las bases de datos relacionales. Si necesita consultar los datos almacenados en un campo de búsqueda, debe unir la tabla principal a la tabla secundaria utilizando la clave principal almacenada en el campo de búsqueda. -This topic is discussed in more detail in the [using lookup fields in calculations](../advanced-topics/hooks/using-lookup-fields-in-calculations.md) page. +Este tema se analiza con más detalle en la página [uso de campos de búsqueda en cálculos](../advanced-topics/hooks/using-lookup-fields-in-calculations.md). -> **Update:** As of [AppGini 24.11](https://bigprof.com/appgini/release-log), the admin user can access the joined SQL query of any table by clicking the "SQL" button in the table view. To enable this feature, check the option **Allow admin access to table view SQL** under the **Security settings** section of the app properties in AppGini. +> **Actualización:** A partir de [AppGini 24.11](https://bigprof.com/appgini/release-log), el usuario administrador puede acceder a la consulta SQL unida de cualquier tabla haciendo clic en el botón "SQL" en la vista de tabla. Para habilitar esta función, marque la opción **Permitir acceso de administrador a SQL de vista de tabla** en la sección **Configuración de seguridad** de las propiedades de la aplicación en AppGini. > -> ![Display table view SQL query](https://cdn.bigprof.com/images/allow-admin-show-sql.gif) - +> ![Mostrar consulta SQL de vista de tabla](https://cdn.bigprof.com/images/allow-admin-show-sql.gif) diff --git a/pages/working-with-projects/working-with-styles.md b/pages/working-with-projects/working-with-styles.md index 2bdc7ff..88bd541 100644 --- a/pages/working-with-projects/working-with-styles.md +++ b/pages/working-with-projects/working-with-styles.md @@ -1,24 +1,20 @@ --- -title: Working with styles -linkTitle: Working with styles +title: Trabajar con estilos +linkTitle: Trabajar con estilos slug: help/working-with-projects/working-with-styles --- -# Working with styles +# Trabajar con estilos -AppGini offers you the flexibility to control the look of the generated -application using CSS (Cascading Style Sheets). Click on the -**Application theme** icon on the tool bar or from the Project menu -select **Themes** . The window below will appear. +AppGini le ofrece la flexibilidad de controlar el aspecto de la aplicación generada +mediante CSS (Hojas de estilo en cascada). Haga clic en el icono +**Tema de la aplicación** de la barra de herramientas o, en el menú Proyecto, +seleccione **Temas**. Aparecerá la siguiente ventana. +![Ventana de temas de la aplicación](https://cdn.bigprof.com/appgini-desktop/help/application-theme-dialog.png "Ventana de temas de la aplicación") -![Application themes window](https://cdn.bigprof.com/appgini-desktop/help/application-theme-dialog.png "Application themes window") - -You can select a theme from the drop-down menu at the bottom. - -### Preview in web browser - -You can click on this button to preview the selected theme in your web browser. This will display a page from the Northwind demo, with the selected theme applied to it. - +Puede seleccionar un tema en el menú desplegable de la parte inferior. +### Vista previa en el navegador web +Puede hacer clic en este botón para obtener una vista previa del tema seleccionado en su navegador web. Se mostrará una página de la demostración de Northwind, con el tema seleccionado aplicado. diff --git a/pages/working-with-projects/working-with-table-fields.md b/pages/working-with-projects/working-with-table-fields.md index 2683461..9d10d21 100644 --- a/pages/working-with-projects/working-with-table-fields.md +++ b/pages/working-with-projects/working-with-table-fields.md @@ -1,37 +1,35 @@ --- -title: Working with table fields -linkTitle: Working with fields +title: Trabajar con campos de tabla +linkTitle: Trabajar con campos slug: help/working-with-projects/working-with-table-fields --- -# Working with table fields +# Trabajar con campos de tabla -## How can I add a field to a project? +## ¿Cómo puedo agregar un campo a un proyecto? -Each table in your AppGini project would include at least one field. To create a new field, select a table from the Project Browser and then click the 'New Field' tool bar icon or open the Tables menu > Fields > New Field. You might also use CTRL + F keyboard shortcut. +Cada tabla en su proyecto AppGini incluiría al menos un campo. Para crear un nuevo campo, seleccione una tabla del Explorador de proyectos y luego haga clic en el icono de la barra de herramientas 'Nuevo campo' o abra el menú Tablas > Campos > Nuevo campo. También puede usar el atajo de teclado CTRL + F. -![New Field](https://cdn.bigprof.com/appgini-desktop/help/appgini-new-field.png) +![Nuevo campo](https://cdn.bigprof.com/appgini-desktop/help/appgini-new-field.png) -## How can I rename a field? +## ¿Cómo puedo cambiar el nombre de un campo? -Select the field by clicking on it in the Project Browser (if it is not already highlighted) and click on its name or press F2. A cursor will appear allowing you to rename the field. +Seleccione el campo haciendo clic en él en el Explorador de proyectos (si aún no está resaltado) y haga clic en su nombre o presione F2. Aparecerá un cursor que le permitirá cambiar el nombre del campo. -> **Tip:** AppGini handles some field names in a special manner. For example, if you name your field "id", AppGini will automatically set it as an auto-increment primary key integer field. If you name it "comments", AppGini will set it as a text field that is editable in a rich text box. Special names also include "date", "*_date" (that is any name ending in "_date"), "description", "photo", "image" and "email". +> **Consejo:** AppGini maneja algunos nombres de campo de manera especial. Por ejemplo, si nombra su campo "id", AppGini lo establecerá automáticamente como un campo entero de clave principal de incremento automático. Si lo nombra "comentarios", AppGini lo establecerá como un campo de texto que se puede editar en un cuadro de texto enriquecido. Los nombres especiales también incluyen "fecha", "*_fecha" (es decir, cualquier nombre que termine en "_fecha"), "descripción", "foto", "imagen" y "correo electrónico". -## Can I change the order of fields in a table? +## ¿Puedo cambiar el orden de los campos en una tabla? -Yes. Click on a field in the left panel, and then click on the down or up arrow in the toolbar to move the field up or down. If you prefer to use the keyboard, select the field and press Ctrl+u (move the field up) or Ctrl+d (move the field down). +Sí. Haga clic en un campo en el panel izquierdo y luego haga clic en la flecha hacia abajo o hacia arriba en la barra de herramientas para mover el campo hacia arriba o hacia abajo. Si prefiere usar el teclado, seleccione el campo y presione Ctrl+u (mover el campo hacia arriba) o Ctrl+d (mover el campo hacia abajo). -## Can I clone/copy a field? +## ¿Puedo clonar/copiar un campo? -You can copy a field from another AppGini project or from the same project using the Copy and Paste icons from the top toolbar. +Puede copiar un campo de otro proyecto de AppGini o del mismo proyecto utilizando los iconos Copiar y Pegar de la barra de herramientas superior. -## How can I delete a field? +## ¿Cómo puedo eliminar un campo? -Select the field by clicking on it in the Project Browser and press the Delete button. - -## What about field properties? - -In AppGini, click with the mouse on any property and press F1 to view context help explaining the property. +Seleccione el campo haciendo clic en él en el Explorador de proyectos y presione el botón Eliminar. +## ¿Qué pasa con las propiedades del campo? +En AppGini, haga clic con el mouse en cualquier propiedad y presione F1 para ver la ayuda contextual que explica la propiedad. diff --git a/pages/working-with-projects/working-with-tables.md b/pages/working-with-projects/working-with-tables.md index 5b3e0ff..256015f 100644 --- a/pages/working-with-projects/working-with-tables.md +++ b/pages/working-with-projects/working-with-tables.md @@ -1,34 +1,33 @@ --- -title: Working with tables -linkTitle: Working with tables +title: Trabajar con tablas +linkTitle: Trabajar con tablas slug: help/work-with-projects/working-with-tables --- -# Working with tables +# Trabajar con tablas -## How can I add a table to a project? +## ¿Cómo puedo agregar una tabla a un proyecto? -Make sure you have an open project, and click on the 'New Table' icon on the tool bar, or from the Tables menu, select New Table. +Asegúrese de tener un proyecto abierto y haga clic en el icono 'Nueva tabla' en la barra de herramientas, o en el menú Tablas, seleccione Nueva tabla. -![New Table](https://cdn.bigprof.com/appgini-desktop/help/appgini-new-table.png) +![Nueva tabla](https://cdn.bigprof.com/appgini-desktop/help/appgini-new-table.png) -## How can I rename a table? +## ¿Cómo puedo cambiar el nombre de una tabla? -Select the table by clicking on it in the Project Browser (if it is not already highlighted) and click on its name or press F2. A cursor will appear allowing you to rename the table. +Seleccione la tabla haciendo clic en ella en el Explorador de proyectos (si aún no está resaltada) y haga clic en su nombre o presione F2. Aparecerá un cursor que le permitirá cambiar el nombre de la tabla. -## How can I delete a table? +## ¿Cómo puedo eliminar una tabla? -Select the table by clicking on it in the Project Browser and press the Delete button. Please note that deleting a table from AppGini does not delete it from your database if it already exists. This is done to protect your data from getting deleted unintentionally. If you really want to delete (drop) the table from your database, you can do so using phpMyAdmin or a similar MySQL administration utility. +Seleccione la tabla haciendo clic en ella en el Explorador de proyectos y presione el botón Eliminar. Tenga en cuenta que eliminar una tabla de AppGini no la elimina de su base de datos si ya existe. Esto se hace para proteger sus datos de ser eliminados involuntariamente. Si realmente desea eliminar (soltar) la tabla de su base de datos, puede hacerlo utilizando phpMyAdmin o una utilidad de administración de MySQL similar. -## What about table properties? +## ¿Qué pasa con las propiedades de la tabla? -Click with the mouse on any property and press F1 to obtain help about its function. +Haga clic con el mouse en cualquier propiedad y presione F1 para obtener ayuda sobre su función. -## Can I use a table from another AppGini project? +## ¿Puedo usar una tabla de otro proyecto de AppGini? -Yes, instead of having to recreate a table and all its fields, you can simply copy it from another AppGini project and paste it into your current project. Just use the Copy and Paste icons from the top toolbar. +Sí, en lugar de tener que recrear una tabla y todos sus campos, simplemente puede copiarla de otro proyecto de AppGini y pegarla en su proyecto actual. Simplemente use los iconos Copiar y Pegar de la barra de herramientas superior. -## Anonymous table permissions - -By default, your new table will be accessible only to the admin users after uploading your AppGini application to the server. You can change the table permissions to allow access for anonymous users and/or other groups from the admin area of the generated application. +## Permisos de tabla anónimos +De forma predeterminada, su nueva tabla solo será accesible para los usuarios administradores después de cargar su aplicación AppGini en el servidor. Puede cambiar los permisos de la tabla para permitir el acceso a usuarios anónimos y/u otros grupos desde el área de administración de la aplicación generada.