diff --git a/frontend/src/components/Faq.jsx b/frontend/src/components/Faq.jsx index d351c56..1c9f15e 100644 --- a/frontend/src/components/Faq.jsx +++ b/frontend/src/components/Faq.jsx @@ -1,32 +1,44 @@ import React, { useState, useEffect } from "react"; -import { Box, TextField, Typography, Collapse } from "@mui/material"; +import { Box, TextField, Typography, Collapse, CircularProgress } from "@mui/material"; +import axios from "axios"; const Faq = ({ showFAQ }) => { const [faqSearch, setFaqSearch] = useState(""); const [filteredFaqs, setFilteredFaqs] = useState([]); - - const faqs = [ - { - question: "Comment contacter notre service client ?", - answer: - "Vous pouvez nous appeler au +33 1 23 45 67 89 ou nous écrire via le formulaire de contact.", - }, - { - question: "Quels sont vos horaires d'ouverture ?", - answer: "Nous sommes ouverts du lundi au vendredi de 9h00 à 18h00.", - }, - { - question: "Où êtes-vous situés ?", - answer: "Notre adresse est 123 Rue Exemple, Paris, France.", - }, - { - question: "Proposez-vous des services personnalisés ?", - answer: "Oui, contactez-nous pour discuter de vos besoins spécifiques.", - }, - ]; + const [faqs, setFaqs] = useState([]); + const [loading, setLoading] = useState(true); // Ajout d'un état de chargement + const [error, setError] = useState(null); // Ajout d'un état d'erreur useEffect(() => { - setFilteredFaqs(faqs); + const fetchFaqs = async () => { + try { + // Requête pour récupérer les FAQs depuis l'API WordPress + const response = await axios.get( + "https://preprod.octopusdesign.fr/api-octopus/server/wp-json/wp/v2/pages/116?_fields=acf.faq.faq_list" + ); + + const faqList = response.data.acf?.faq?.faq_list; // Chemin vers le répéteur dans l'API + if (faqList && Array.isArray(faqList)) { + const formattedFaqs = faqList.map((item) => ({ + question: item.question || "Question non définie", + answer: item.answer || "Réponse non définie", + })); + + setFaqs(formattedFaqs); + setFilteredFaqs(formattedFaqs); // Initialiser la liste filtrée + } else { + console.warn("Aucune FAQ trouvée dans le champ répéteur."); + setError("Aucune FAQ disponible pour le moment."); + } + } catch (error) { + console.error("Erreur lors de la récupération des FAQs :", error); + setError("Impossible de récupérer les FAQs. Veuillez réessayer plus tard."); + } finally { + setLoading(false); // Désactiver le chargement + } + }; + + fetchFaqs(); }, []); const handleSearch = (e) => { @@ -51,7 +63,7 @@ const Faq = ({ showFAQ }) => { }} > { FAQ - {/* Barre de recherche */} - + {loading ? ( + + + + ) : error ? ( + + {error} + + ) : ( + <> + {/* Barre de recherche */} + - {/* Liste des FAQs */} - - {filteredFaqs.length > 0 ? ( - filteredFaqs.map((faq, index) => ( - - - {faq.question} + {/* Liste des FAQs */} + + {filteredFaqs.length > 0 ? ( + filteredFaqs.map((faq, index) => ( + + + {faq.question} + + + + )) + ) : ( + + Aucun résultat trouvé. Essayez un autre mot-clé. - - {faq.answer} - - - )) - ) : ( - - Aucun résultat trouvé. - - )} - + )} + + + )} ); diff --git a/frontend/src/components/Pages/Contact.jsx b/frontend/src/components/Pages/Contact.jsx index 74928c8..35e2222 100644 --- a/frontend/src/components/Pages/Contact.jsx +++ b/frontend/src/components/Pages/Contact.jsx @@ -156,7 +156,7 @@ const Contact = () => { > { Contactez-nous + Notre bureau d’étude technique est, par essence, spécialisé. + Vous pouvez donc faire appel à nous pour un diagnostic ponctuel portant sur tel ou tel équipement ou ouvrage du bâtiment + (structures, chaufferie, ascenseur).



Une question ? Une demande particulière ? Remplissez le formulaire ci-dessous ou consultez nos coordonnées.
@@ -182,6 +185,7 @@ const Contact = () => { {/* Section Coordonnées et Horaires */} + {/* Coordonnées */} { > { > Nos coordonnées + Adresse :67 Bd Winston Churchill, Le Mans, France @@ -217,6 +223,7 @@ const Contact = () => { Email : contact@be-in3.com + { > { > Horaires d'ouverture + Lundi - Mardi : 9h00 - 16h00 @@ -342,8 +351,9 @@ const Contact = () => { }} > { }} > function ($object) { - return get_fields($object['id']); - }, - 'schema' => null, - ] - ); + register_rest_field( + 'page', + 'acf', + [ + 'get_callback' => function ($object) { + return get_fields($object['id']); + }, + 'schema' => null, + ] + ); }); -// API RANK SEO -add_filter('rest_prepare_page', function ($response, $post) { - $seo_data = [ - 'rank_math_title' => get_post_meta($post->ID, 'rank_math_title', true), - 'rank_math_description' => get_post_meta($post->ID, 'rank_math_description', true), - ]; - - $response->data = array_merge($response->data, $seo_data); - - return $response; -}, 10, 2); - -add_action('rest_api_init', function () { - register_rest_route('custom/v1', '/contact', array( - 'methods' => 'POST', - 'callback' => 'handle_contact_form', - 'permission_callback' => '__return_true', // Permet l'accès public - )); -}); - -// Formulaire -function register_contact_endpoint() { - register_rest_route('custom/v1', '/contact', [ - 'methods' => 'POST', - 'callback' => 'handle_contact_form', - 'permission_callback' => '__return_true', - ]); -} -add_action('rest_api_init', 'register_contact_endpoint'); - -function handle_contact_form($request) { - $params = $request->get_json_params(); - - $name = sanitize_text_field($params['name'] ?? ''); - $email = sanitize_email($params['email'] ?? ''); - $subject = sanitize_text_field($params['subject'] ?? ''); - $message = sanitize_textarea_field($params['message'] ?? ''); - - if (empty($name) || empty($email) || empty($subject) || empty($message)) { - return new WP_Error( - 'incomplete_fields', - 'Tous les champs doivent être remplis.', - ['status' => 400] - ); - } - - // Logique pour envoyer l'e-mail ou enregistrer les données - $to = get_option('admin_email'); // Adresse e-mail de l'administrateur WordPress - $headers = ['Content-Type: text/html; charset=UTF-8', 'From: ' . $name . ' <' . $email . '>']; - - $mail_sent = wp_mail($to, $subject, nl2br($message), $headers); - - if (!$mail_sent) { - return new WP_Error('email_not_sent', 'Le message n’a pas pu être envoyé.', ['status' => 500]); - } - - return [ - 'success' => true, - 'message' => 'Message envoyé avec succès.', - ]; -} - -// Gestion des menus ACF -function register_multiple_acf_dashboard_menus() { - // Menu principal +// Gestion des menus ACF et sous-menus +function register_acf_dashboard_menus() { + // Menu principal : Page d'accueil add_menu_page( - 'Gestion des Champs ACF', // Titre de la page principale - 'Page d\'accueil', // Texte du menu - 'manage_options', // Capacité requise - 'acf-manager', // Slug du menu principal - 'acf_manager_main_page', // Fonction de rappel pour la page principale - 'dashicons-admin-generic', // Icône du menu - 2 // Position dans le menu + 'Page d\'accueil', // Titre de la page principale + 'Page d\'accueil', // Texte du menu + 'manage_options', // Capacité requise + 'acf-homepage', // Slug du menu principal + 'acf_manager_main_page', // Fonction de rappel pour la page principale + 'dashicons-admin-home', // Icône du menu + 2 // Position dans le menu ); - // Sous-menu pour le Groupe 1 + // Sous-menus pour Page d'accueil add_submenu_page( - 'acf-manager', // Slug du menu parent - 'Groupe 1 ACF', // Titre de la page - 'Section Hero', // Texte du sous-menu - 'manage_options', // Capacité requise - 'acf-manager-group-1', // Slug du sous-menu - 'acf_manager_group_1' // Fonction de rappel pour afficher le contenu + 'acf-homepage', // Slug du menu parent + 'Gérer Section Hero', // Titre de la page + 'Section Hero', // Texte du sous-menu + 'manage_options', // Capacité requise + 'acf-homepage-hero', // Slug du sous-menu + 'acf_manager_section_hero' // Fonction de rappel ); - // Sous-menu pour le Groupe 2 add_submenu_page( - 'acf-manager', - 'Groupe 3 ACF', - 'Section Construction', - 'manage_options', - 'acf-manager-group-3', - 'acf_manager_group_3' - ); - - // Sous-menu pour le Groupe 2 - add_submenu_page( - 'acf-manager', - 'Groupe 2 ACF', + 'acf-homepage', + 'Gérer Section Expertise', 'Section Expertise', 'manage_options', - 'acf-manager-group-2', - 'acf_manager_group_2' + 'acf-homepage-expertise', + 'acf_manager_section_expertise' ); -} -add_action('admin_menu', 'register_multiple_acf_dashboard_menus'); -// Page principale (facultatif) + add_submenu_page( + 'acf-homepage', + 'Gérer Section Construction', + 'Section Construction', + 'manage_options', + 'acf-homepage-construction', + 'acf_manager_section_construction' + ); + + // Menu principal : Page Contact + add_menu_page( + 'Page Contact', // Titre de la page principale + 'Page Contact', // Texte du menu + 'manage_options', // Capacité requise + 'acf-contact', // Slug du menu principal + 'acf_manager_contact_main', // Fonction de rappel pour la page principale + 'dashicons-email', // Icône du menu + 3 // Position dans le menu + ); + + // Sous-menus pour Page Contact + add_submenu_page( + 'acf-contact', + 'Gérer Section Formulaire', + 'Section FAQ', + 'manage_options', + 'acf-contact-form', + 'acf_manager_contact_form' + ); + + // add_submenu_page( + // 'acf-contact', + // 'Gérer Section Coordonnées', + // 'Section Coordonnées', + // 'manage_options', + // 'acf-contact-coordinates', + // 'acf_manager_contact_coordinates' + // ); +} +add_action('admin_menu', 'register_acf_dashboard_menus'); + +// Fonction de rappel pour les pages principales function acf_manager_main_page() { - echo '

Bienvenue dans le Gestionnaire ACF

Choisissez un groupe dans le menu pour gérer ses champs.

'; + echo '

Bienvenue dans le Gestionnaire de la Page d\'accueil

Choisissez une section pour gérer ses champs.

'; } -// Groupe 1 - Champs ACF -function acf_manager_group_1() { +function acf_manager_contact_main() { + echo '

Bienvenue dans le Gestionnaire de la Page Contact

Choisissez une section pour gérer ses champs.

'; +} + +// Fonctions de rappel pour les sous-menus +function acf_manager_section_hero() { + render_acf_form('group_6774f26930ebd', '13'); // Remplacez par vos IDs ACF et Post ID +} + +function acf_manager_section_expertise() { + render_acf_form('group_6779c41fcdc6d', '13'); +} + +function acf_manager_section_construction() { + render_acf_form('group_677d3294c3dfa', '13'); +} + +function acf_manager_contact_form() { + render_acf_form('group_677e8bf907253', '116'); // Remplacez par vos IDs ACF et Post ID +} + +// function acf_manager_contact_coordinates() { +// render_acf_form('group_contact_coordinates', '116'); // Remplacez par vos IDs ACF et Post ID +// } + +// Fonction générique pour afficher les formulaires ACF +function render_acf_form($field_group, $post_id) { ?>
-

Groupe 1 - Champs ACF

+

Gestion des Champs

'13', // Remplacez par un ID de page si nécessaire - 'field_groups' => array('group_6774f26930ebd'), + 'post_id' => $post_id, // ID de la page ou de l'article + 'field_groups' => array($field_group), // ID du groupe ACF 'form' => true, 'return' => add_query_arg('updated', 'true', wp_get_referer()), 'submit_value' => __('Enregistrer les modifications', 'acf'), @@ -163,47 +152,13 @@ function acf_manager_group_1() { -
-

Groupe 3 - Champs ACF

- '13', // Remplacez par un ID de page si nécessaire - 'field_groups' => array('group_677d3294c3dfa'), - 'form' => true, - 'return' => add_query_arg('updated', 'true', wp_get_referer()), - 'submit_value' => __('Enregistrer les modifications', 'acf'), - )); - } else { - echo '

Le plugin ACF n\'est pas activé ou disponible.

'; - } - ?> -
- -
-

Groupe 2 - Champs ACF

- '13', // Remplacez par un ID de page si nécessaire - 'field_groups' => array('group_6779c41fcdc6d'), - 'form' => true, - 'return' => add_query_arg('updated', 'true', wp_get_referer()), - 'submit_value' => __('Enregistrer les modifications', 'acf'), - )); - } else { - echo '

Le plugin ACF n\'est pas activé ou disponible.

'; - } - ?> -
- function ($object) { + return get_fields($object['id']); + }, + 'schema' => null, + ] +); \ No newline at end of file