상속: extends craft\BasePlugin
예제 #1
0
 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;
 }