Craft\SeomaticService::getMainEntityOfPageJSONLD PHP Method

getMainEntityOfPageJSONLD() public method

* -------------------------------------------------------------------------------- Get the Main Entity of Page JSON-LD --------------------------------------------------------------------------------
public getMainEntityOfPageJSONLD ( $meta, $identity, $locale, $isMainEntityOfPage )
    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;
    }