(Wiki página de Backend Frontend Template Pro: the WordPress Plugin Template)
Edita tu menú en la variable $this->admin_pages del archivo admin/class-your-plugin-admin.php
Diseñar un menú BFT se ve así: $this->admin_pages = [ “hello_world” => [ “page_title” => $this->__(“Hello world page”), “menu_title” => $this->__(“Hello world”), “file” => “your-plugin-admin-display-hello-world.php”, ], “blank_page” => [ “page_title” => $this->__(“Blank page”), “menu_title” => $this->__(“Blank page”), “file” => “bft-admin-display-blank-page-with-title.php”, ], ];
El menú BFT puede tener páginas hijas, ejemplo: $this->admin_pages = [ “hello_world” => [ “page_title” => $this->__(“Hello world page”), “menu_title” => $this->__(“Hello world”), “file” => “your-plugin-admin-display-hello-world.php”, “children” => [ “blank_page” => [ “page_title” => $this->__(“Blank page”), “menu_title” => $this->__(“Blank page”), “file” => “bft-admin-display-blank-page-with-title.php”, ], ] ], ];
Nota: los datos del array son expandidos por la función $this->admin_pages_prepare(), si haces un $this->debug_log_write($this->admin_pages) en una página: puedes ver el estado atual del array en el log de WordPress
Eplicación del menú BFT:
- Parámetros automáticos añadidos al array
- id: la clave del array
- is_child: añadido y true si es hija
- page_parent: añadido con la clave del padre si es hija
- ids_required_get_data: los datos GET encontrados dentro de los ids ‘ids_required’
- ids_optional_get_data: los datos GET encontrados dentro de los ids ‘ids_optional’
- ids_aux_required_get_data: los datos GET encontrados dentro de los ids ‘ids_aux_required’
- ids_aux_optional_get_data: los datos GET encontrados dentro de los ids ‘ids_aux_optional’
- ids_all: ‘ids_required’, ‘ids_optional’, ‘ids_aux_required’, ‘ids_aux_optional’ todos combinados, este orden es la prioridad para mantener los datos
- ids_all_get_data: los datos GET encontrados dentro de los ids ‘ids_all’, usa la ‘key_final’ como ‘key’
- ids_all_get_data_excluded_zeros: ids_all_get_data sin los ids con get data == ‘0’
- ids_all_get_url: ids_all_get_data transformados en una cadena GET URL ‘&key=data’
- ids_all_get_data_excluded_zeros: ids_all_get_url sin los ids con get data == ‘0’
- ids_all_inverse: ids_all en orden inverso, ej:
$page_data[“ids_all”] = [ “key_initial” =>”key_final” ] -> $page_data[“ids_all_inverse”] = [ “key_final” =>”key_initial” ] - ids_required_all: ‘ids_required’, ‘ids_aux_required’ todos combinados, este orden es la prioridad para mantener los datos
- ids_required_all_get_data: los datos GET encontrados dentro de los ids ‘ids_required_all’, usa la ‘key_final’ como ‘key’
- ids_required_all_get_data_excluded_zeros: ids_required_all_get_data sin los ids con get data == ‘0’
- ids_optional_all: ‘ids_optional’, ‘ids_aux_optional’ todos combinados, este orden es la prioridad para mantener los datos
- ids_optional_all_get_data: los datos GET encontrados dentro de los ids ‘ids_optional_all’, usa la ‘key_final’ como ‘key’
- ids_principal_all: ‘ids_required’, ‘ids_optional’ todos combinados, este orden es la prioridad para mantener los datos
- ids_principal_all_get_data: los datos GET encontrados dentro de los ids ‘ids_principal_all’, usa la ‘key_final’ como ‘key’
- ids_aux_all: ‘ids_aux_required’, ‘ids_aux_optional’ todos combinados, este orden es la prioridad para mantener los datos
- ids_aux_all_get_data: los datos GET encontrados dentro de los ids ‘ids_aux_all’, usa la ‘key_final’ como ‘key’
- Parámetros con datos por defecto si no están
- page_title: título de la página, por defecto: $this->admin_pages_page_title_default
- menu_title: título de la pestaña de la página, por defecto: $this->admin_pages_page_title_default
- menu_slug: slug de la página, por defecto: clave de la página. El menú slug se cambiará a: $this->admin_pages_slug_name_prefix.”_”.menu_slug porque es necesario un nombre de página único entre los plugins
- tab_show: si false no muestra la pestaña de la página, incluso si la página está seleccionada, por defecto: true
- tabs_new_or_edit_on_url: true añade ‘&action=edit’ o ‘&action=new’ en el link de la pestaña. New si hay un id detectado en los datos GET, por defecto false
- tabs_show_children: si false no muestra la primera línea de pestañas hijas de una página, por defecto true
- function: la función para cuando una página se muestra, por defecto: $this->admin_pages_function_default
- function_load: carga la función antes de que la página se muestre,por defecto: $this->admin_pages_function_load_default
- file: el admin/partials archivo que se mostrará, default: $this->admin_pages_file_default (Si el archivo empieza con ‘bft-‘ el archivo se cargará de la carpeta admin/lib/BFT/partials
- error_throw_what_do, es usado en error_throw, opciones:
- show_error: muestra el error (opción por defecto)
- show_error_and_die: muestra el error y para la ejecución
- go_to_parent: va a la página padre y anota en los datos GET el error (sólo funciona si $triggered_on_function_load = true, porque en una función normal de WordPress causará el error: ‘Cannot modify header information – headers already sent’)
- error_throw_file_change: cambia la opción de archivo si error_throw_what_do es activado, por defecto: false
- capability, por defecto: ‘manage_options’, capacidades de WordPress: https://wordpress.org/support/article/roles-and-capabilities/
- IDs: son arrays de datos con ‘name on the GET data’ => ‘id internal to use’, array vacío por defecto
En los datos GET es necesario poner un id único, ejemplo: ‘book_id’, pero en la página/función quizás es necesitado como ‘id’, entonces usa: ‘book_id’ => ‘id’ Opciones:- ids_required (lanza un error si no se ha encontrado un GET id)
- ids_optional
- ids_aux_required (lanza un error si no se ha encontrado un GET id, para páginas con datos secundarios)
- ids_aux_optional (para páginas con datos secundarios)
- Example:
“ids_optional” => [ “key_initial” => “key_final”, “‘key_get'” => “‘key_needed'”, “book_id” => “id”, ], - Nota: si es una página hija quizás habrán ids automáticos: if un padre tiene un id o id auxiliar que no se ha encontrado en la página hija, entonces el hijo tiene el id como un id opcional en ids_optional
- Functions disponibles listas para usar (puedes crear cualquier función qué necesites)
- admin_menu_page_display: muestra la página seleccionada en ‘file’
- admin_menu_page_table_display_first_menu_child: muestra una tabla con los datos del primer hijo y el formulario almacenado en $this->admin_forms[]
- admin_menu_page_table_display: muestra una tabla con los datos de la página mostrada
- admin_menu_admin_form_page_display: mostrar un formulario personalizado automático almacenado en $this->admin_forms[]
- Functions load disponibles listas para usar (puedes crear cualquier función qué necesites)
- redirect_to_first_page_child: redirecciona a la primera página hija de la página actual (ejecuta admin_permission_check_and_ids_required_check_function_load first)
- admin_permission_check_and_ids_required_check_function_load: comprueba los permisos de administración y comprueba los ids requeridos y opcionales especificados en la URL, tipos de ids princpiales y auxilizares seleccionados, preparado para ‘function_load’, ‘go_to_parent’ usaso si es necesario
- ids_required_check_function_load: comprueba ids requeridos y opcionales de la página especificada en la URL, tipos de ids principales y auxiliares seleccionados, preparado para ‘function_load’, ‘go_to_parent’ usaso si es necesario
- download_file_private: descargar archivo privado
- custom_form_set_do_by_post: enviar un formulario para manipulación automatizada de datos
- Parámetros opcionales
- admin_page_settings_id: para seleccionar la clave a usar en $this->admin_settings[], preparado parar usarse con la función $this->settings_section_form($this->admin_pages_data_get(“admin_page_settings_id”)), esa función es usada en “file” => “bft-admin-display-settings.php”,
- iframe_url: la URL completa de dentro del iframe, para usar con “file” => “bft-admin-display-iframe.php”
- iframe_admin_page_slug: el slug de dentro del iframe, el slug del iframe se cambiará a: $this->admin_pages_slug_name_prefix.”_”.menu_slug, para usar con “file” => “bft-admin-display-iframe.php”
- file_aux_folder_includes: para utilizar una segunda ruta completa con la variable $file_aux_url (parametro ‘file’ genera la variable $file_url )
- new_text: el texto del botón de nueva entrada, puede añadirse en el padre o en el hijo, la prioridad será en los datos del hijo, para usarse con la función admin_menu_page_table_display_first_menu_child() y archivo bft-admin-display-list-table.php
Crea la variable $button_add y será finalmente usado en $this->html_button_action
si new_text is boleano y true usará el texto: $this->__(“New”) - admin_forms_aux_id: para página con datos automáticos, usado en la función: admin_pages_data_title_from_admin_forms_aux()
Muestra el nombre automático del formulario (datos column_title_name) antes de los datos como esto: Nombre automático | Título
Para el nombre automático es usado el ids_required y ids_optional (sólo el primer ID encontardo), pero sólo es usado la key_inicial (la key_get) - children: array con las páginas hijas. Una página hija puede tener descendencia, el máximo de niveles es 5 contando la página padre. Hay un límite porque no es recursivo, eso mata el rendimiento del servidor
- page_copy_of: copia los datos de una página.Sólo los datos no encontrado en la página, tampoco copia id, is_child, page_parent, menu_slug y children”)?>
- Tus propios parámetros
- Puedes crear tu propio parámetros, después puedes acceder a la información desde una función o una página con:
$variable_name = $this->admin_pages_data_get(“parametter_name”);Y si quieres puedes recuperar los datos de una página en concreto con $page_name, y recuperar todos los datos del array con $key = false
$variable_name = $this->admin_pages_data_get($key = false, $page_name = NULL) - Puedes establecer tus propios parámetros por código con:
$this->admin_pages_data_set($key, $data, $page_name = NULL)
- Puedes crear tu propio parámetros, después puedes acceder a la información desde una función o una página con:
- Cómo empezar
- Usa los ejemplos del principio, la mayoría de las opciones no se necesitan inicialmente
- Extepto todo el ‘id_required’/’id_optional’ parte, eso es importante, pero sólo para páginas hijas. Puedes ver ejemplos detallados en otras páginas donde se necesita, porque la idea es tener una página listado con todas las entradas, y entonces ver una simpre entrada en el hijo, ejemplo:
$this->admin_pages = [ “books” => [ “page_title” => $this->__(“List with all the books”), “menu_title” => $this->__(“Books”), “function” => “admin_menu_page_table_display_first_menu_child”, “file” => “bft-admin-display-list-table.php”, “children” => [ “book” => [ “ids_required” => [ “book_id” => “id”, ], “admin_forms_id” => “books”, “page_title” => $this->__(“Book selected”), “menu_title” => $this->__(“Book”), “function” => “admin_menu_admin_form_page_display”, “file” => “bft-admin-display-form.php”, “function_load” => “custom_form_set_do_by_post”, ], ] ], ]; En este ejemplo rápido hay una página que muestra todos los libros: admin.php?page=your_plugin_books , y cada item/libro enlaza a admin.php?page=your_plugin_book&book_id=[id del libro] Y porque ‘book’ tiene ‘ids_required’, la página lanza error automáticamente si un dato GET requerido no es encontrado, book_id en este caso Un ejemplo complejo de pestañas anidadas: Esto es una parte del menú por defecto usado en BFT, más información en base de datos -> Manipulación de datos automatizada $this->admin_pages = [ “database” => [ “menu_title” => $this->__(“Database”), “page_title” => $this->__(“Database”), “file” => “bft-admin-display-menu-system.php”, “function_load” => “redirect_to_first_page_child”, “children” => [ “install_deinstall_upgrade_database_explication” => […], “automated_data_manipulation_explication” => [ “menu_title” => $this->__(“Automated data manipulation”), “page_title” => $this->__(“Data managed by BFT”), “file” => “bft-admin-display-automated-data-manipulation-system.php”, “children” => [ “automated_data_manipulation_courses” => […], “automated_data_manipulation_students” => […], “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”), ], ], ], ], ], ], ], ], ], ], ]; Eso genera este menú: Datos GET: admin.php?page=bft_pro_automated_data_manipulation_explicationDatos GET: admin.php?page=bft_pro_automated_data_manipulation_teachersn
Datos GET: admin.php?page=bft_pro_automated_data_manipulation_teacher&action=new&teacher_id=0
Datos GET: admin.php?page=bft_pro_automated_data_manipulation_teacher&action=edit&teacher_id=1
Datos GET: admin.php?page=bft_pro_automated_data_manipulation_teacher_notes&teacher_id=1
Datos GET: admin.php?page=bft_pro_automated_data_manipulation_teacher_note&action=edit¬e_id=1&teacher_id=1
0 comentarios