<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\Article;
use Symfony\Component\DomCrawler\Crawler;
class BlogueController extends AbstractController
{
private $site;
private $locale;
public function __construct(RequestStack $requestStack)
{
$request = $requestStack->getCurrentRequest();
$this->site = $request->getHost();
$this->locale = $request->attributes->get('_locale', 'fr');
}
/**
* @Route("/", name="app_blogue_fr")
* @Route("/{_locale}", name="app_blogue", defaults={"_locale"="fr"}, requirements={"_locale"="fr|en"})
*/
public function index(PaginatorInterface $paginator, Request $request): Response
{
// Récupérer l'ID du site à partir du mappage
$siteId = $this->getParameter('site_mapping')[$this->site];
// Récupérer les articles du site spécifique en utilisant l'ID du site
$articles = $this->getDoctrine()->getRepository(Article::class)->listeArticle($siteId, $this->locale);;
$pagination = $paginator->paginate(
$articles,
$request->query->getInt('page', 1),
10 // Nombre d'éléments par page
);
// Afficher les articles dans la vue
return $this->render("blogue/index.html.twig", [
'articles' => $pagination,
'site' => $this->site,
'_locale' => $this->locale
]);
}
/**
* @Route("/{slug}", name="url_article_fr")
* @Route("/{_locale}/{slug}", name="url_article", requirements={"_locale"="fr|en"})
*/
public function detailArticle($slug, Request $request)
{
// Récupérer l'ID du site à partir du mappage
$siteId = $this->getParameter('site_mapping')[$this->site];
$baseUrl = $this->getParameter('cms_url');
// Récupérer les articles du site spécifique en utilisant l'ID du site
$article = $this->getDoctrine()->getRepository(Article::class)->findOneBy(['type' => 'article', 'userId' => $siteId, 'slug' => $slug, 'locale' => $this->locale]);
$crawler = new Crawler($article->getContent());
$newContent = $this->convertContent($crawler, $baseUrl)->html();
$article->setContent($newContent);
//Liste des derniers articles
$articles = $this->getDoctrine()->getRepository(Article::class)->listeArticle($siteId, $this->locale, 3, $article);
// Afficher les articles dans la vue
return $this->render("blogue/detail.html.twig", [
'article' => $article,
'site' => $this->site,
'_locale' => $this->locale,
'articles' => $articles
]);
}
public function convertContent($crawler, $baseUrl)
{
// Sélectionnez tous les éléments <img>
$images = $crawler->filterXPath('//img');
foreach ($images as $image) {
$imageSrc = $image->getAttribute('src');
// Vérifiez si l'URL de l'image est relative
if (!filter_var($imageSrc, FILTER_VALIDATE_URL)) {
// Construisez l'URL absolue en ajoutant le chemin de l'image à l'URL de base
$absoluteUrl = rtrim($baseUrl, '/') . '/' . ltrim($imageSrc, '/');
// Modifiez l'attribut src de l'image avec l'URL absolue
$image->setAttribute('src', $absoluteUrl);
}
}
return $crawler;
}
}