From b43f52931ddf1b68650192c5798a9c5f4d4dde6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 10:34:15 +0200 Subject: [PATCH 1/9] remove json ld integration --- CHANGELOG.md | 5 +- README.md | 60 -------- composer.json | 1 - config/services.yaml | 4 +- contao/dca/tl_page.php | 69 --------- contao/languages/de/tl_page.php | 15 -- contao/languages/en/tl_page.php | 15 -- .../screenshot_backend_structured_data.png | Bin 88654 -> 0 bytes .../Contao/GeneratePageListener.php | 64 -------- .../Contao/ParseTemplateListener.php | 71 +-------- .../ReplaceDynamicScriptTagsListener.php | 17 +-- src/Manager/JsonLdManager.php | 142 ------------------ src/Model/PageModel.php | 7 - .../Extension/HeadBundleTwigExtension.php | 31 ---- src/Twig/Runtime/SchemaOrgRuntime.php | 33 ---- 15 files changed, 8 insertions(+), 526 deletions(-) delete mode 100644 docs/img/screenshot_backend_structured_data.png delete mode 100644 src/Manager/JsonLdManager.php delete mode 100644 src/Twig/Extension/HeadBundleTwigExtension.php delete mode 100644 src/Twig/Runtime/SchemaOrgRuntime.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 148ed78..5c56726 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. +## [Unreleased] +- Removed: json-ld backport and structured data page settings + ## [1.14.2] - 2025-12-17 - Fixed: Relative image paths had to be absolute @@ -312,4 +315,4 @@ this is possibly breaking! [#7]: https://github.com/heimrichhannot/contao-head-bundle/pull/7 [#5]: https://github.com/heimrichhannot/contao-head-bundle/pull/5 [#4]: https://github.com/heimrichhannot/contao-head-bundle/pull/4 -[#3]: https://github.com/heimrichhannot/contao-head-bundle/pull/3 \ No newline at end of file +[#3]: https://github.com/heimrichhannot/contao-head-bundle/pull/3 diff --git a/README.md b/README.md index a30df7c..fd0a9e4 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,10 @@ This bundle enhances the handling of html `` section tags. It provides ser ## Features - Provide a nice api to set head tags like meta, title, base, link -- Provide additional json-ld schema data - Sets important meta tags like og:title, og:description, og:url and twitter:card out of the box - Allow setting open graph and twitter fallback image on root page - Allow setting twitter author per root page - Backport canonical url option from contao 4.13 for contao 4.9+ -- Backport json-ld support for contao 4.9+ ## Usage @@ -35,43 +33,6 @@ In your root page, you can activate to add fallback image (og:image and twitter: ![Screenshot Meta Data Settings](docs%2Fimg%2Fscreenshot_backend_meta_data.png) -### Add additional schema.org data - -In your root page, you can activate to add additional structured data to you web page. -Following schema.org types are available: -* @Organization -* @WebSite -* @WebPage -* @BreadcrumbList - - -![Screenshot Structured Data Settings](docs%2Fimg%2Fscreenshot_backend_structured_data.png) - -### Set json-ld in your templates - -This bundle backports the methods of contao 4.12+ to contao 4.9+. So usage is the same as in the contao core. - -#### Twig templates - -```twig -{% do add_schema_org({ - '@type': 'NewsArticle', - 'headline': newsHeadline|striptags, - 'datePublished': datetime|date('Y-m-d\TH:i:sP'), -}) %} -``` - -#### PHP templates - -```php -addSchemaOrg([ - '@type' => 'NewsArticle', - 'headline' => $newsHeadline, - 'datePublished' => $datetime->date('Y-m-d\TH:i:sP'), -]); ?> -``` - - ## Integration Use head bundle api set in your code. @@ -159,27 +120,6 @@ class SomeEventListener } ``` -### Set json-ld schema data - -> From contao 4.12 you can use the JsonLdManager service [from the core](https://docs.contao.org/dev/framework/response-context/#the-jsonldmanager). - -To set json-ld schema data, use the `JsonLdManager` service: - -```php -jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->organization(); - $organisation->name('Example and Sons Ltd.'); - $organisation->url('https://example.org'); - } -} -``` ### Reader Config Contao sample ![image](https://github.com/heimrichhannot/contao-head-bundle/assets/51906753/a5e30fdc-66f9-419a-a5a4-1805bb66b227) diff --git a/composer.json b/composer.json index 882446c..9c4b91c 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,6 @@ "contao/core-bundle": "^4.13 || ^5.0", "heimrichhannot/contao-utils-bundle": "^2.219 || ^3.0", "psr/container": "^1.0 || ^2.0", - "spatie/schema-org": "^3.4", "symfony/config": "^4.4 || ^5.4 || ^6.0", "symfony/dependency-injection": "^4.4 || ^5.4 || ^6.0", "symfony/http-kernel": "^4.4 || ^5.4 || ^6.0", diff --git a/config/services.yaml b/config/services.yaml index f9b998e..9170a6e 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -6,7 +6,7 @@ services: Psr\Container\ContainerInterface: '@service_container' HeimrichHannot\HeadBundle\: - resource: '../src/{EventListener,Helper,Twig}/*' + resource: '../src/{EventListener,Helper}/*' exclude: '../src/Helper/LegacyHelper.php' bind: $bundleConfig: '%huh_head%' @@ -23,4 +23,4 @@ services: class: HeimrichHannot\HeadBundle\Manager\TagManager public: true deprecated: ~ - HeimrichHannot\HeadBundle\Manager\TagManager: '@huh.head.tag_manager' \ No newline at end of file + HeimrichHannot\HeadBundle\Manager\TagManager: '@huh.head.tag_manager' diff --git a/contao/dca/tl_page.php b/contao/dca/tl_page.php index 9eaba95..f15dd0b 100644 --- a/contao/dca/tl_page.php +++ b/contao/dca/tl_page.php @@ -23,22 +23,11 @@ ->addField('addHeadDefaultImage', 'meta_legend', PaletteManipulator::POSITION_APPEND) ->applyToPalette('regular', 'tl_page'); -PaletteManipulator::create() - ->addLegend('schema_legend', 'meta_legend', PaletteManipulator::POSITION_AFTER) - ->addField('headAddOrganisationSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) - ->addField('headAddWebSiteSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) - ->addField('headAddWebPageSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) - ->addField('headAddBreadcrumbSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) - ->applyToPalette('root', 'tl_page') - ->applyToPalette('rootfallback', 'tl_page'); - /* * Subpalettes */ $dca['palettes']['__selector__'][] = 'addHeadDefaultImage'; -$dca['palettes']['__selector__'][] = 'headAddOrganisationSchema'; $dca['subpalettes']['addHeadDefaultImage'] = 'headDefaultImage'; -$dca['subpalettes']['headAddOrganisationSchema'] = 'headOrganisationName,headOrganisationWebsite,headOrganisationLogo'; /** * fields. @@ -65,64 +54,6 @@ 'eval' => ['tl_class' => 'w50 clr'], 'sql' => "varchar(255) NOT NULL DEFAULT ''", ], - 'headAddOrganisationSchema' => [ - 'exclude' => true, - 'inputType' => 'checkbox', - 'eval' => [ - 'tl_class' => 'w50 clr', - 'submitOnChange' => true, - ], - 'sql' => "char(1) NOT NULL default ''", - ], - 'headOrganisationName' => [ - 'inputType' => 'text', - 'exclude' => true, - 'eval' => [ - 'tl_class' => 'w50', - 'maxlength' => 128, - ], - 'sql' => "varchar(128) NOT NULL DEFAULT ''", - ], - 'headOrganisationWebsite' => [ - 'inputType' => 'text', - 'exclude' => true, - 'eval' => [ - 'tl_class' => 'w50', - 'maxlength' => 128, - 'rgxp' => 'url', - ], - 'sql' => "varchar(128) NOT NULL DEFAULT ''", - ], - 'headOrganisationLogo' => [ - 'inputType' => 'fileTree', - 'exclude' => true, - 'eval' => ['tl_class' => 'w50 clr', 'fieldType' => 'radio', 'filesOnly' => true, 'extensions' => 'jpg,jpeg,png'], - 'sql' => 'binary(16) NULL', - ], - 'headAddWebSiteSchema' => [ - 'exclude' => true, - 'inputType' => 'checkbox', - 'eval' => [ - 'tl_class' => 'w50 clr', - ], - 'sql' => "char(1) NOT NULL default ''", - ], - 'headAddWebPageSchema' => [ - 'exclude' => true, - 'inputType' => 'checkbox', - 'eval' => [ - 'tl_class' => 'w50 clr', - ], - 'sql' => "char(1) NOT NULL default ''", - ], - 'headAddBreadcrumbSchema' => [ - 'exclude' => true, - 'inputType' => 'checkbox', - 'eval' => [ - 'tl_class' => 'w50 clr', - ], - 'sql' => "char(1) NOT NULL default ''", - ], ]; $dca['fields'] = array_merge($dca['fields'], $fields); diff --git a/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php index 642b09b..8be1fef 100644 --- a/contao/languages/de/tl_page.php +++ b/contao/languages/de/tl_page.php @@ -14,27 +14,12 @@ $lang['addHeadDefaultImage'] = ['Fallback-Bild für die Meta-Tags hinzufügen', 'Dieses Bild wird bspw. für og:image und twitter:image verwendet.']; $lang['headDefaultImage'] = ['Fallback-Bild (mind. 200x200)', 'Wählen Sie hier ein Bild aus. Nur PNG- und JPG-Dateien sind erlaubt.']; $lang['twitterSite'] = ['Twitter @username', 'Der Twitter @username der einer Twitter-Karte zugewiesen werden soll (twitter:site Attribut).']; -$lang['headAddOrganisationSchema'][0] = '@Organization ausgeben'; -$lang['headAddOrganisationSchema'][1] = 'Das @Organization Schema ausgeben.'; -$lang['headOrganisationSchemaName'][0] = 'Name'; -$lang['headOrganisationSchemaName'][1] = 'Geben Sie den Namen der Organisation ein.'; -$lang['headOrganisationLogo'][0] = 'Logo'; -$lang['headOrganisationLogo'][1] = 'Wählen Sie ein Logo aus.'; -$lang['headOrganisationWebsite'][0] = 'URL'; -$lang['headOrganisationWebsite'][1] = 'Geben Sie die URL der Organisation ein.'; -$lang['headAddWebSiteSchema'][0] = '@WebSite ausgeben'; -$lang['headAddWebSiteSchema'][1] = 'Das @WebSite Schema ausgeben.'; -$lang['headAddWebPageSchema'][0] = '@WebPage ausgeben'; -$lang['headAddWebPageSchema'][1] = 'Das @WebPage Schema ausgeben.'; -$lang['headAddBreadcrumbSchema'][0] = '@BreadcrumbList ausgeben'; -$lang['headAddBreadcrumbSchema'][1] = 'Das @BreadcrumbList Schema ausgeben.'; /* * Legends */ $lang['head_legend'] = 'Head-Bundle'; $lang['head_twitter_legend'] = 'Head-Bundle - Twitter'; -$lang['schema_legend'] = 'Strukturierte Daten (Schema.org)'; // if (version_compare(VERSION, '4.13', '<')) { // $lang['canonical_legend'] = 'Kanonische URL'; diff --git a/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php index 1facdbd..6caf045 100644 --- a/contao/languages/en/tl_page.php +++ b/contao/languages/en/tl_page.php @@ -14,27 +14,12 @@ $lang['addHeadDefaultImage'] = ['Add fallback image for the meta tags', 'This image is used for og:image and twitter:image.']; $lang['headDefaultImage'] = ['Fallback image (at least 200x200)', 'Choose an image here. Only PNG and JPG files allowed.']; $lang['twitterSite'] = ['Twitter @username', 'The Twitter @username a twitter card should be attributed to (twitter:site attribute).']; -$lang['headAddOrganisationSchema'][0] = 'Output @Organization'; -$lang['headAddOrganisationSchema'][1] = 'Output the @Organization schema.'; -$lang['headOrganisationName'][0] = 'Name'; -$lang['headOrganisationName'][1] = 'Enter the name of the organisation.'; -$lang['headOrganisationLogo'][0] = 'Logo'; -$lang['headOrganisationLogo'][1] = 'Choose a logo.'; -$lang['headOrganisationWebsite'][0] = 'URL'; -$lang['headOrganisationWebsite'][1] = 'Enter the URL of the organisation.'; -$lang['headAddWebSiteSchema'][0] = 'Output @WebSite'; -$lang['headAddWebSiteSchema'][1] = 'Output the @WebSite schema.'; -$lang['headAddWebPageSchema'][0] = 'Output @WebPage'; -$lang['headAddWebPageSchema'][1] = 'Output the @WebPage schema.'; -$lang['headAddBreadcrumbSchema'][0] = 'Output @BreadcrumbList'; -$lang['headAddBreadcrumbSchema'][1] = 'Output the @BreadcrumbList schema.'; /* * Legends */ $lang['head_legend'] = 'Head-Bundle'; $lang['head_twitter_legend'] = 'Head-Bundle - Twitter'; -$lang['schema_legend'] = 'Structured data (Schema.org)'; // if (version_compare(VERSION, '4.13', '<')) { // $lang['canonical_legend'] = 'Canonical URL'; diff --git a/docs/img/screenshot_backend_structured_data.png b/docs/img/screenshot_backend_structured_data.png deleted file mode 100644 index 5fa61833f73627c042d5f8ae7e582dec9606723e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88654 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 diff --git a/src/EventListener/Contao/GeneratePageListener.php b/src/EventListener/Contao/GeneratePageListener.php index cffaa39..c5cc322 100644 --- a/src/EventListener/Contao/GeneratePageListener.php +++ b/src/EventListener/Contao/GeneratePageListener.php @@ -21,12 +21,9 @@ use HeimrichHannot\HeadBundle\HeadTag\MetaTag; use HeimrichHannot\HeadBundle\Helper\TagHelper; use HeimrichHannot\HeadBundle\Manager\HtmlHeadTagManager; -use HeimrichHannot\HeadBundle\Manager\JsonLdManager; -use HeimrichHannot\UtilsBundle\Util\Utils; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; -use Spatie\SchemaOrg\BaseType; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Contracts\Service\ServiceSubscriberInterface; @@ -40,9 +37,7 @@ class GeneratePageListener implements ServiceSubscriberInterface private ContainerInterface $container; private HtmlHeadTagManager $headTagManager; private RequestStack $requestStack; - private Utils $utils; private TagHelper $tagHelper; - private JsonLdManager $jsonLdManager; private InsertTagParser $insertTagParser; public function __construct( @@ -50,18 +45,14 @@ public function __construct( array $bundleConfig, HtmlHeadTagManager $headTagManager, RequestStack $requestStack, - Utils $utils, TagHelper $tagHelper, - JsonLdManager $jsonLdManager, InsertTagParser $insertTagParser, ) { $this->config = $bundleConfig; $this->container = $container; $this->headTagManager = $headTagManager; $this->requestStack = $requestStack; - $this->utils = $utils; $this->tagHelper = $tagHelper; - $this->jsonLdManager = $jsonLdManager; $this->insertTagParser = $insertTagParser; } @@ -81,7 +72,6 @@ public function __invoke(PageModel $pageModel, LayoutModel $layout, PageRegular $title = $this->insertTagParser->replace('{{page::pageTitle}}'); } - $this->prepareJsonLdContent($pageModel, $title); $this->setOpenGraphTags($title, $description ?? ''); $this->setTwitterTags(); } @@ -254,58 +244,4 @@ private function getHtmlHeadBag(): ?object return null; } - - private function prepareJsonLdContent(PageModel $pageModel, string $title): void - { - /** @var \HeimrichHannot\HeadBundle\Model\PageModel $rootPageModel */ - $rootPageModel = $this->utils->request()->getCurrentRootPageModel($pageModel); - - if (!$rootPageModel) { - return; - } - - if ($rootPageModel->headAddOrganisationSchema) { - $organisation = $this->jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->organization(); - - if ($rootPageModel->headOrganisationName) { - $organisation->name($rootPageModel->headOrganisationName); - } - - if ($rootPageModel->headOrganisationWebsite) { - $organisation->url($rootPageModel->headOrganisationWebsite); - } - - if ($rootPageModel->headOrganisationLogo) { - $path = $this->utils->file()->getPathFromUuid($rootPageModel->headOrganisationLogo); - - if (null !== $path) { - $organisation->logo($path); - } - } - } - - if ($rootPageModel->headAddWebSiteSchema) { - $website = $this->jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->webSite(); - $this->setPropertyIfNotSet($website, 'name', $this->insertTagParser->replace('{{page::mainPageTitle}}')); - $this->setPropertyIfNotSet($website, 'url', $this->utils->request()->getBaseUrl([ - 'pageModel' => $pageModel, - ])); - } - - if ($rootPageModel->headAddWebPageSchema && !$this->utils->request()->isIndexPage($pageModel)) { - $webpage = $this->jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->webPage(); - $this->setPropertyIfNotSet($webpage, 'name', $title); - - if ($pageModel->description) { - $this->setPropertyIfNotSet($webpage, 'description', $pageModel->description); - } - } - } - - private function setPropertyIfNotSet(BaseType $type, string $property, string $value): void - { - if (!$type->getProperty($property)) { - $type->setProperty($property, $value); - } - } } diff --git a/src/EventListener/Contao/ParseTemplateListener.php b/src/EventListener/Contao/ParseTemplateListener.php index c3ed59d..3bcac85 100644 --- a/src/EventListener/Contao/ParseTemplateListener.php +++ b/src/EventListener/Contao/ParseTemplateListener.php @@ -12,11 +12,6 @@ use Contao\Template; use HeimrichHannot\HeadBundle\Helper\LegacyHelper; use HeimrichHannot\HeadBundle\Manager\HtmlHeadTagManager; -use HeimrichHannot\HeadBundle\Manager\JsonLdManager; -use HeimrichHannot\HeadBundle\Model\PageModel; -use HeimrichHannot\UtilsBundle\Util\Utils; -use Spatie\SchemaOrg\Graph; -use Spatie\SchemaOrg\Schema; /** * @Hook("parseTemplate") @@ -25,22 +20,16 @@ class ParseTemplateListener { private array $bundleConfig; private HtmlHeadTagManager $headTagManager; - private JsonLdManager $jsonLdManager; - private Utils $utils; - public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager, JsonLdManager $jsonLdManager, Utils $utils) + public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager) { $this->bundleConfig = $bundleConfig; $this->headTagManager = $headTagManager; - $this->jsonLdManager = $jsonLdManager; - $this->utils = $utils; } public function __invoke(Template $template): void { $this->addLegacyMetaMethod($template); - $this->createBreadcrumbSchema($template); - $this->addSchemaFromArrayMethodPolyfill($template); } protected function addLegacyMetaMethod(Template $template): void @@ -61,62 +50,4 @@ protected function addLegacyMetaMethod(Template $template): void }; } } - - private function createBreadcrumbSchema(Template $template): void - { - if (!str_starts_with($template->getName(), 'mod_breadcrumb')) { - return; - } - - /** @var PageModel|null $rootPageModel */ - $rootPageModel = $this->utils->request()->getCurrentRootPageModel(); - if (!$rootPageModel || !$rootPageModel->headAddBreadcrumbSchema) { - return; - } - - if ($this->utils->request()->isIndexPage()) { - return; - } - - if (!$template->items || !\is_array($items = $template->items)) { - return; - } - - $breadcrumb = $this->jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->breadcrumbList(); - - if (!$breadcrumb->getProperty('itemListElement')) { - $listItems = []; - $position = 0; - - foreach ($items as $item) { - $listItem = Schema::listItem(); - $listItem->position(++$position); - $listItem->name($item['title']); - $listItem->item($item['href']); - $listItems[] = $listItem; - } - $breadcrumb->itemListElement($listItems); - } - } - - /** - * @todo Remove this method when contao 4.12+ is required - */ - private function addSchemaFromArrayMethodPolyfill(Template $template): void - { - if (method_exists($template, 'addSchemaOrg')) { - return; - } - - $jsonLdManager = $this->jsonLdManager; - - $template->addSchemaOrg = function (array $jsonLd) use ($jsonLdManager): void { - $type = $jsonLdManager->createSchemaOrgTypeFromArray($jsonLd); - - $jsonLdManager - ->getGraphForSchema(JsonLdManager::SCHEMA_ORG) - ->set($type, $jsonLd['identifier'] ?? Graph::IDENTIFIER_DEFAULT) - ; - }; - } } diff --git a/src/EventListener/Contao/ReplaceDynamicScriptTagsListener.php b/src/EventListener/Contao/ReplaceDynamicScriptTagsListener.php index 334639f..477cb46 100644 --- a/src/EventListener/Contao/ReplaceDynamicScriptTagsListener.php +++ b/src/EventListener/Contao/ReplaceDynamicScriptTagsListener.php @@ -9,10 +9,8 @@ namespace HeimrichHannot\HeadBundle\EventListener\Contao; use Contao\CoreBundle\Framework\ContaoFramework; -use Contao\CoreBundle\Routing\ResponseContext\JsonLd\JsonLdManager as ContaoJsonLdManager; use Contao\CoreBundle\ServiceAnnotation\Hook; use HeimrichHannot\HeadBundle\Manager\HtmlHeadTagManager; -use HeimrichHannot\HeadBundle\Manager\JsonLdManager; /** * @Hook("replaceDynamicScriptTags") @@ -21,13 +19,11 @@ class ReplaceDynamicScriptTagsListener { private array $bundleConfig; private HtmlHeadTagManager $headTagManager; - private JsonLdManager $jsonLdManager; - public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager, JsonLdManager $jsonLdManager) + public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager) { $this->bundleConfig = $bundleConfig; $this->headTagManager = $headTagManager; - $this->jsonLdManager = $jsonLdManager; } /** @@ -36,7 +32,6 @@ public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagMana public function __invoke(string $buffer): string { $buffer = $this->addHeadTags($buffer); - $buffer = $this->addJsonLs($buffer); return $buffer; } @@ -49,16 +44,6 @@ private function addHeadTags(string $buffer): string return $buffer; } - - private function addJsonLs(string $buffer): string - { - if (class_exists(ContaoJsonLdManager::class)) { - return $buffer; - } - - return $this->replace($buffer, 'TL_BODY', $this->jsonLdManager->collectFinalScriptFromGraphs()); - } - private function replace(string $buffer, string $tag, string $content): string { $nonce = ''; diff --git a/src/Manager/JsonLdManager.php b/src/Manager/JsonLdManager.php deleted file mode 100644 index 4db45c6..0000000 --- a/src/Manager/JsonLdManager.php +++ /dev/null @@ -1,142 +0,0 @@ -container = $container; - } - - public function getGraphForSchema(string $schema): Graph - { - if ($this->getContaoJsLdManager()) { - return $this->getContaoJsLdManager()->getGraphForSchema($schema); - } - - $schema = rtrim($schema, '/'); - - if (!\array_key_exists($schema, $this->graphs)) { - $this->graphs[$schema] = new Graph($schema); - } - - return $this->graphs[$schema]; - } - - /** - * @return array - */ - public function getGraphs(): array - { - return $this->graphs; - } - - public function collectFinalScriptFromGraphs(): string - { - if ($this->getContaoJsLdManager()) { - return $this->getContaoJsLdManager()->collectFinalScriptFromGraphs(); - } - - $buffer = ''; - - foreach ($this->getGraphs() as $graph) { - foreach ($graph->getNodes() as $node) { - /** @var BaseType $schema */ - foreach ($node as $schema) { - $buffer .= $schema->toScript(); - } - } - } - - return $buffer; - } - - /** - * @throws \InvalidArgumentException - */ - public function createSchemaOrgTypeFromArray(array $jsonLd): Type - { - if ($this->getContaoJsLdManager()) { - return $this->getContaoJsLdManager()->createSchemaOrgTypeFromArray($jsonLd); - } - - if (!isset($jsonLd['@type'])) { - throw new \InvalidArgumentException('Must provide the @type property!'); - } - - $schemaClass = '\Spatie\SchemaOrg\\' . $jsonLd['@type']; - - if (!class_exists($schemaClass)) { - throw new \InvalidArgumentException(sprintf('Unknown schema.org type "%s" provided!', $jsonLd['@type'])); - } - - $schema = new $schemaClass(); - unset($jsonLd['@type']); - - foreach ($jsonLd as $k => $v) { - if (\is_array($v) && isset($v['@type'])) { - $v = $this->createSchemaOrgTypeFromArray($v); - } - - $schema->setProperty($k, $v); - } - - return $schema; - } - - public static function getSubscribedServices(): array - { - $services = []; - - if (class_exists(ResponseContextAccessor::class)) { - $services[] = '?' . ResponseContextAccessor::class; - } - - return $services; - } - - private function recursiveKeySort(array &$array): void - { - foreach ($array as &$value) { - if (\is_array($value)) { - self::recursiveKeySort($value); - } - } - - ksort($array); - } - - private function getContaoJsLdManager() - { - if (!class_exists(ResponseContextAccessor::class) || !class_exists(ContaoJsonLdManager::class)) { - return null; - } - - if (!$this->container->has(ResponseContextAccessor::class) - || !$this->container->get(ResponseContextAccessor::class)->getResponseContext()->has(ContaoJsonLdManager::class)) { - return null; - } - - return $this->container->get(ResponseContextAccessor::class)->getResponseContext()->get(ContaoJsonLdManager::class); - } -} diff --git a/src/Model/PageModel.php b/src/Model/PageModel.php index 2b46ced..0c63534 100644 --- a/src/Model/PageModel.php +++ b/src/Model/PageModel.php @@ -3,15 +3,8 @@ namespace HeimrichHannot\HeadBundle\Model; /** - * @property bool $headAddBreadcrumbSchema * @property bool $addHeadDefaultImage * @property string $headDefaultImage - * @property bool $headAddOrganisationSchema - * @property string $headOrganisationName - * @property string $headOrganisationLogo - * @property string $headOrganisationWebsite - * @property bool $headAddWebSiteSchema - * @property bool $headAddWebPageSchema * @property string $twitterSite */ class PageModel extends \Contao\PageModel diff --git a/src/Twig/Extension/HeadBundleTwigExtension.php b/src/Twig/Extension/HeadBundleTwigExtension.php deleted file mode 100644 index 123d958..0000000 --- a/src/Twig/Extension/HeadBundleTwigExtension.php +++ /dev/null @@ -1,31 +0,0 @@ -jsonLdManager = $jsonLdManager; - } - - public function add(array $jsonLd): void - { - $type = $this->jsonLdManager->createSchemaOrgTypeFromArray($jsonLd); - - $this->jsonLdManager - ->getGraphForSchema(JsonLdManager::SCHEMA_ORG) - ->set($type, $jsonLd['identifier'] ?? Graph::IDENTIFIER_DEFAULT) - ; - } -} From 7e06af7aa367761918ee296401568966c50b0c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 12:03:24 +0200 Subject: [PATCH 2/9] restore custom json ld integration --- CHANGELOG.md | 2 +- README.md | 10 +++ composer.json | 1 + contao/dca/tl_page.php | 69 +++++++++++++++ contao/languages/de/tl_page.php | 15 ++++ contao/languages/en/tl_page.php | 15 ++++ .../Contao/GeneratePageListener.php | 84 +++++++++++++++++++ .../Contao/ParseTemplateListener.php | 83 +++++++++++++++++- src/Model/PageModel.php | 7 ++ 9 files changed, 283 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c56726..a7375ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] -- Removed: json-ld backport and structured data page settings +- Removed: json-ld backport ## [1.14.2] - 2025-12-17 - Fixed: Relative image paths had to be absolute diff --git a/README.md b/README.md index fd0a9e4..4bbf0c5 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ This bundle enhances the handling of html `` section tags. It provides ser ## Features - Provide a nice api to set head tags like meta, title, base, link +- Provide additional schema.org json-ld data - Sets important meta tags like og:title, og:description, og:url and twitter:card out of the box - Allow setting open graph and twitter fallback image on root page - Allow setting twitter author per root page @@ -33,6 +34,15 @@ In your root page, you can activate to add fallback image (og:image and twitter: ![Screenshot Meta Data Settings](docs%2Fimg%2Fscreenshot_backend_meta_data.png) +### Add additional schema.org data + +In your root page, you can activate additional structured data for your web page. +Following schema.org types are available: +* @Organization +* @WebSite +* @WebPage +* @BreadcrumbList + ## Integration Use head bundle api set in your code. diff --git a/composer.json b/composer.json index 9c4b91c..882446c 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,7 @@ "contao/core-bundle": "^4.13 || ^5.0", "heimrichhannot/contao-utils-bundle": "^2.219 || ^3.0", "psr/container": "^1.0 || ^2.0", + "spatie/schema-org": "^3.4", "symfony/config": "^4.4 || ^5.4 || ^6.0", "symfony/dependency-injection": "^4.4 || ^5.4 || ^6.0", "symfony/http-kernel": "^4.4 || ^5.4 || ^6.0", diff --git a/contao/dca/tl_page.php b/contao/dca/tl_page.php index f15dd0b..9eaba95 100644 --- a/contao/dca/tl_page.php +++ b/contao/dca/tl_page.php @@ -23,11 +23,22 @@ ->addField('addHeadDefaultImage', 'meta_legend', PaletteManipulator::POSITION_APPEND) ->applyToPalette('regular', 'tl_page'); +PaletteManipulator::create() + ->addLegend('schema_legend', 'meta_legend', PaletteManipulator::POSITION_AFTER) + ->addField('headAddOrganisationSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) + ->addField('headAddWebSiteSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) + ->addField('headAddWebPageSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) + ->addField('headAddBreadcrumbSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) + ->applyToPalette('root', 'tl_page') + ->applyToPalette('rootfallback', 'tl_page'); + /* * Subpalettes */ $dca['palettes']['__selector__'][] = 'addHeadDefaultImage'; +$dca['palettes']['__selector__'][] = 'headAddOrganisationSchema'; $dca['subpalettes']['addHeadDefaultImage'] = 'headDefaultImage'; +$dca['subpalettes']['headAddOrganisationSchema'] = 'headOrganisationName,headOrganisationWebsite,headOrganisationLogo'; /** * fields. @@ -54,6 +65,64 @@ 'eval' => ['tl_class' => 'w50 clr'], 'sql' => "varchar(255) NOT NULL DEFAULT ''", ], + 'headAddOrganisationSchema' => [ + 'exclude' => true, + 'inputType' => 'checkbox', + 'eval' => [ + 'tl_class' => 'w50 clr', + 'submitOnChange' => true, + ], + 'sql' => "char(1) NOT NULL default ''", + ], + 'headOrganisationName' => [ + 'inputType' => 'text', + 'exclude' => true, + 'eval' => [ + 'tl_class' => 'w50', + 'maxlength' => 128, + ], + 'sql' => "varchar(128) NOT NULL DEFAULT ''", + ], + 'headOrganisationWebsite' => [ + 'inputType' => 'text', + 'exclude' => true, + 'eval' => [ + 'tl_class' => 'w50', + 'maxlength' => 128, + 'rgxp' => 'url', + ], + 'sql' => "varchar(128) NOT NULL DEFAULT ''", + ], + 'headOrganisationLogo' => [ + 'inputType' => 'fileTree', + 'exclude' => true, + 'eval' => ['tl_class' => 'w50 clr', 'fieldType' => 'radio', 'filesOnly' => true, 'extensions' => 'jpg,jpeg,png'], + 'sql' => 'binary(16) NULL', + ], + 'headAddWebSiteSchema' => [ + 'exclude' => true, + 'inputType' => 'checkbox', + 'eval' => [ + 'tl_class' => 'w50 clr', + ], + 'sql' => "char(1) NOT NULL default ''", + ], + 'headAddWebPageSchema' => [ + 'exclude' => true, + 'inputType' => 'checkbox', + 'eval' => [ + 'tl_class' => 'w50 clr', + ], + 'sql' => "char(1) NOT NULL default ''", + ], + 'headAddBreadcrumbSchema' => [ + 'exclude' => true, + 'inputType' => 'checkbox', + 'eval' => [ + 'tl_class' => 'w50 clr', + ], + 'sql' => "char(1) NOT NULL default ''", + ], ]; $dca['fields'] = array_merge($dca['fields'], $fields); diff --git a/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php index 8be1fef..8bfa4bf 100644 --- a/contao/languages/de/tl_page.php +++ b/contao/languages/de/tl_page.php @@ -14,12 +14,27 @@ $lang['addHeadDefaultImage'] = ['Fallback-Bild für die Meta-Tags hinzufügen', 'Dieses Bild wird bspw. für og:image und twitter:image verwendet.']; $lang['headDefaultImage'] = ['Fallback-Bild (mind. 200x200)', 'Wählen Sie hier ein Bild aus. Nur PNG- und JPG-Dateien sind erlaubt.']; $lang['twitterSite'] = ['Twitter @username', 'Der Twitter @username der einer Twitter-Karte zugewiesen werden soll (twitter:site Attribut).']; +$lang['headAddOrganisationSchema'][0] = '@Organization ausgeben'; +$lang['headAddOrganisationSchema'][1] = 'Das @Organization Schema ausgeben.'; +$lang['headOrganisationName'][0] = 'Name'; +$lang['headOrganisationName'][1] = 'Geben Sie den Namen der Organisation ein.'; +$lang['headOrganisationLogo'][0] = 'Logo'; +$lang['headOrganisationLogo'][1] = 'Wählen Sie ein Logo aus.'; +$lang['headOrganisationWebsite'][0] = 'URL'; +$lang['headOrganisationWebsite'][1] = 'Geben Sie die URL der Organisation ein.'; +$lang['headAddWebSiteSchema'][0] = '@WebSite ausgeben'; +$lang['headAddWebSiteSchema'][1] = 'Das @WebSite Schema ausgeben.'; +$lang['headAddWebPageSchema'][0] = '@WebPage ausgeben'; +$lang['headAddWebPageSchema'][1] = 'Das @WebPage Schema ausgeben.'; +$lang['headAddBreadcrumbSchema'][0] = '@BreadcrumbList ausgeben'; +$lang['headAddBreadcrumbSchema'][1] = 'Das @BreadcrumbList Schema ausgeben.'; /* * Legends */ $lang['head_legend'] = 'Head-Bundle'; $lang['head_twitter_legend'] = 'Head-Bundle - Twitter'; +$lang['schema_legend'] = 'Strukturierte Daten (Schema.org)'; // if (version_compare(VERSION, '4.13', '<')) { // $lang['canonical_legend'] = 'Kanonische URL'; diff --git a/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php index 6caf045..1facdbd 100644 --- a/contao/languages/en/tl_page.php +++ b/contao/languages/en/tl_page.php @@ -14,12 +14,27 @@ $lang['addHeadDefaultImage'] = ['Add fallback image for the meta tags', 'This image is used for og:image and twitter:image.']; $lang['headDefaultImage'] = ['Fallback image (at least 200x200)', 'Choose an image here. Only PNG and JPG files allowed.']; $lang['twitterSite'] = ['Twitter @username', 'The Twitter @username a twitter card should be attributed to (twitter:site attribute).']; +$lang['headAddOrganisationSchema'][0] = 'Output @Organization'; +$lang['headAddOrganisationSchema'][1] = 'Output the @Organization schema.'; +$lang['headOrganisationName'][0] = 'Name'; +$lang['headOrganisationName'][1] = 'Enter the name of the organisation.'; +$lang['headOrganisationLogo'][0] = 'Logo'; +$lang['headOrganisationLogo'][1] = 'Choose a logo.'; +$lang['headOrganisationWebsite'][0] = 'URL'; +$lang['headOrganisationWebsite'][1] = 'Enter the URL of the organisation.'; +$lang['headAddWebSiteSchema'][0] = 'Output @WebSite'; +$lang['headAddWebSiteSchema'][1] = 'Output the @WebSite schema.'; +$lang['headAddWebPageSchema'][0] = 'Output @WebPage'; +$lang['headAddWebPageSchema'][1] = 'Output the @WebPage schema.'; +$lang['headAddBreadcrumbSchema'][0] = 'Output @BreadcrumbList'; +$lang['headAddBreadcrumbSchema'][1] = 'Output the @BreadcrumbList schema.'; /* * Legends */ $lang['head_legend'] = 'Head-Bundle'; $lang['head_twitter_legend'] = 'Head-Bundle - Twitter'; +$lang['schema_legend'] = 'Structured data (Schema.org)'; // if (version_compare(VERSION, '4.13', '<')) { // $lang['canonical_legend'] = 'Canonical URL'; diff --git a/src/EventListener/Contao/GeneratePageListener.php b/src/EventListener/Contao/GeneratePageListener.php index c5cc322..00d0430 100644 --- a/src/EventListener/Contao/GeneratePageListener.php +++ b/src/EventListener/Contao/GeneratePageListener.php @@ -10,6 +10,7 @@ use Contao\CoreBundle\InsertTag\InsertTagParser; use Contao\CoreBundle\Routing\ResponseContext\HtmlHeadBag\HtmlHeadBag; +use Contao\CoreBundle\Routing\ResponseContext\JsonLd\JsonLdManager; use Contao\CoreBundle\Routing\ResponseContext\ResponseContextAccessor; use Contao\CoreBundle\ServiceAnnotation\Hook; use Contao\LayoutModel; @@ -21,9 +22,11 @@ use HeimrichHannot\HeadBundle\HeadTag\MetaTag; use HeimrichHannot\HeadBundle\Helper\TagHelper; use HeimrichHannot\HeadBundle\Manager\HtmlHeadTagManager; +use HeimrichHannot\UtilsBundle\Util\Utils; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; +use Spatie\SchemaOrg\BaseType; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Contracts\Service\ServiceSubscriberInterface; @@ -33,10 +36,13 @@ */ class GeneratePageListener implements ServiceSubscriberInterface { + private const SCHEMA_ORG = 'https://schema.org'; + private array $config; private ContainerInterface $container; private HtmlHeadTagManager $headTagManager; private RequestStack $requestStack; + private Utils $utils; private TagHelper $tagHelper; private InsertTagParser $insertTagParser; @@ -45,6 +51,7 @@ public function __construct( array $bundleConfig, HtmlHeadTagManager $headTagManager, RequestStack $requestStack, + Utils $utils, TagHelper $tagHelper, InsertTagParser $insertTagParser, ) { @@ -52,6 +59,7 @@ public function __construct( $this->container = $container; $this->headTagManager = $headTagManager; $this->requestStack = $requestStack; + $this->utils = $utils; $this->tagHelper = $tagHelper; $this->insertTagParser = $insertTagParser; } @@ -72,6 +80,7 @@ public function __invoke(PageModel $pageModel, LayoutModel $layout, PageRegular $title = $this->insertTagParser->replace('{{page::pageTitle}}'); } + $this->prepareJsonLdContent($pageModel, $title); $this->setOpenGraphTags($title, $description ?? ''); $this->setTwitterTags(); } @@ -244,4 +253,79 @@ private function getHtmlHeadBag(): ?object return null; } + + private function prepareJsonLdContent(PageModel $pageModel, string $title): void + { + $jsonLdManager = $this->getJsonLdManager(); + + if (!$jsonLdManager) { + return; + } + + /** @var \HeimrichHannot\HeadBundle\Model\PageModel $rootPageModel */ + $rootPageModel = $this->utils->request()->getCurrentRootPageModel($pageModel); + + if (!$rootPageModel) { + return; + } + + if ($rootPageModel->headAddOrganisationSchema) { + $organisation = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->organization(); + + if ($rootPageModel->headOrganisationName) { + $organisation->name($rootPageModel->headOrganisationName); + } + + if ($rootPageModel->headOrganisationWebsite) { + $organisation->url($rootPageModel->headOrganisationWebsite); + } + + if ($rootPageModel->headOrganisationLogo) { + $path = $this->utils->file()->getPathFromUuid($rootPageModel->headOrganisationLogo); + + if (null !== $path) { + $organisation->logo($path); + } + } + } + + if ($rootPageModel->headAddWebSiteSchema) { + $website = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->webSite(); + $this->setPropertyIfNotSet($website, 'name', $this->insertTagParser->replace('{{page::mainPageTitle}}')); + $this->setPropertyIfNotSet($website, 'url', $this->utils->request()->getBaseUrl([ + 'pageModel' => $pageModel, + ])); + } + + if ($rootPageModel->headAddWebPageSchema && !$this->utils->request()->isIndexPage($pageModel)) { + $webpage = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->webPage(); + $this->setPropertyIfNotSet($webpage, 'name', $title); + + if ($pageModel->description) { + $this->setPropertyIfNotSet($webpage, 'description', $pageModel->description); + } + } + } + + private function getJsonLdManager(): ?JsonLdManager + { + if (!$this->container->has(ResponseContextAccessor::class)) { + return null; + } + + $responseContext = $this->container->get(ResponseContextAccessor::class)->getResponseContext(); + + if (!$responseContext->has(JsonLdManager::class)) { + return null; + } + + return $responseContext->get(JsonLdManager::class); + } + + private function setPropertyIfNotSet(BaseType $type, string $property, string $value): void + { + if (!$type->getProperty($property)) { + $type->setProperty($property, $value); + } + } } diff --git a/src/EventListener/Contao/ParseTemplateListener.php b/src/EventListener/Contao/ParseTemplateListener.php index 3bcac85..750654f 100644 --- a/src/EventListener/Contao/ParseTemplateListener.php +++ b/src/EventListener/Contao/ParseTemplateListener.php @@ -8,28 +8,49 @@ namespace HeimrichHannot\HeadBundle\EventListener\Contao; +use Contao\CoreBundle\Routing\ResponseContext\JsonLd\JsonLdManager; +use Contao\CoreBundle\Routing\ResponseContext\ResponseContextAccessor; use Contao\CoreBundle\ServiceAnnotation\Hook; use Contao\Template; use HeimrichHannot\HeadBundle\Helper\LegacyHelper; use HeimrichHannot\HeadBundle\Manager\HtmlHeadTagManager; +use HeimrichHannot\HeadBundle\Model\PageModel; +use HeimrichHannot\UtilsBundle\Util\Utils; +use Psr\Container\ContainerInterface; +use Spatie\SchemaOrg\Schema; +use Symfony\Contracts\Service\ServiceSubscriberInterface; /** * @Hook("parseTemplate") */ -class ParseTemplateListener +class ParseTemplateListener implements ServiceSubscriberInterface { + private const SCHEMA_ORG = 'https://schema.org'; + private array $bundleConfig; private HtmlHeadTagManager $headTagManager; + private ContainerInterface $container; + private Utils $utils; - public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager) + public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager, ContainerInterface $container, Utils $utils) { $this->bundleConfig = $bundleConfig; $this->headTagManager = $headTagManager; + $this->container = $container; + $this->utils = $utils; } public function __invoke(Template $template): void { $this->addLegacyMetaMethod($template); + $this->createBreadcrumbSchema($template); + } + + public static function getSubscribedServices(): array + { + return [ + '?' . ResponseContextAccessor::class, + ]; } protected function addLegacyMetaMethod(Template $template): void @@ -50,4 +71,62 @@ protected function addLegacyMetaMethod(Template $template): void }; } } + + private function createBreadcrumbSchema(Template $template): void + { + if (!str_starts_with($template->getName(), 'mod_breadcrumb')) { + return; + } + + $jsonLdManager = $this->getJsonLdManager(); + + if (!$jsonLdManager) { + return; + } + + /** @var PageModel|null $rootPageModel */ + $rootPageModel = $this->utils->request()->getCurrentRootPageModel(); + if (!$rootPageModel || !$rootPageModel->headAddBreadcrumbSchema) { + return; + } + + if ($this->utils->request()->isIndexPage()) { + return; + } + + if (!$template->items || !\is_array($items = $template->items)) { + return; + } + + $breadcrumb = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->breadcrumbList(); + + if (!$breadcrumb->getProperty('itemListElement')) { + $listItems = []; + $position = 0; + + foreach ($items as $item) { + $listItem = Schema::listItem(); + $listItem->position(++$position); + $listItem->name($item['title']); + $listItem->item($item['href']); + $listItems[] = $listItem; + } + $breadcrumb->itemListElement($listItems); + } + } + + private function getJsonLdManager(): ?JsonLdManager + { + if (!$this->container->has(ResponseContextAccessor::class)) { + return null; + } + + $responseContext = $this->container->get(ResponseContextAccessor::class)->getResponseContext(); + + if (!$responseContext->has(JsonLdManager::class)) { + return null; + } + + return $responseContext->get(JsonLdManager::class); + } } diff --git a/src/Model/PageModel.php b/src/Model/PageModel.php index 0c63534..2b46ced 100644 --- a/src/Model/PageModel.php +++ b/src/Model/PageModel.php @@ -3,8 +3,15 @@ namespace HeimrichHannot\HeadBundle\Model; /** + * @property bool $headAddBreadcrumbSchema * @property bool $addHeadDefaultImage * @property string $headDefaultImage + * @property bool $headAddOrganisationSchema + * @property string $headOrganisationName + * @property string $headOrganisationLogo + * @property string $headOrganisationWebsite + * @property bool $headAddWebSiteSchema + * @property bool $headAddWebPageSchema * @property string $twitterSite */ class PageModel extends \Contao\PageModel From eb865704bf1bca37970282715ade3df6375048a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 14:38:02 +0200 Subject: [PATCH 3/9] use core constants --- src/EventListener/Contao/GeneratePageListener.php | 8 +++----- src/EventListener/Contao/ParseTemplateListener.php | 4 +--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/EventListener/Contao/GeneratePageListener.php b/src/EventListener/Contao/GeneratePageListener.php index 00d0430..582eb19 100644 --- a/src/EventListener/Contao/GeneratePageListener.php +++ b/src/EventListener/Contao/GeneratePageListener.php @@ -36,8 +36,6 @@ */ class GeneratePageListener implements ServiceSubscriberInterface { - private const SCHEMA_ORG = 'https://schema.org'; - private array $config; private ContainerInterface $container; private HtmlHeadTagManager $headTagManager; @@ -270,7 +268,7 @@ private function prepareJsonLdContent(PageModel $pageModel, string $title): void } if ($rootPageModel->headAddOrganisationSchema) { - $organisation = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->organization(); + $organisation = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->organization(); if ($rootPageModel->headOrganisationName) { $organisation->name($rootPageModel->headOrganisationName); @@ -290,7 +288,7 @@ private function prepareJsonLdContent(PageModel $pageModel, string $title): void } if ($rootPageModel->headAddWebSiteSchema) { - $website = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->webSite(); + $website = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->webSite(); $this->setPropertyIfNotSet($website, 'name', $this->insertTagParser->replace('{{page::mainPageTitle}}')); $this->setPropertyIfNotSet($website, 'url', $this->utils->request()->getBaseUrl([ 'pageModel' => $pageModel, @@ -298,7 +296,7 @@ private function prepareJsonLdContent(PageModel $pageModel, string $title): void } if ($rootPageModel->headAddWebPageSchema && !$this->utils->request()->isIndexPage($pageModel)) { - $webpage = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->webPage(); + $webpage = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->webPage(); $this->setPropertyIfNotSet($webpage, 'name', $title); if ($pageModel->description) { diff --git a/src/EventListener/Contao/ParseTemplateListener.php b/src/EventListener/Contao/ParseTemplateListener.php index 750654f..a08e242 100644 --- a/src/EventListener/Contao/ParseTemplateListener.php +++ b/src/EventListener/Contao/ParseTemplateListener.php @@ -25,8 +25,6 @@ */ class ParseTemplateListener implements ServiceSubscriberInterface { - private const SCHEMA_ORG = 'https://schema.org'; - private array $bundleConfig; private HtmlHeadTagManager $headTagManager; private ContainerInterface $container; @@ -98,7 +96,7 @@ private function createBreadcrumbSchema(Template $template): void return; } - $breadcrumb = $jsonLdManager->getGraphForSchema(self::SCHEMA_ORG)->breadcrumbList(); + $breadcrumb = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->breadcrumbList(); if (!$breadcrumb->getProperty('itemListElement')) { $listItems = []; From 6ba8f150309032a7791421b2497bcfa0bdfc0441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 14:55:05 +0200 Subject: [PATCH 4/9] revert rename field --- contao/dca/tl_page.php | 4 ++-- contao/languages/de/tl_page.php | 4 ++-- contao/languages/en/tl_page.php | 4 ++-- src/EventListener/Contao/GeneratePageListener.php | 4 ++-- src/Model/PageModel.php | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contao/dca/tl_page.php b/contao/dca/tl_page.php index 9eaba95..0ca2eaa 100644 --- a/contao/dca/tl_page.php +++ b/contao/dca/tl_page.php @@ -38,7 +38,7 @@ $dca['palettes']['__selector__'][] = 'addHeadDefaultImage'; $dca['palettes']['__selector__'][] = 'headAddOrganisationSchema'; $dca['subpalettes']['addHeadDefaultImage'] = 'headDefaultImage'; -$dca['subpalettes']['headAddOrganisationSchema'] = 'headOrganisationName,headOrganisationWebsite,headOrganisationLogo'; +$dca['subpalettes']['headAddOrganisationSchema'] = 'headOrganisationSchemaName,headOrganisationWebsite,headOrganisationLogo'; /** * fields. @@ -74,7 +74,7 @@ ], 'sql' => "char(1) NOT NULL default ''", ], - 'headOrganisationName' => [ + 'headOrganisationSchemaName' => [ 'inputType' => 'text', 'exclude' => true, 'eval' => [ diff --git a/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php index 8bfa4bf..642b09b 100644 --- a/contao/languages/de/tl_page.php +++ b/contao/languages/de/tl_page.php @@ -16,8 +16,8 @@ $lang['twitterSite'] = ['Twitter @username', 'Der Twitter @username der einer Twitter-Karte zugewiesen werden soll (twitter:site Attribut).']; $lang['headAddOrganisationSchema'][0] = '@Organization ausgeben'; $lang['headAddOrganisationSchema'][1] = 'Das @Organization Schema ausgeben.'; -$lang['headOrganisationName'][0] = 'Name'; -$lang['headOrganisationName'][1] = 'Geben Sie den Namen der Organisation ein.'; +$lang['headOrganisationSchemaName'][0] = 'Name'; +$lang['headOrganisationSchemaName'][1] = 'Geben Sie den Namen der Organisation ein.'; $lang['headOrganisationLogo'][0] = 'Logo'; $lang['headOrganisationLogo'][1] = 'Wählen Sie ein Logo aus.'; $lang['headOrganisationWebsite'][0] = 'URL'; diff --git a/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php index 1facdbd..da70c71 100644 --- a/contao/languages/en/tl_page.php +++ b/contao/languages/en/tl_page.php @@ -16,8 +16,8 @@ $lang['twitterSite'] = ['Twitter @username', 'The Twitter @username a twitter card should be attributed to (twitter:site attribute).']; $lang['headAddOrganisationSchema'][0] = 'Output @Organization'; $lang['headAddOrganisationSchema'][1] = 'Output the @Organization schema.'; -$lang['headOrganisationName'][0] = 'Name'; -$lang['headOrganisationName'][1] = 'Enter the name of the organisation.'; +$lang['headOrganisationSchemaName'][0] = 'Name'; +$lang['headOrganisationSchemaName'][1] = 'Enter the name of the organisation.'; $lang['headOrganisationLogo'][0] = 'Logo'; $lang['headOrganisationLogo'][1] = 'Choose a logo.'; $lang['headOrganisationWebsite'][0] = 'URL'; diff --git a/src/EventListener/Contao/GeneratePageListener.php b/src/EventListener/Contao/GeneratePageListener.php index 582eb19..f5a3688 100644 --- a/src/EventListener/Contao/GeneratePageListener.php +++ b/src/EventListener/Contao/GeneratePageListener.php @@ -270,8 +270,8 @@ private function prepareJsonLdContent(PageModel $pageModel, string $title): void if ($rootPageModel->headAddOrganisationSchema) { $organisation = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->organization(); - if ($rootPageModel->headOrganisationName) { - $organisation->name($rootPageModel->headOrganisationName); + if ($rootPageModel->headOrganisationSchemaName) { + $organisation->name($rootPageModel->headOrganisationSchemaName); } if ($rootPageModel->headOrganisationWebsite) { diff --git a/src/Model/PageModel.php b/src/Model/PageModel.php index 2b46ced..2e41eaf 100644 --- a/src/Model/PageModel.php +++ b/src/Model/PageModel.php @@ -7,7 +7,7 @@ * @property bool $addHeadDefaultImage * @property string $headDefaultImage * @property bool $headAddOrganisationSchema - * @property string $headOrganisationName + * @property string $headOrganisationSchemaName * @property string $headOrganisationLogo * @property string $headOrganisationWebsite * @property bool $headAddWebSiteSchema From de231ceb5049925d17713ef7f999307f8946f114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 15:02:25 +0200 Subject: [PATCH 5/9] restore image --- docs/img/screenshot_backend_structured_data.png | Bin 0 -> 88654 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/img/screenshot_backend_structured_data.png diff --git a/docs/img/screenshot_backend_structured_data.png b/docs/img/screenshot_backend_structured_data.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa61833f73627c042d5f8ae7e582dec9606723e GIT binary patch literal 88654 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 literal 0 HcmV?d00001 From f91332872e616d49d464f7f13efce636399b598e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 15:10:11 +0200 Subject: [PATCH 6/9] corrected field name --- contao/dca/tl_page.php | 4 ++-- contao/languages/de/tl_page.php | 4 ++-- contao/languages/en/tl_page.php | 4 ++-- src/EventListener/Contao/GeneratePageListener.php | 4 ++-- src/Model/PageModel.php | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contao/dca/tl_page.php b/contao/dca/tl_page.php index 0ca2eaa..9eaba95 100644 --- a/contao/dca/tl_page.php +++ b/contao/dca/tl_page.php @@ -38,7 +38,7 @@ $dca['palettes']['__selector__'][] = 'addHeadDefaultImage'; $dca['palettes']['__selector__'][] = 'headAddOrganisationSchema'; $dca['subpalettes']['addHeadDefaultImage'] = 'headDefaultImage'; -$dca['subpalettes']['headAddOrganisationSchema'] = 'headOrganisationSchemaName,headOrganisationWebsite,headOrganisationLogo'; +$dca['subpalettes']['headAddOrganisationSchema'] = 'headOrganisationName,headOrganisationWebsite,headOrganisationLogo'; /** * fields. @@ -74,7 +74,7 @@ ], 'sql' => "char(1) NOT NULL default ''", ], - 'headOrganisationSchemaName' => [ + 'headOrganisationName' => [ 'inputType' => 'text', 'exclude' => true, 'eval' => [ diff --git a/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php index 642b09b..8bfa4bf 100644 --- a/contao/languages/de/tl_page.php +++ b/contao/languages/de/tl_page.php @@ -16,8 +16,8 @@ $lang['twitterSite'] = ['Twitter @username', 'Der Twitter @username der einer Twitter-Karte zugewiesen werden soll (twitter:site Attribut).']; $lang['headAddOrganisationSchema'][0] = '@Organization ausgeben'; $lang['headAddOrganisationSchema'][1] = 'Das @Organization Schema ausgeben.'; -$lang['headOrganisationSchemaName'][0] = 'Name'; -$lang['headOrganisationSchemaName'][1] = 'Geben Sie den Namen der Organisation ein.'; +$lang['headOrganisationName'][0] = 'Name'; +$lang['headOrganisationName'][1] = 'Geben Sie den Namen der Organisation ein.'; $lang['headOrganisationLogo'][0] = 'Logo'; $lang['headOrganisationLogo'][1] = 'Wählen Sie ein Logo aus.'; $lang['headOrganisationWebsite'][0] = 'URL'; diff --git a/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php index da70c71..1facdbd 100644 --- a/contao/languages/en/tl_page.php +++ b/contao/languages/en/tl_page.php @@ -16,8 +16,8 @@ $lang['twitterSite'] = ['Twitter @username', 'The Twitter @username a twitter card should be attributed to (twitter:site attribute).']; $lang['headAddOrganisationSchema'][0] = 'Output @Organization'; $lang['headAddOrganisationSchema'][1] = 'Output the @Organization schema.'; -$lang['headOrganisationSchemaName'][0] = 'Name'; -$lang['headOrganisationSchemaName'][1] = 'Enter the name of the organisation.'; +$lang['headOrganisationName'][0] = 'Name'; +$lang['headOrganisationName'][1] = 'Enter the name of the organisation.'; $lang['headOrganisationLogo'][0] = 'Logo'; $lang['headOrganisationLogo'][1] = 'Choose a logo.'; $lang['headOrganisationWebsite'][0] = 'URL'; diff --git a/src/EventListener/Contao/GeneratePageListener.php b/src/EventListener/Contao/GeneratePageListener.php index f5a3688..582eb19 100644 --- a/src/EventListener/Contao/GeneratePageListener.php +++ b/src/EventListener/Contao/GeneratePageListener.php @@ -270,8 +270,8 @@ private function prepareJsonLdContent(PageModel $pageModel, string $title): void if ($rootPageModel->headAddOrganisationSchema) { $organisation = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->organization(); - if ($rootPageModel->headOrganisationSchemaName) { - $organisation->name($rootPageModel->headOrganisationSchemaName); + if ($rootPageModel->headOrganisationName) { + $organisation->name($rootPageModel->headOrganisationName); } if ($rootPageModel->headOrganisationWebsite) { diff --git a/src/Model/PageModel.php b/src/Model/PageModel.php index 2e41eaf..2b46ced 100644 --- a/src/Model/PageModel.php +++ b/src/Model/PageModel.php @@ -7,7 +7,7 @@ * @property bool $addHeadDefaultImage * @property string $headDefaultImage * @property bool $headAddOrganisationSchema - * @property string $headOrganisationSchemaName + * @property string $headOrganisationName * @property string $headOrganisationLogo * @property string $headOrganisationWebsite * @property bool $headAddWebSiteSchema From 8818ac551a9133d5fd9d24b510c3708c00ca718b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Tue, 12 May 2026 15:52:38 +0200 Subject: [PATCH 7/9] restore screenshot in readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4bbf0c5..816ded7 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ Following schema.org types are available: * @WebPage * @BreadcrumbList +![Screenshot Structured Data Settings](docs%2Fimg%2Fscreenshot_backend_structured_data.png) + ## Integration Use head bundle api set in your code. From f5ab21388ac21473777e43fbfc81ef23951bc44d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Wed, 13 May 2026 15:41:26 +0200 Subject: [PATCH 8/9] remove webPage schema --- CHANGELOG.md | 1 + README.md | 1 - contao/dca/tl_page.php | 9 --------- contao/languages/de/tl_page.php | 2 -- contao/languages/en/tl_page.php | 2 -- src/EventListener/Contao/GeneratePageListener.php | 12 ++---------- src/Model/PageModel.php | 1 - 7 files changed, 3 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7375ec..3a0f60d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Removed: json-ld backport +- Removed: @WebPage schema integration, because it is provided by Contao core ## [1.14.2] - 2025-12-17 - Fixed: Relative image paths had to be absolute diff --git a/README.md b/README.md index 816ded7..d346b93 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ In your root page, you can activate additional structured data for your web page Following schema.org types are available: * @Organization * @WebSite -* @WebPage * @BreadcrumbList ![Screenshot Structured Data Settings](docs%2Fimg%2Fscreenshot_backend_structured_data.png) diff --git a/contao/dca/tl_page.php b/contao/dca/tl_page.php index 9eaba95..4337960 100644 --- a/contao/dca/tl_page.php +++ b/contao/dca/tl_page.php @@ -27,7 +27,6 @@ ->addLegend('schema_legend', 'meta_legend', PaletteManipulator::POSITION_AFTER) ->addField('headAddOrganisationSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) ->addField('headAddWebSiteSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) - ->addField('headAddWebPageSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) ->addField('headAddBreadcrumbSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) ->applyToPalette('root', 'tl_page') ->applyToPalette('rootfallback', 'tl_page'); @@ -107,14 +106,6 @@ ], 'sql' => "char(1) NOT NULL default ''", ], - 'headAddWebPageSchema' => [ - 'exclude' => true, - 'inputType' => 'checkbox', - 'eval' => [ - 'tl_class' => 'w50 clr', - ], - 'sql' => "char(1) NOT NULL default ''", - ], 'headAddBreadcrumbSchema' => [ 'exclude' => true, 'inputType' => 'checkbox', diff --git a/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php index 8bfa4bf..2921389 100644 --- a/contao/languages/de/tl_page.php +++ b/contao/languages/de/tl_page.php @@ -24,8 +24,6 @@ $lang['headOrganisationWebsite'][1] = 'Geben Sie die URL der Organisation ein.'; $lang['headAddWebSiteSchema'][0] = '@WebSite ausgeben'; $lang['headAddWebSiteSchema'][1] = 'Das @WebSite Schema ausgeben.'; -$lang['headAddWebPageSchema'][0] = '@WebPage ausgeben'; -$lang['headAddWebPageSchema'][1] = 'Das @WebPage Schema ausgeben.'; $lang['headAddBreadcrumbSchema'][0] = '@BreadcrumbList ausgeben'; $lang['headAddBreadcrumbSchema'][1] = 'Das @BreadcrumbList Schema ausgeben.'; diff --git a/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php index 1facdbd..b60b6bf 100644 --- a/contao/languages/en/tl_page.php +++ b/contao/languages/en/tl_page.php @@ -24,8 +24,6 @@ $lang['headOrganisationWebsite'][1] = 'Enter the URL of the organisation.'; $lang['headAddWebSiteSchema'][0] = 'Output @WebSite'; $lang['headAddWebSiteSchema'][1] = 'Output the @WebSite schema.'; -$lang['headAddWebPageSchema'][0] = 'Output @WebPage'; -$lang['headAddWebPageSchema'][1] = 'Output the @WebPage schema.'; $lang['headAddBreadcrumbSchema'][0] = 'Output @BreadcrumbList'; $lang['headAddBreadcrumbSchema'][1] = 'Output the @BreadcrumbList schema.'; diff --git a/src/EventListener/Contao/GeneratePageListener.php b/src/EventListener/Contao/GeneratePageListener.php index 582eb19..97ca6ce 100644 --- a/src/EventListener/Contao/GeneratePageListener.php +++ b/src/EventListener/Contao/GeneratePageListener.php @@ -78,7 +78,7 @@ public function __invoke(PageModel $pageModel, LayoutModel $layout, PageRegular $title = $this->insertTagParser->replace('{{page::pageTitle}}'); } - $this->prepareJsonLdContent($pageModel, $title); + $this->prepareJsonLdContent($pageModel); $this->setOpenGraphTags($title, $description ?? ''); $this->setTwitterTags(); } @@ -252,7 +252,7 @@ private function getHtmlHeadBag(): ?object return null; } - private function prepareJsonLdContent(PageModel $pageModel, string $title): void + private function prepareJsonLdContent(PageModel $pageModel): void { $jsonLdManager = $this->getJsonLdManager(); @@ -295,14 +295,6 @@ private function prepareJsonLdContent(PageModel $pageModel, string $title): void ])); } - if ($rootPageModel->headAddWebPageSchema && !$this->utils->request()->isIndexPage($pageModel)) { - $webpage = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->webPage(); - $this->setPropertyIfNotSet($webpage, 'name', $title); - - if ($pageModel->description) { - $this->setPropertyIfNotSet($webpage, 'description', $pageModel->description); - } - } } private function getJsonLdManager(): ?JsonLdManager diff --git a/src/Model/PageModel.php b/src/Model/PageModel.php index 2b46ced..c8c79c4 100644 --- a/src/Model/PageModel.php +++ b/src/Model/PageModel.php @@ -11,7 +11,6 @@ * @property string $headOrganisationLogo * @property string $headOrganisationWebsite * @property bool $headAddWebSiteSchema - * @property bool $headAddWebPageSchema * @property string $twitterSite */ class PageModel extends \Contao\PageModel From 4e205c3d66070aef5afe9908ef8a0046ca984766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6rner?= Date: Wed, 13 May 2026 15:46:40 +0200 Subject: [PATCH 9/9] remove breadcrumb schema --- CHANGELOG.md | 1 + README.md | 1 - contao/dca/tl_page.php | 9 --- contao/languages/de/tl_page.php | 2 - contao/languages/en/tl_page.php | 2 - .../Contao/ParseTemplateListener.php | 81 +------------------ src/Model/PageModel.php | 1 - 7 files changed, 3 insertions(+), 94 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a0f60d..5650b88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Removed: json-ld backport - Removed: @WebPage schema integration, because it is provided by Contao core +- Removed: @BreadcrumbList schema integration, because it is provided by Contao core ## [1.14.2] - 2025-12-17 - Fixed: Relative image paths had to be absolute diff --git a/README.md b/README.md index d346b93..ac90888 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ In your root page, you can activate additional structured data for your web page Following schema.org types are available: * @Organization * @WebSite -* @BreadcrumbList ![Screenshot Structured Data Settings](docs%2Fimg%2Fscreenshot_backend_structured_data.png) diff --git a/contao/dca/tl_page.php b/contao/dca/tl_page.php index 4337960..ec28d74 100644 --- a/contao/dca/tl_page.php +++ b/contao/dca/tl_page.php @@ -27,7 +27,6 @@ ->addLegend('schema_legend', 'meta_legend', PaletteManipulator::POSITION_AFTER) ->addField('headAddOrganisationSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) ->addField('headAddWebSiteSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) - ->addField('headAddBreadcrumbSchema', 'schema_legend', PaletteManipulator::POSITION_APPEND) ->applyToPalette('root', 'tl_page') ->applyToPalette('rootfallback', 'tl_page'); @@ -106,14 +105,6 @@ ], 'sql' => "char(1) NOT NULL default ''", ], - 'headAddBreadcrumbSchema' => [ - 'exclude' => true, - 'inputType' => 'checkbox', - 'eval' => [ - 'tl_class' => 'w50 clr', - ], - 'sql' => "char(1) NOT NULL default ''", - ], ]; $dca['fields'] = array_merge($dca['fields'], $fields); diff --git a/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php index 2921389..0922cfd 100644 --- a/contao/languages/de/tl_page.php +++ b/contao/languages/de/tl_page.php @@ -24,8 +24,6 @@ $lang['headOrganisationWebsite'][1] = 'Geben Sie die URL der Organisation ein.'; $lang['headAddWebSiteSchema'][0] = '@WebSite ausgeben'; $lang['headAddWebSiteSchema'][1] = 'Das @WebSite Schema ausgeben.'; -$lang['headAddBreadcrumbSchema'][0] = '@BreadcrumbList ausgeben'; -$lang['headAddBreadcrumbSchema'][1] = 'Das @BreadcrumbList Schema ausgeben.'; /* * Legends diff --git a/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php index b60b6bf..1ee2bb2 100644 --- a/contao/languages/en/tl_page.php +++ b/contao/languages/en/tl_page.php @@ -24,8 +24,6 @@ $lang['headOrganisationWebsite'][1] = 'Enter the URL of the organisation.'; $lang['headAddWebSiteSchema'][0] = 'Output @WebSite'; $lang['headAddWebSiteSchema'][1] = 'Output the @WebSite schema.'; -$lang['headAddBreadcrumbSchema'][0] = 'Output @BreadcrumbList'; -$lang['headAddBreadcrumbSchema'][1] = 'Output the @BreadcrumbList schema.'; /* * Legends diff --git a/src/EventListener/Contao/ParseTemplateListener.php b/src/EventListener/Contao/ParseTemplateListener.php index a08e242..3bcac85 100644 --- a/src/EventListener/Contao/ParseTemplateListener.php +++ b/src/EventListener/Contao/ParseTemplateListener.php @@ -8,47 +8,28 @@ namespace HeimrichHannot\HeadBundle\EventListener\Contao; -use Contao\CoreBundle\Routing\ResponseContext\JsonLd\JsonLdManager; -use Contao\CoreBundle\Routing\ResponseContext\ResponseContextAccessor; use Contao\CoreBundle\ServiceAnnotation\Hook; use Contao\Template; use HeimrichHannot\HeadBundle\Helper\LegacyHelper; use HeimrichHannot\HeadBundle\Manager\HtmlHeadTagManager; -use HeimrichHannot\HeadBundle\Model\PageModel; -use HeimrichHannot\UtilsBundle\Util\Utils; -use Psr\Container\ContainerInterface; -use Spatie\SchemaOrg\Schema; -use Symfony\Contracts\Service\ServiceSubscriberInterface; /** * @Hook("parseTemplate") */ -class ParseTemplateListener implements ServiceSubscriberInterface +class ParseTemplateListener { private array $bundleConfig; private HtmlHeadTagManager $headTagManager; - private ContainerInterface $container; - private Utils $utils; - public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager, ContainerInterface $container, Utils $utils) + public function __construct(array $bundleConfig, HtmlHeadTagManager $headTagManager) { $this->bundleConfig = $bundleConfig; $this->headTagManager = $headTagManager; - $this->container = $container; - $this->utils = $utils; } public function __invoke(Template $template): void { $this->addLegacyMetaMethod($template); - $this->createBreadcrumbSchema($template); - } - - public static function getSubscribedServices(): array - { - return [ - '?' . ResponseContextAccessor::class, - ]; } protected function addLegacyMetaMethod(Template $template): void @@ -69,62 +50,4 @@ protected function addLegacyMetaMethod(Template $template): void }; } } - - private function createBreadcrumbSchema(Template $template): void - { - if (!str_starts_with($template->getName(), 'mod_breadcrumb')) { - return; - } - - $jsonLdManager = $this->getJsonLdManager(); - - if (!$jsonLdManager) { - return; - } - - /** @var PageModel|null $rootPageModel */ - $rootPageModel = $this->utils->request()->getCurrentRootPageModel(); - if (!$rootPageModel || !$rootPageModel->headAddBreadcrumbSchema) { - return; - } - - if ($this->utils->request()->isIndexPage()) { - return; - } - - if (!$template->items || !\is_array($items = $template->items)) { - return; - } - - $breadcrumb = $jsonLdManager->getGraphForSchema(JsonLdManager::SCHEMA_ORG)->breadcrumbList(); - - if (!$breadcrumb->getProperty('itemListElement')) { - $listItems = []; - $position = 0; - - foreach ($items as $item) { - $listItem = Schema::listItem(); - $listItem->position(++$position); - $listItem->name($item['title']); - $listItem->item($item['href']); - $listItems[] = $listItem; - } - $breadcrumb->itemListElement($listItems); - } - } - - private function getJsonLdManager(): ?JsonLdManager - { - if (!$this->container->has(ResponseContextAccessor::class)) { - return null; - } - - $responseContext = $this->container->get(ResponseContextAccessor::class)->getResponseContext(); - - if (!$responseContext->has(JsonLdManager::class)) { - return null; - } - - return $responseContext->get(JsonLdManager::class); - } } diff --git a/src/Model/PageModel.php b/src/Model/PageModel.php index c8c79c4..19c6553 100644 --- a/src/Model/PageModel.php +++ b/src/Model/PageModel.php @@ -3,7 +3,6 @@ namespace HeimrichHannot\HeadBundle\Model; /** - * @property bool $headAddBreadcrumbSchema * @property bool $addHeadDefaultImage * @property string $headDefaultImage * @property bool $headAddOrganisationSchema