src/Service/MetaService.php line 90

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Post;
  4. use App\Entity\Category;
  5. use Spatie\SchemaOrg\Graph;
  6. use App\Entity\ParametreRef;
  7. use Spatie\SchemaOrg\Schema;
  8. use App\Entity\ParametreSite;
  9. use Symfony\Component\Intl\Locale;
  10. use App\Entity\ParametreLabelPhrase;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Leogout\Bundle\SeoBundle\Seo\Og\OgSeoGenerator;
  14. use Leogout\Bundle\SeoBundle\Seo\Basic\BasicSeoGenerator;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. class MetaService
  17. {
  18. private $em;
  19. private $templating;
  20. public $basicSeo;
  21. public $seo;
  22. public $requestStack;
  23. private $urlGenerator;
  24. public function __construct(EntityManagerInterface $em,
  25. \Twig\Environment $templating,
  26. BasicSeoGenerator $basicSeo,
  27. OgSeoGenerator $seo,
  28. UrlGeneratorInterface $urlGenerator,
  29. RequestStack $requestStack)
  30. {
  31. $this->templating = $templating;
  32. $this->em = $em;
  33. $this->basicSeo = $basicSeo;
  34. $this->seo = $seo;
  35. $this->requestStack = $requestStack;
  36. $this->urlGenerator = $urlGenerator;
  37. }
  38. public function metaTags($page){
  39. $_locale = Locale::getDefault();
  40. $url = null;
  41. $request = $this->requestStack->getCurrentRequest();
  42. if ($request) {
  43. $url = $request->getUri();
  44. }
  45. $title = $page->translate($_locale)->getMetaTitle() ?? null;
  46. $description = $page->translate($_locale)->getMetaDescription() ?? null;
  47. $metacle = $page->translate($_locale)->getMetaKeys() ?? null;
  48. if ($title != null || $description != null) {
  49. $sanitizedTitle = strip_tags($title);
  50. $sanitizedDescription = str_replace('"', '', $description);
  51. $this->basicSeo
  52. ->setTitle($sanitizedTitle)
  53. ->setDescription($sanitizedDescription)
  54. ->setKeywords($metacle);
  55. $this->seo
  56. ->setTitle($sanitizedTitle)
  57. ->setDescription($sanitizedDescription)
  58. ->setUrl($url);
  59. }
  60. }
  61. public function schemaOrg($page){
  62. $_locale = Locale::getDefault();
  63. $url = null;
  64. $request = $this->requestStack->getCurrentRequest();
  65. if ($request) {
  66. $url = $request->getUri();
  67. }
  68. $title = $page->translate($_locale)->getMetaTitle() ?? null;
  69. $description = $page->translate($_locale)->getMetaDescription() ?? null;
  70. $sanitizedTitle = strip_tags($title);
  71. $sanitizedDescription = str_replace('"', '', $description);
  72. $schemaOrg = new Graph();
  73. $schemaOrg->add(Schema::WebSite()->name(strip_tags($sanitizedTitle))->url($url));
  74. return $schemaOrg;
  75. }
  76. public function schemaOrgBreadcrumb($breadcrumb){
  77. $_locale = Locale::getDefault();
  78. $schema_breadcrumb_items = [];
  79. $schemaOrg = new Graph();
  80. if($breadcrumb){
  81. foreach ($breadcrumb as $key => $value) {
  82. $schema_breadcrumb_items[] = Schema::ListItem()->position($key + 1)
  83. ->item(["@id"=> $value['url'],"name"=> $value['name']]);
  84. }
  85. }
  86. if ($schema_breadcrumb_items) {
  87. $schemaOrg->add(Schema::BreadcrumBList()->itemListElement($schema_breadcrumb_items));
  88. }
  89. return $schemaOrg;
  90. }
  91. public function schemaOrgArticle($schemaOrg,$page){
  92. $_locale = Locale::getDefault();
  93. $parametre = $this->em->getRepository(ParametreSite::class)->findOneBy([],['id'=> 'ASC']);
  94. $request = $this->requestStack->getCurrentRequest();
  95. $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  96. $url = $request->getUri();
  97. $schemaOrg->add(Schema::Article()->headline($page->translate($_locale)->getTitle())
  98. ->datePublished($page->getDatePublication()?$page->getDatePublication():$page->getCreatedAt())
  99. ->dateModified($page->getUpdatedAt())
  100. ->image($page->getImage()!= null?$baseurl.$page->getImage():'')
  101. ->publisher(Schema::Organization()
  102. ->name($parametre?$parametre->translate($_locale)->getTitre():'')
  103. ->logo($parametre?$baseurl.'/public/uploads/media-site/'.$parametre->getImage():''))
  104. ->mainEntityOfPage(Schema::WebPage()->url($url)));
  105. return $schemaOrg;
  106. }
  107. public function canonicalUrl($page = null){
  108. $_locale = Locale::getDefault();
  109. $request = $this->requestStack->getCurrentRequest();
  110. $url = $request->getUri();
  111. if($page != null){
  112. // if($page->getCanonical() != null){
  113. // $url = $page->getCanonical();
  114. // }elseif($page->getDefaultCategorie() != null){
  115. // $categorieDefault = $this->em->getRepository(Category::class)->find($page->getDefaultCategorie());
  116. // if($categorieDefault){
  117. // $url = $this->urlGenerator->generate('page', ['slug'=> $categorieDefault->translate($_locale)->getSlugUrl().'/'.$page->translate($_locale)->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL);
  118. // }
  119. // }else{
  120. // $url = $this->urlGenerator->generate('page', ['slug'=> $page->translate($_locale)->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL);
  121. // }
  122. $url = $this->urlGenerator->generate('page', ['slug'=> $page->translate($_locale)->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL);
  123. }
  124. return '<link rel="canonical" href="'.$url.'" />';
  125. }
  126. public function canonicalCategorieUrl($categorie = null){
  127. $_locale = Locale::getDefault();
  128. $request = $this->requestStack->getCurrentRequest();
  129. $url = $request->getUri();
  130. if($categorie){
  131. if($categorie->getParent() == 0 && $categorie->getSousParent() == 0){
  132. $url = $this->urlGenerator->generate('page', ['slug'=> $categorie->translate($_locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL);
  133. }elseif($categorie->getParent() != 0){
  134. $categorieParent = $this->em->getRepository(Category::class)->find($categorie->getParent());
  135. $url = $this->urlGenerator->generate('page', ['slug'=> $categorieParent->translate($_locale)->getSlugUrl().'/'.$categorie->translate($_locale)->getSlugUrl()], UrlGeneratorInterface::ABSOLUTE_URL);
  136. }
  137. }
  138. return '<link rel="canonical" href="'.$url.'" />';
  139. }
  140. }