public function getMainEntityOfPageJSONLD($meta, $identity, $locale, $isMainEntityOfPage) { $mainEntityOfPageJSONLD = array(); if (isset($meta['seoMainEntityCategory']) && isset($meta['seoMainEntityOfPage'])) { $entityCategory = $meta['seoMainEntityCategory']; $entityType = $meta['seoMainEntityCategory']; if ($meta['seoMainEntityOfPage']) { $entityType = $meta['seoMainEntityOfPage']; } /* -- Cache it in our class; no need to fetch it more than once */ if ($isMainEntityOfPage) { if (isset($this->cachedMainEntityOfPageJSONLD[$locale])) { return $this->cachedMainEntityOfPageJSONLD[$locale]; } } $title = ""; if (isset($meta['seoTitle'])) { $title = $meta['seoTitle']; } $imageObject = $dateCreated = $dateModified = $datePublished = $copyrightYear = ""; if (isset($meta['seoImageId'])) { $image = craft()->assets->getFileById($meta['seoImageId']); if ($image) { if (isset($meta['seoImageTransform'])) { $transform = $meta['seoImageTransform']; } else { $transform = ''; } $imgUrl = $image->getUrl($transform); $imageObject = array("type" => "ImageObject", "url" => $this->getFullyQualifiedUrl($imgUrl), "width" => $image->getWidth($transform), "height" => $image->getHeight($transform)); } } /* -- If an element was injected into the current template, scrape it for attribuates */ if ($this->lastElement) { $elemType = $this->lastElement->getElementType(); switch ($elemType) { case ElementType::Entry: if (!$isMainEntityOfPage) { $title = $this->lastElement->title; } if ($this->lastElement->dateCreated) { $dateCreated = $this->lastElement->dateCreated->iso8601(); } if ($this->lastElement->dateUpdated) { $dateModified = $this->lastElement->dateUpdated->iso8601(); } if ($this->lastElement->postDate) { $datePublished = $this->lastElement->postDate->iso8601(); } if ($this->lastElement->postDate) { $copyrightYear = $this->lastElement->postDate->year(); } break; case "Commerce_Product": if (!$isMainEntityOfPage) { $title = $this->lastElement->title; } if ($this->lastElement->dateCreated) { $dateCreated = $this->lastElement->dateCreated->iso8601(); } if ($this->lastElement->dateUpdated) { $dateModified = $this->lastElement->dateUpdated->iso8601(); } if ($this->lastElement->postDate) { $datePublished = $this->lastElement->postDate->iso8601(); } if ($this->lastElement->postDate) { $copyrightYear = $this->lastElement->postDate->year(); } break; case ElementType::Category: if (!$isMainEntityOfPage) { $title = $this->lastElement->title; } if ($this->lastElement->dateCreated) { $dateCreated = $this->lastElement->dateCreated->iso8601(); } if ($this->lastElement->dateUpdated) { $dateModified = $this->lastElement->dateUpdated->iso8601(); } if ($this->lastElement->dateCreated) { $datePublished = $this->lastElement->dateCreated->iso8601(); } if ($this->lastElement->dateCreated) { $copyrightYear = $this->lastElement->dateCreated->year(); } break; } } /* -- Main Entity of Page common JSON-LD */ $mainEntityOfPageJSONLD['type'] = $entityType; $mainEntityOfPageJSONLD['name'] = $title; if (isset($meta['seoDescription'])) { $mainEntityOfPageJSONLD['description'] = $meta['seoDescription']; } $mainEntityOfPageJSONLD['image'] = $imageObject; if (isset($meta['canonicalUrl'])) { $mainEntityOfPageJSONLD['url'] = $meta['canonicalUrl']; if ($isMainEntityOfPage) { $mainEntityOfPageJSONLD['mainEntityOfPage'] = $meta['canonicalUrl']; } } /* -- Special-cased attributes */ switch ($entityCategory) { case "CreativeWork": $mainEntityOfPageJSONLD['inLanguage'] = craft()->language; $mainEntityOfPageJSONLD['headline'] = $title; if (isset($meta['seoKeywords'])) { $mainEntityOfPageJSONLD['keywords'] = $meta['seoKeywords']; } $mainEntityOfPageJSONLD['dateCreated'] = $dateCreated; $mainEntityOfPageJSONLD['dateModified'] = $dateModified; $mainEntityOfPageJSONLD['datePublished'] = $datePublished; $mainEntityOfPageJSONLD['copyrightYear'] = $copyrightYear; $mainEntityOfPageJSONLD['author'] = $identity; $mainEntityOfPageJSONLD['publisher'] = $identity; $mainEntityOfPageJSONLD['copyrightHolder'] = $identity; break; case "Event": break; case "Product": break; } if (!empty($meta['breadcrumbs']) && $entityType == "WebPage") { $crumbsJSON = $this->getBreadcrumbsJSONLD($meta['breadcrumbs']); $mainEntityOfPageJSONLD['breadcrumb'] = $crumbsJSON; } $mainEntityOfPageJSONLD = array_filter($mainEntityOfPageJSONLD); if ($isMainEntityOfPage) { $this->cachedMainEntityOfPageJSONLD[$locale] = $mainEntityOfPageJSONLD; } } return $mainEntityOfPageJSONLD; }