/** * Renders a Preparse field's template. * * @param $fieldType PreparseField_PreparseFieldType * @return string|null */ public function parseField($fieldType) { $craftVersion = craft()->getVersion(); $settings = $fieldType->getSettings(); $fieldTwig = $settings->fieldTwig; $columnType = $settings->columnType; $decimals = $settings->decimals; $element = $fieldType->element; $elementType = $element->getElementType(); $elementTemplateName = strtolower($elementType); // set generateTransformsBeforePageLoad = true $configService = craft()->config; $generateTransformsBeforePageLoad = $configService->get('generateTransformsBeforePageLoad'); $configService->set('generateTransformsBeforePageLoad', true); // save cp template path and set to site templates if (version_compare($craftVersion, '2.6.2951', '<') && craft()->getBuild() < 2778) { $oldPath = craft()->path->getTemplatesPath(); craft()->path->setTemplatesPath(craft()->path->getSiteTemplatesPath()); } else { $oldMode = craft()->templates->getTemplateMode(); craft()->templates->setTemplateMode(TemplateMode::Site); } // render value from the field template try { $fieldValue = craft()->templates->renderString($fieldTwig, array($elementTemplateName => $element)); } catch (\Exception $e) { PreparseFieldPlugin::log('Couldn’t render value for element with id “' . $element->id . '” and preparse field “' . $fieldType->model->handle . '” (' . $e->getMessage() . ').', LogLevel::Error); } // restore cp template paths if (version_compare($craftVersion, '2.6.2951', '<') && craft()->getBuild() < 2778) { craft()->path->setTemplatesPath($oldPath); } else { craft()->templates->setTemplateMode($oldMode); } // set generateTransformsBeforePageLoad back to whatever it was $configService->set('generateTransformsBeforePageLoad', $generateTransformsBeforePageLoad); if (!isset($fieldValue)) { return null; } if ($columnType == 'number') { if ((int) $decimals > 0) { return number_format(trim($fieldValue), (int) $decimals, '.', ''); } else { return number_format(trim($fieldValue), 0, '.', ''); } } return $fieldValue; }
/** * onAfterElementSave hook */ public function onAfterElementSave() { $fieldHandle = $this->model->handle; $fieldTwig = $this->getSettings()->fieldTwig; $elementType = $this->element->getElementType(); $elementTemplateName = strtolower($elementType); $oldPath = craft()->path->getTemplatesPath(); craft()->path->setTemplatesPath(craft()->path->getSiteTemplatesPath()); $parsedData = craft()->templates->renderString($fieldTwig, array($elementTemplateName => $this->element)); craft()->path->setTemplatesPath($oldPath); if ($this->element->getContent()->getAttribute($fieldHandle) !== $parsedData) { $this->element->getContent()->setAttribute($fieldHandle, $parsedData); $success = craft()->elements->saveElement($this->element); if (!$success) { PreparseFieldPlugin::log('Couldn’t save element with id "' . $element->id . '" and preparse field "' . $fieldHandle . '"', LogLevel::Error); } } }
/** * Initializes event listeners */ private function _initEventListeners() { $this->preparsedElements = array('onBeforeSave' => array(), 'onSave' => array()); $obj =& $this; // php 5.3.x fix craft()->on('elements.onBeforeSaveElement', function (Event $event) use(&$obj) { $element = $event->params['element']; if (!in_array($element->id, $obj->preparsedElements['onBeforeSave'])) { $obj->preparsedElements['onBeforeSave'][] = $element->id; $content = craft()->preparseField->getPreparseFieldsContent($element, 'onBeforeSave'); if (!empty($content)) { $element->setContentFromPost($content); } } }); craft()->on('elements.onSaveElement', function (Event $event) use(&$obj) { $element = $event->params['element']; if (!in_array($element->id, $obj->preparsedElements['onSave'])) { $obj->preparsedElements['onSave'][] = $element->id; $content = craft()->preparseField->getPreparseFieldsContent($element, 'onSave'); if (!empty($content)) { $element->setContentFromPost($content); $success = craft()->elements->saveElement($element); // if no success, log error if (!$success) { PreparseFieldPlugin::log('Couldn’t save element with id “' . $element->id . '”.', LogLevel::Error); } } } }); craft()->on('structures.onMoveElement', function (Event $event) use(&$obj) { $element = $event->params['element']; if (craft()->preparseField->shouldParseElementOnMove($element)) { $success = craft()->elements->saveElement($element); // if no success, log error if (!$success) { PreparseFieldPlugin::log('Couldn’t save element with id “' . $element->id . '” in structures.onMoveElement.', LogLevel::Error); } } }); }