maj texte postdetail

This commit is contained in:
sebvtl728
2025-02-01 22:07:50 +01:00
parent 55436deb95
commit 8bccf65623
3 changed files with 53 additions and 33 deletions
+2 -2
View File
@@ -10,7 +10,7 @@ const Posts = () => {
useEffect(() => { useEffect(() => {
const fetchPosts = async () => { const fetchPosts = async () => {
try { try {
const response = await api.get("wp/v2/posts?_fields=id,title,excerpt,content,featured_media"); const response = await api.get("wp/v2/posts?_fields=id,slug,title,excerpt,content,featured_media");
const postsData = response.data; const postsData = response.data;
// Récupérer les images en vedette // Récupérer les images en vedette
@@ -66,7 +66,7 @@ const Posts = () => {
cursor: "pointer", cursor: "pointer",
"&:hover": { backgroundColor: "#0e467f", color: "white", transform: "scale(1.05)", boxShadow: 6 }, "&:hover": { backgroundColor: "#0e467f", color: "white", transform: "scale(1.05)", boxShadow: 6 },
}} }}
onClick={() => navigate(`/post/${post.id}`)} onClick={() => navigate(`/post/${post.slug}`)}
> >
{post.image && ( {post.image && (
<CardMedia component="img" height="200" image={post.image} alt={post.title.rendered} /> <CardMedia component="img" height="200" image={post.image} alt={post.title.rendered} />
+50 -30
View File
@@ -4,61 +4,81 @@ import { useParams, useNavigate } from "react-router-dom";
import api from "../api"; import api from "../api";
const PostDetails = () => { const PostDetails = () => {
const { id } = useParams(); const { slug } = useParams(); // ✅ Utilisation correcte du slug
const [post, setPost] = useState(null); const [post, setPost] = useState(null);
const [image, setImage] = useState(null); const [image, setImage] = useState(null);
const navigate = useNavigate(); const navigate = useNavigate();
useEffect(() => { useEffect(() => {
const fetchPost = async () => { const fetchPost = async () => {
try { if (!slug) {
const response = await api.get(`wp/v2/posts/${id}?_fields=title,content,featured_media,date`); console.error("❌ Erreur : aucun slug fourni !");
setPost(response.data); return;
}
// Récupération de l'image try {
if (response.data.featured_media) { console.log(`📢 Requête API pour le slug : ${slug}`);
const mediaResponse = await api.get(`wp/v2/media/${response.data.featured_media}`);
setImage(mediaResponse.data.source_url); // ✅ Requête API correcte
const response = await api.get(`wp/v2/posts?slug=${slug}&_fields=id,title,content,featured_media,date`);
if (response.data.length > 0) {
const article = response.data[0]; // ✅ Récupération du premier article trouvé
setPost(article);
console.log("✅ Article trouvé :", article);
// ✅ Récupération de l'image en vedette si elle existe
if (article.featured_media) {
console.log(`📢 Récupération de l'image ID : ${article.featured_media}`);
const mediaResponse = await api.get(`wp/v2/media/${article.featured_media}`);
setImage(mediaResponse.data.source_url);
}
} else {
console.error("❌ Aucun article trouvé avec ce slug !");
} }
} catch (error) { } catch (error) {
console.error("Erreur lors de la récupération de l'article :", error); console.error("Erreur lors de la récupération de l'article :", error);
} }
}; };
fetchPost(); fetchPost();
}, [id]); }, [slug]); // ✅ Dépendance correcte
if (!post) { if (!post) {
return <CircularProgress sx={{ display: "block", margin: "auto", mt: 5 }} />; return <CircularProgress sx={{ display: "block", margin: "auto", mt: 5 }} />;
} }
return ( return (
<Box sx={{ padding: "40px 20px",display:"flex", flexDirection:"column" }}> <Box sx={{ padding: "40px 20px", display: "flex", flexDirection: "column" }}>
<Button onClick={() => navigate(-1)} variant="outlined" sx={{ mt:5, mb: 3, maxWidth:"200px" }}> {/* ✅ Bouton Retour */}
<Button onClick={() => navigate(-1)} variant="contained" sx={{ mt: 5, mb: 3, maxWidth: "200px" }}>
Retour Retour
</Button> </Button>
<Typography variant="h1" sx={{ {/* ✅ Titre de l'article */}
fontWeight: "bold", <Typography
textAlign: "center", variant="h1"
mb: 4, sx={{
fontSize: { xs: '3rem', md: '3rem', lg: '3rem' }, // Responsive fontWeight: "bold",
}}> textAlign: "center",
mb: 4,
fontSize: { xs: "3rem", md: "3rem", lg: "3rem" },
}}
>
{post.title.rendered} {post.title.rendered}
</Typography> </Typography>
<Box sx={{ display:"flex", alignItems:"center", justifyContent:"center", padding: "40px 20px",margin:"auto" }}> {/* ✅ Image + Contenu */}
{image && ( <Box sx={{ display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", padding: "40px 20px", margin: "auto" }}>
<Box {image && (
component="img" <Box
src={image} component="img"
alt={post.title.rendered} src={image}
sx={{ width: "33%", maxHeight: "400px", objectFit: "cover", borderRadius: "8px", mb: 3 }} alt={post.title.rendered}
/> sx={{ width: "100%", maxHeight: "400px", objectFit: "cover", borderRadius: "8px", mb: 3 }}
)} />
)}
<Typography variant="body1" sx={{ maxWidth: "800px", mx: "auto" }} dangerouslySetInnerHTML={{ __html: post.content.rendered }} />
<Typography variant="body1" sx={{ maxWidth: "800px", mx: "auto" }} dangerouslySetInnerHTML={{ __html: post.content.rendered }} />
</Box> </Box>
</Box> </Box>
); );
+1 -1
View File
@@ -50,7 +50,7 @@ function YourApp() {
<Route path="/services/structure-beton-charpente-metallique-bois" element={<ServiceDeux />} /> <Route path="/services/structure-beton-charpente-metallique-bois" element={<ServiceDeux />} />
<Route path="/services/formation-video" element={<ServiceTrois />} /> <Route path="/services/formation-video" element={<ServiceTrois />} />
<Route path="/admin/create-post" element={<CreatePost />} /> <Route path="/admin/create-post" element={<CreatePost />} />
<Route path="/post/:id" element={<PostDetails />} /> <Route path="/post/:slug" element={<PostDetails />} />
<Route path="/admin/posts" element={<PostList />} /> <Route path="/admin/posts" element={<PostList />} />
<Route path="/admin/login" element={<Login />} /> <Route path="/admin/login" element={<Login />} />
<Route path="/admin/dashboard" element={<Dashboard />} /> <Route path="/admin/dashboard" element={<Dashboard />} />