function parseAsTemplate($templateStr, $element) { $result = $templateStr; $result = craft()->config->parseEnvironmentString($result); try { $result = craft()->templates->renderObjectTemplate($result, $element); } catch (\Exception $e) { SeomaticPlugin::log("Template error in the `" . $templateStr . "` template.", LogLevel::Info, true); $result = $templateStr; } return $result; }
public function getMetaFromElement($element) { /* -- See if there is an 'entry' automagically put into this template, and if it contains an Seomatic_Meta */ $entryMeta = null; $entryMetaUrl = ""; if (isset($element) && $element) { $elemType = $element->getElementType(); if ($elemType == ElementType::Entry || $elemType == "Commerce_Product" || $elemType == ElementType::Category) { $attributes = $element->content->attributes; foreach ($attributes as $key => $value) { if (is_object($value) && property_exists($value, "elementType")) { if ($value->elementType == "Seomatic_FieldMeta") { $entryMeta = $value; $entryMetaUrl = $this->getFullyQualifiedUrl($element->url); /* -- If this is a Commerce Product, fill in some additional info */ if ($elemType == "Commerce_Product" && craft()->config->get("renderCommerceProductJSONLD", "seomatic")) { $commerceSettings = craft()->commerce_settings->getSettings(); $variants = $element->getVariants(); $commerceVariants = array(); foreach ($variants as $variant) { $commerceVariant = array('seoProductDescription' => $variant->getDescription(), 'seoProductPrice' => number_format($variant->getPrice(), 2), 'seoProductCurrency' => $commerceSettings['defaultCurrency'], 'seoProductSku' => $variant->getSku()); $commerceVariants[] = $commerceVariant; } if (!empty($commerceVariants)) { $entryMeta['seoCommerceVariants'] = $commerceVariants; } } /* -- Swap in any SEOmatic fields that are pulling from other entry fields */ switch ($entryMeta['seoTitleSource']) { case 'field': if (isset($element[$entryMeta['seoTitleSourceField']])) { $entryMeta['seoTitle'] = $this->getTextFromEntryField($element[$entryMeta['seoTitleSourceField']]); } break; case 'custom': $entryMeta['seoTitle'] = craft()->config->parseEnvironmentString($entryMeta['seoTitle']); try { $entryMeta['seoTitle'] = craft()->templates->renderObjectTemplate($entryMeta['seoTitle'], $element); } catch (Exception $e) { SeomaticPlugin::log("Template error in the `seoTitle` field.", LogLevel::Info, true); } break; } switch ($entryMeta['seoDescriptionSource']) { case 'field': if (isset($element[$entryMeta['seoDescriptionSourceField']])) { $entryMeta['seoDescription'] = $this->getTextFromEntryField($element[$entryMeta['seoDescriptionSourceField']]); } break; case 'custom': $entryMeta['seoDescription'] = craft()->config->parseEnvironmentString($entryMeta['seoDescription']); try { $entryMeta['seoDescription'] = craft()->templates->renderObjectTemplate($entryMeta['seoDescription'], $element); } catch (Exception $e) { SeomaticPlugin::log("Template error in the `seoDescription` field.", LogLevel::Info, true); } break; } switch ($entryMeta['seoKeywordsSource']) { case 'field': if (isset($element[$entryMeta['seoKeywordsSourceField']])) { $entryMeta['seoKeywords'] = $this->getTextFromEntryField($element[$entryMeta['seoKeywordsSourceField']]); } break; case 'keywords': if (isset($element[$entryMeta['seoKeywordsSourceField']])) { $text = $this->getTextFromEntryField($element[$entryMeta['seoKeywordsSourceField']]); $entryMeta['seoKeywords'] = $this->extractKeywords($text); } break; case 'custom': $entryMeta['seoKeywords'] = craft()->config->parseEnvironmentString($entryMeta['seoKeywords']); try { $entryMeta['seoKeywords'] = craft()->templates->renderObjectTemplate($entryMeta['seoKeywords'], $element); } catch (Exception $e) { SeomaticPlugin::log("Template error in the `seoDescription` field.", LogLevel::Info, true); } break; } switch ($entryMeta['seoImageIdSource']) { case 'field': if (isset($element[$entryMeta['seoImageIdSourceField']]) && $element[$entryMeta['seoImageIdSourceField']]->first()) { $entryMeta['seoImageId'] = $element[$entryMeta['seoImageIdSourceField']]->first()->id; } break; } } } } } } return $entryMeta; }