Backend Frontend Template Pro wiki: Manipulación de datos automatizada de la BBDD del plugin

Oct 10, 2023 | Backend Frontend Template Pro, Backend Frontend Template Pro: wiki, Plugin, WordPress

(Wiki página de Backend Frontend Template Pro: the WordPress Plugin Template)

  1. Campos necesarios en la tabla de la base de datos Para mostrar y manipular los datos automáticamente necesitaremos unos pocos campos dedicados en una tabla
    1. Estado, tipo enumerado, nombre del campo decidido en $this->database_status_column_name, para las opciones del enumerado usa los datos almacenados en $this->database_status_option_active_name y $this->database_status_option_bin_name
    2. Tiempo de creación, tipo datetime, nombre del campo decidido en $this->database_datetime_created_name
    3. Tiempo de modificación, tipo datetime, nombre del campo decidido en $this->database_datetime_modified_name
    4. Tiemp ode eliminación (movido a la papelera), tipo datetime, nombre del campo decidido en $this->database_datetime_removed_name
    Además la tabla puede tener una tabla de internalización (i18n), esa tabla tendrá una foreign_key apuntando al id de la tabla principal Un ejemplo de una tabla con tabla de internalización: CREATE TABLE `wp_bft_pro_courses` ( `id` int(10) NOT NULL AUTO_INCREMENT, `status` enum(‘active’,’bin’) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘active’, `datetime_created` datetime NULL DEFAULT NULL, `datetime_modified` datetime NULL DEFAULT NULL, `datetime_removed` datetime NULL DEFAULT NULL, `hours` int(4) NOT NULL DEFAULT 0, `order` int(10) NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; CREATE TABLE `wp_bft_pro_courses_i18n` ( `id` int(10) NOT NULL AUTO_INCREMENT, `course_id` int(10) NOT NULL COMMENT ‘Foreign Key’, `language` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `datetime_created` datetime NULL DEFAULT NULL, `datetime_modified` datetime NULL DEFAULT NULL, `name_i18n` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `image` int(10) NOT NULL, PRIMARY KEY (`course_id`, `language`) USING BTREE, UNIQUE INDEX `uk_wp_bft_pro_courses_i18n_id`(`id`) USING BTREE, UNIQUE INDEX `uk_wp_bft_pro_courses_i18n_id_primary_keys`(`course_id`, `language`) USING BTREE, CONSTRAINT `fk_wp_bft_pro_courses_i18n_course_id` FOREIGN KEY (`course_id`) REFERENCES `wp_bft_pro_courses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘Internationalization of course names’ ROW_FORMAT = Dynamic; Nota: no usar ‘wp_’, una instalación de WordPress quizás usa otro prefijo, usar en su lugar $wpdb->prefix, ejemplo: CREATE TABLE `”.$wpdb->prefix.”your_plugin_table` Aviso: ‘name’ no puede ser usado en una columna de una tabla i18n. WordPress limpia los datos automáticamente de todas las apariciones de ‘name’ y WordPress no espera datos array (es un array porque es el texto en cada idioma) En las relaciones muchos a muchos is necesario la fecha de creación y fecha de modificación //Estudiantes no descritos en esta página de ejemplo, la clave foránea no puede funcionar si copias la query CREATE TABLE `wp_bft_pro_students_courses` ( `id` int(10) NOT NULL AUTO_INCREMENT, `student_id` int(10) NOT NULL COMMENT ‘Foreign Key’, `course_id` int(10) NOT NULL COMMENT ‘Foreign Key’, `datetime_created` datetime NULL DEFAULT NULL, `datetime_modified` datetime NULL DEFAULT NULL, PRIMARY KEY (`student_id`, `course_id`) USING BTREE, UNIQUE INDEX `uq_wp_bft_pro_students_courses_id`(`id`) USING BTREE, UNIQUE INDEX `uq_wp_bft_pro_students_courses_student_id_course_id`(`student_id`, `course_id`) USING BTREE, INDEX `fk_wp_bft_pro_students_courses_course_id`(`course_id`) USING BTREE, CONSTRAINT `fk_wp_bft_pro_students_courses_course_id` FOREIGN KEY (`course_id`) REFERENCES `wp_bft_pro_courses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_wp_bft_pro_students_courses_student_id` FOREIGN KEY (`student_id`) REFERENCES `wp_bft_pro_students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘Relationship table’ ROW_FORMAT = Dynamic;
  2. $this->admin_forms Los formularios son descritos en $this->admin_forms del archivo admin/class-your-plugin-admin.php, un formulario es la unicón de su tabla y su internalización Diseñar un formulario BFT se ve así: $this->admin_forms = [ “courses” => [ “table” => $wpdb->prefix.$this->plugin_slug.”_”.”courses”, “column_key” => “id”, “column_title_name” => “name_i18n”, “i18n_foreign_key” => “course_id”, “columns” => [ $this->database_status_column_name => [ “label” => $this->database_status_column_text, “type” => “select”, “options” => $this->database_status_options, ], “id” => [ “label” => $this->__(“Nº”), “placeholder” => “”, “type” => “text”, “display_table” => true, “readonly” => true, ], $this->database_datetime_created_name => [ “label” => $this->database_datetime_created_text, “placeholder” => “”, “type” => “datetime”, “display_table” => false, “readonly” => true, ], $this->database_datetime_modified_name => [ “label” => $this->database_datetime_modified_text, “placeholder” => “”, “type” => “datetime”, “display_table” => false, “readonly” => true, “only_in_active” => true, ], $this->database_datetime_removed_name => [ “label” => $this->database_datetime_removed_text, “placeholder” => “”, “type” => “datetime”, “display_table” => true, “readonly” => true, “only_in_removed” => true, ], “hours” => [ “label” => $this->__(“Total hours of the course”), “placeholder” => $this->__(“Hours”), “type” => “number”, “i18n” => false, “readonly” => true, “display_table” => true, ], “name_i18n” => [ “label” => $this->__(“Course name”), “placeholder” => $this->__(“Name”), “type” => “text”, “i18n” => true, “display_table” => true, ], “image” => [ “label” => $this->__(“Course logo”), “placeholder” => $this->__(“Image”), “type” => “image”, “i18n” => true, “display_table” => true, ], “order” => [ “label” => $this->__(“Order”), “placeholder” => $this->__(“Order, lowest number first”), “type” => “text”, “i18n” => false, “display_table” => true, ], “teacher_id” => [ “label” => $this->__(“Teacher”), “placeholder” => “”, “type” => “select”, “foreign_key” => “teachers”, “display_table” => true, “value_empty_is_null” => true, “foreign_key_null_text” => $this->__(“Teacher not selected”), ], “students_courses” => [ “label” => $this->__(“Enrolled students”), “placeholder” => $this->__(“Students”), “type” => “many_to_many_relationship”, //Display table doesn’t work for now with many_to_many_relationship “display_table” => false, “search” => true, ], ], ], ]; Eplicación del menú BFT:
    1. Parámetros del formulario
      1. key: internal id del formulario
      2. table: nombre de la tabla
      3. column_key: nombre de la clave (‘id’ normalmente)
      4. column_title_name: campo donde se guarda el nombre de la fila (el nombre de un usuario, el nombre de un libro, etc.)
      5. i18n_foreign_key: clave foránea de la tabla de internalización
      6. columns: lista de campos
    2. Parámetro opcional de los campos
      1. label: texto a mostrar en la administración. Por defecto: “”
      2. placeholder: placeholder si el tipo de dato puede tener placeholder
      3. display_table: muestra el campo en la tabla-lista. Nota: display_table no funciona por ahora con campos many_to_many_relationship
      4. i18n: si los datos del campo están almacenados en una tabla de internalización
      5. only_in_active: muestra el campo sólo si lso datos están activos
      6. only_in_removed: muestra el campo sólo si los datos están la papelera
      7. readonly: campo de sólo lectura, para la columna clave por ejemplo
      8. value_from_get: coge el dato de los datos GET en la URL si no hay dato guardado de este campo. Para datos dependientes, ejemplo: notas de profesores, una nueva nota necesita saber el id del profesor de la nota
      9. value_empty_is_null: un dato vacío se transformará a NULL (el dato NULL siempre se mostrará como value=”)
      10. foreign_key: guarda una clave foránea
      11. foreign_key_null_text: texto para mostrar cuando NULL es guardado en una clave foránea con NULL opcional
      12. type: las opciones de inputs de BFT y además la opción ‘many_to_many_relationship’, es un select para enlazar la relación. ‘text’ por defecto
        • many_to_many_relationship: usa los datos guardados en $this->admin_forms_many_to_many_relationships
          “type” => “many_to_many_relationship”, “search” => true, //Display table doesn’t work for now with many_to_many_relationship “display_table” => false,
        • text: input text
          “type” => “select”,
        • textarea: input textarea, rows y cols son opcionales
          “type” => “textarea”, “rows” => 10, “cols” => 50,
        • number: input number, args opcionales: min, max y step. Por defecto en step: 1, alternativo: ‘decimal’ o ‘decimals’, esta opción calculate los steps necesarios
          “type” => “number”, “min” => 1, “max” => 99999, “step” => 1,
        • select: input select, args tiene que tener ‘options’, guarda una cadena con las opciones seleccionadas, ej: ‘en,es’, opcional args: search (false por defecto), multiple (false por defecto)
          “type” => “select”, “search” => true, “options” => [ “zh” => $this->__(“Chinesse”), “en” => $this->__(“English”), “es” => $this->__(“Spanish”), ], “type” => “select”, “multiple” => true, “search” => true, “options” => [ “zh” => $this->__(“Chinesse”), “en” => $this->__(“English”), “es” => $this->__(“Spanish”), ],
        • date: input text con un calendario, la fecha será en estilo MySQL ‘2023-01-01’
          “type” => “date”,
        • checkbox, single y multiple, en multiple es necesario ‘options’ en args
          “type” => “checkbox”, “multiple” => false, “type” => “checkbox”, “multiple” => true, “options” => [ “zh” => $this->__(“Chinesse”), “en” => $this->__(“English”), “es” => $this->__(“Spanish”), ],
        • radio: radio buttons, guarda cadena con las opciones seleccionadas, ej: ‘en, es’, requiere ‘options’
          “type” => “radio”, “multiple” => true, “options” => [ “zh” => $this->__(“Chinesse”), “en” => $this->__(“English”), “es” => $this->__(“Spanish”), ],
        • image: guarda si es necesario y selecciona una imagen de la Biblioteca de Medios de WordPress, el dato guardado es el ID del archivo. Una vez seleccionado muestra la imagen
          “type” => “image”,
        • file: igual que con la el tipo imagen, pero no intenta mostrar una imagen, sólo muestra un botón de descarga
          “type” => “file”,
        • empty: un input comentado, imprime ‘<!– id=”‘.$id_setting.'” empty –>’
          “type” => “empty”,
  3. $this->admin_forms_many_to_many_relationships Este formulario describe una relación mucho a mucho entre dos tablas
    1. Parámetros del formulario
      1. key: id interno de la relación mucho a mucho
      2. table: nombre de la tabla
      3. forms: array de los dos formulario de la relación
    2. Parámetro de los dos campos relacionados
      1. key: id del formulario
      2. value: clave foránea usado en la tabla
    Ejemplo del array: $this->admin_forms_many_to_many_relationships = [ “students_courses” => [ “table” => $wpdb->prefix.$this->plugin_slug.”_”.”students_courses”, “forms” => [ “courses” => “course_id”, “students” => “student_id”, ], ], ]; El sistema funcionará con los datos de arriba: $this->admin_forms = [ “courses” => [ […] “columns” => [ […] “students_courses” => [ “label” => $this->__(“Enrolled students”), “placeholder” => $this->__(“Students”), “type” => “many_to_many_relationship”, //Display table doesn’t work for now with many_to_many_relationship “display_table” => false, “search” => true, ], ], ], ];
  4. $this->admin_pages BFT necesita saber qué function y function_load usar en la página. El sistema también necesita saber cómo leer los datos GET de la URL Hay páginas de listados y páginas de formularios. Es posible anidar páginas de listas para usar los datos del formulario anterior, por ejemplo: notas del profesor, primero selecciona un profesor (o crea uno nuevo), entonces vas a las notas de ese profesor La explicación de $this->admin_pages está en la pestaña ‘Menu’, allí hay un ejemplo completo de uso
    1. Mostrar un listado
    Para mostrar un listado es necesario un hijo con todos los datos, además se necesita:
    1. “function” => “admin_menu_page_table_display_first_menu_child”,
    2. “file” => “bft-admin-display-list-table.php”,
    3. Mostrar un formulario
    Un formulario norlmamente es una página hija de un listado, el formulario necesita:
    1. “ids_required” => [“get_data” => “id_data”],
      “ids_required” => [ “teacher_id” => “id”, ],
    2. “admin_forms_id” => “form_key”,
    3. “function” => “admin_menu_admin_form_page_display”,
    4. “file” => “bft-admin-display-form.php”,
    5. “function_load” => “custom_form_set_do_by_post”,
    6. “tabs_new_or_edit_on_url” => true,
    7. “new_text” => “New entry text”,
    Un ejemplo de un listado y un formulario: $this->admin_pages = [ “automated_data_manipulation_courses” => [ “menu_title” => $this->__(“Courses”), “page_title” => $this->__(“List of courses”), “function” => “admin_menu_page_table_display_first_menu_child”, “file” => “bft-admin-display-list-table.php”, “children” => [ “automated_data_manipulation_course” => [ “ids_required” => [ “courses_id” => “id”, ], “admin_forms_id” => “courses”, “tabs_new_or_edit_on_url” => true, “menu_title” => $this->__(“Course”), “page_title” => $this->__(“Course form”), “function” => “admin_menu_admin_form_page_display”, “file” => “bft-admin-display-form.php”, “function_load” => “custom_form_set_do_by_post”, “new_text” => $this->__(“New course”), ], ], ], ];
    1. Anidar un formulario
    Para anidar un formulario BFT se necesita especifiar siempre el dato GET ajeno, no pongas ‘id’ en el id ajeno
    1. Mostrar un listado
      • “ids_required” => [“get_data” => “id_data”], es igual que el formulario padre
        “ids_required” => [ “teacher_id” => “teacher_id”, ],
      • “ids_aux_required” => [“get_data” => “id_data”], opcional, funciona con ids_aux_required
      • “admin_forms_aux_id” => “form_key”, opcional
      • “function” => “admin_menu_page_table_display_first_menu_child”,
      • “file” => “bft-admin-display-list-table.php”,
      1. Mostrar un formulario
    La diferencia principal es que tiene dos ids: el id principal y el id foráneo. No poner ‘id’ en el id foráneo. Además puede mostrar column_title_name
    1. “ids_required” => [“get_data” => “id_data”],
      “ids_required” => [ “note_id” => “id”, “teacher_id” => “teacher_id”, ],
    2. “admin_forms_id” => “form_key”,
    3. “ids_aux_required” => [“get_data” => “id_data”], opcional, funciona con ids_aux_required
    4. “admin_forms_aux_id” => “form_key”, opcional
    5. “function” => “admin_menu_admin_form_page_display”,
    6. “file” => “bft-admin-display-form.php”,
    7. “function_load” => “custom_form_set_do_by_post”,
    8. “tabs_new_or_edit_on_url” => true,
    9. “new_text” => “New entry text”,
    Un ejemplo de formulario anidado: $this->admin_pages = [ “automated_data_manipulation_teachers” => [ “menu_title” => $this->__(“Teachers”), “page_title” => $this->__(“List of teachers”), “function” => “admin_menu_page_table_display_first_menu_child”, “file” => “bft-admin-display-list-table.php”, “children” => [ “automated_data_manipulation_teacher” => [ “ids_required” => [ “teacher_id” => “id”, ], “admin_forms_id” => “teachers”, “tabs_new_or_edit_on_url” => true, “menu_title” => $this->__(“Teacher”), “page_title” => $this->__(“Teacher form”), “function” => “admin_menu_admin_form_page_display”, “file” => “bft-admin-display-form.php”, “function_load” => “custom_form_set_do_by_post”, “new_text” => $this->__(“New teacher”), ], “automated_data_manipulation_teacher_notes” => [ “ids_required” => [ “teacher_id” => “teacher_id”, ], “ids_aux_required” => [ “teacher_id” => “id”, ], “admin_forms_aux_id” => “teachers”, “menu_title” => $this->__(“Teacher notes”), “page_title” => $this->__(“List of notes”), “function” => “admin_menu_page_table_display_first_menu_child”, “file” => “bft-admin-display-list-table.php”, “children” => [ “automated_data_manipulation_teacher_note” => [ “ids_required” => [ “note_id” => “id”, “teacher_id” => “teacher_id”, ], “admin_forms_id” => “teachers_notes”, “ids_aux_required” => [ “teacher_id” => “id”, ], “admin_forms_aux_id” => “teachers”, “tabs_new_or_edit_on_url” => true, “menu_title” => $this->__(“Teacher note”), “page_title” => $this->__(“Teacher note form”), “function” => “admin_menu_admin_form_page_display”, “file” => “bft-admin-display-form.php”, “function_load” => “custom_form_set_do_by_post”, “new_text” => $this->__(“New note”), ], ], ], ], ], ];
Backend Frontend Template Pro: manipulación de datos automática 1
Backend Frontend Template Pro: manipulación de datos automática 2

En la sección “Menu Pro” hay un ejemplo de formularios anidados, si no se ha visto esa sección se recomienda visualizarla

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Utilizamos Cookies propias y de terceros para mejorar nuestros servicios y para ofrecerte una mejor experiencia (por ejemplo, mostrando publicidad personalizada) mediante el análisis de tus hábitos de navegación (por ejemplo, páginas visitadas). Puedes aceptar todas las cookies pulsando el botón “Aceptar”. Para configurarlas, obtener más información o rechazar su uso, haz click AQUÍ

Los ajustes de cookies en esta web están configurados para «permitir las cookies» y ofrecerte la mejor experiencia de navegación posible. Si sigues usando esta web sin cambiar tus ajustes de cookies o haces clic en «Aceptar», estarás dando tu consentimiento a esto.

Cerrar