Backend Frontend Template Pro wiki: Manipulación manual de datos: formularios

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

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

Un formulario manual es posible gracias a apuntar la página a una function personalizada para mostrar el formulario y a una function_load personalizada para guardar los cambios del formulario

Puedes usar la página bft-admin-display-form.php para mostrar el formulario o crear tu propia página

  1. function personalizada Recupera los datos como quieras y envíalos a la función $this->admin_menu_page_display(), por ejemplo: $args = [ “title” => $this->admin_pages_data_get(“page_title”), “id” => $id, “ids” => $ids, “form_data” => [ “page_name” => $this->page_name, “data” => $data, “column_key” => $column_key, ], ]; $this->admin_menu_page_display($args); Si la página usa bft-admin-display-form.php los datos se formarán de esta manera: $data = [ “column_name_1” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_1, “value” => “”, ], “column_name_2” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_2, “value” => “”, ], “column_group_name_1” => [ “label” => “”, “values” => [ “column_name_3” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_3, “value” => “”, ], “column_name_4” => [ “label” => “”, “placeholder” => “”, “type” => text, “id” => column_name_4, “value” => “”, ], ], ], ];
  2. function_load personalizada Esta función se ejecuta primero, se envíen datos POST por el navegador o no, parar la función si no se han enviado datos POST o se encuentra algún error, ejemplo: if (“POST” !== $_SERVER[‘REQUEST_METHOD’]) { return false; } Al final de la función usa redirección si es necsario. Para redireccionar puede usarse wp_redirect() o $this->custom_form_redirect()
    1. wp_redirect($url) Esta función de WordPress necesita la URL completa, por eso BFT ofrece mejores alternativas:
      • $this->admin_page_url_get() Devuelve la página mostrada actualmente sin datos GET adicionales, sólo el dato GET de la página https://yourfuturewebsite/wp-admin/admin.php?page=bft_pro_manual_data_manipulation_form_explanation
      • $this->gets_for_admin_page($id) Devuelve los datos GET necesarios para el formulario de la página. Ej: si una página usa el formulario ‘courses’, envíale el id ‘1’ y devolverá: &course_id=1
    2. $this->custom_form_redirect($id = false) Esta función BFT hace una redirección a la URL compelta con el ID necesario para el formulario y añade &action=new o &action=edit dependiendo en si se le ha pasado ID
  3. Ejemplo completo $this->admin_pages = [ “manual_data_manipulation_form_simple_example_teacher” => [ /*”ids_required” => [ “teacher_id” => “id”, ],*/ “admin_forms_id” => “teachers”, “columns” => [ “id”, “name”, “surname”, “id_card”, ], “menu_title” => $this->__(“Example 1”), “page_title” => $this->__(“Teacher”).” 1, “function” => “manual_data_manipulation_form_example_for_two_pages_get”, “file” => “bft-admin-display-form.php”, “function_load” => “manual_data_manipulation_form_example_for_two_pages_set”, ], ]; public function manual_data_manipulation_form_example_for_two_pages_get() { $this->admin_permission_check(); global $wpdb; $ids = $this->ids_required_and_optional_check_and_get($ids_principal_aux_type = “principal”, $ids_require_optional_type = “both”, $read_all_get_data = false); //$ids will be empty on the example, adding the id $ids[“id”] = “1”; //teachers or students $admin_forms_id = $this->admin_pages_data_get_admin_forms_id(); /* Remember: on $this->admin_pages you can store all the data you want and retrieve it with $this->admin_pages_data_get(); Teachers: “columns” => [ “id”, “name”, “surname”, “id_card”, ], Students: “columns” => [ “id”, “name”, “surname”, ], */ $columns_array = $this->admin_pages_data_get( “columns”); //$language_admin = $this->language_admin_get(); if (0 == count($ids) || false == $admin_forms_id || !isset($this->admin_forms[$admin_forms_id]) || false == $columns_array) { $error_message = $this->__(“Error message”); $this->error_throw ($error_message, $error_throw_what_do_use_this = “show_error_and_die”); } $id = sanitize_key(array_values($ids)[0]); $query = ” SELECT “.implode(“, “, $columns_array).” FROM “.$this->admin_forms[$admin_forms_id][“table”].” WHERE id = ‘$id'”; $data_database = $this->wpdb_get_result_one_row($query); if (0 == count($data_database)) { $error_message = $this->__(“Error message”); $this->error_throw ($error_message, $error_throw_what_do_use_this = “show_error_and_die”); } $data = array(); foreach ($data_database AS $data_database_key => $data_database_value) { if (isset($this->admin_forms[$admin_forms_id][“columns”][$data_database_key])) { $data[$data_database_key] = $this->admin_forms[$admin_forms_id][“columns”][$data_database_key]; $data[$data_database_key][“value”] = $data_database_value; } } $args = [ “title” => $this->admin_pages_data_get(“page_title”), “id” => $id, “ids” => $ids, “form_data” => [ “page_name” => $this->page_name, “data” => $data, “column_key” => $this->admin_forms[$admin_forms_id][“column_key”], ], ]; $this->admin_menu_page_display($args); } public function manual_data_manipulation_form_example_for_two_pages_set() { $this->admin_permission_check(); $redirect_page = false; $request_method = “POST”; if ($request_method !== $_SERVER[‘REQUEST_METHOD’]) { //Post data not found return false; } $data_raw = $_POST; if ( !isset($data_raw[“_wpnonce”]) || !wp_verify_nonce($data_raw[“_wpnonce”], $this->plugin_slug.”_form”)) { //Nonce not verified return false; } //For security check $this->ids_required_and_optional_check_and_get($ids_principal_aux_type = “principal”, $ids_require_optional_type = “both”, $read_all_get_data = false); //teachers or students $admin_forms_id = $this->admin_pages_data_get_admin_forms_id(); /* Remember: on $this->admin_pages you can store all the data you want and retrieve it with $this->admin_pages_data_get(); Teachers: “columns” => [ “id”, “name”, “surname”, “id_card”, ], Students: “columns” => [ “id”, “name”, “surname”, ], */ $columns_array = $this->admin_pages_data_get( “columns”); if ( false == $admin_forms_id || !isset($this->admin_forms[$admin_forms_id]) || false == $columns_array) { return false; } $data_row = array(); foreach ($columns_array AS $column) { if (!isset($data_raw[$column])) { return false; } $data_row[$column] = $data_raw[$column]; } $this->wpdb_insert_update_on_duplicate_key($this->admin_forms[$admin_forms_id][“table”], $data_row, $multi_row = false); /* Query executed: INSERT INTO wp_bft_pro_teachers ( datetime_modified, id, name, surname, id_card, datetime_created ) VALUES ( ‘2023-01-01 00:00:01’, ‘1’, ‘Teacher 1 edited’, ‘surname 1’, ‘1111’, ‘2023-01-01 00:00:01’ ) ON DUPLICATE KEY UPDATE datetime_modified = ‘2023-01-01 00:00:01’, id = ‘1’, name = ‘Teacher 1 edited’, surname = ‘surname 1’, id_card = ‘1111’ Obviously the duplicate key will be executed on this case for the “id” column Note the automated columns: $this->database_datetime_created_name (datetime_created) $this->database_datetime_modified_name (datetime_modified) */ if (true === $redirect_page) { //ids not specified in the example page, this is for a complete case $this->custom_form_redirect($data_row[“id”]); } else { return true; } }
Backend Frontend Template Pro: ejemplo de formulario manual

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