maj texte postdetail
This commit is contained in:
@@ -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} />
|
||||||
|
|||||||
@@ -4,29 +4,45 @@ 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}`);
|
|
||||||
|
// ✅ 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);
|
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 }} />;
|
||||||
@@ -34,30 +50,34 @@ const PostDetails = () => {
|
|||||||
|
|
||||||
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 */}
|
||||||
|
<Typography
|
||||||
|
variant="h1"
|
||||||
|
sx={{
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
mb: 4,
|
mb: 4,
|
||||||
fontSize: { xs: '3rem', md: '3rem', lg: '3rem' }, // Responsive
|
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 */}
|
||||||
|
<Box sx={{ display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", padding: "40px 20px", margin: "auto" }}>
|
||||||
{image && (
|
{image && (
|
||||||
<Box
|
<Box
|
||||||
component="img"
|
component="img"
|
||||||
src={image}
|
src={image}
|
||||||
alt={post.title.rendered}
|
alt={post.title.rendered}
|
||||||
sx={{ width: "33%", maxHeight: "400px", objectFit: "cover", borderRadius: "8px", mb: 3 }}
|
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>
|
||||||
|
|||||||
@@ -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 />} />
|
||||||
|
|||||||
Reference in New Issue
Block a user