diff --git a/src/fields/Checkboxes.php b/src/fields/Checkboxes.php index bbc355b..9de46d0 100644 --- a/src/fields/Checkboxes.php +++ b/src/fields/Checkboxes.php @@ -30,7 +30,7 @@ public function getSettingsHtml() ] ); } - + public function getContentColumnType(): string { return $this->columnType; @@ -41,14 +41,23 @@ public function normalizeValue($value, ElementInterface $element = null): string $view = Craft::$app->getView(); $templateMode = $view->getTemplateMode(); $view->setTemplateMode($view::TEMPLATE_MODE_SITE); - + $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->checkboxOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + if ($this->isFresh($element)) : foreach ($options as $key => $option) : if (!empty($option['default'])) : @@ -56,14 +65,14 @@ public function normalizeValue($value, ElementInterface $element = null): string endif; endforeach; endif; - + if (is_array($value)) : $value = json_encode($value); endif; - + return (is_null($value) ? '' : $value); } - + public function getInputHtml($value, ElementInterface $element = null): string { $view = Craft::$app->getView(); @@ -72,11 +81,20 @@ public function getInputHtml($value, ElementInterface $element = null): string $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->checkboxOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + return Craft::$app->getView()->renderTemplate('craft-dynamic-fields/_includes/forms/checkboxGroup', [ 'name' => $this->handle, 'values' => $value, diff --git a/src/fields/Dropdown.php b/src/fields/Dropdown.php index 4c69903..bc81525 100644 --- a/src/fields/Dropdown.php +++ b/src/fields/Dropdown.php @@ -13,7 +13,7 @@ class Dropdown extends Field { - + public $dropdownOptions = ''; public $columnType = 'text'; @@ -31,25 +31,34 @@ public function getSettingsHtml() ] ); } - + public function getContentColumnType(): string { return $this->columnType; } public function normalizeValue($value, ElementInterface $element = null): string - { + { $view = Craft::$app->getView(); $templateMode = $view->getTemplateMode(); $view->setTemplateMode($view::TEMPLATE_MODE_SITE); $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->dropdownOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + if ($this->isFresh($element) ) : foreach ($options as $key => $option) : if (!empty($option['default'])) : @@ -57,10 +66,10 @@ public function normalizeValue($value, ElementInterface $element = null): string endif; endforeach; endif; - + return (is_null($value) ? '' : $value); } - + public function getInputHtml($value, ElementInterface $element = null): string { $view = Craft::$app->getView(); @@ -69,11 +78,20 @@ public function getInputHtml($value, ElementInterface $element = null): string $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->dropdownOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + return Craft::$app->getView()->renderTemplate('craft-dynamic-fields/_includes/forms/select', [ 'name' => $this->handle, 'value' => $value, diff --git a/src/fields/Multiselect.php b/src/fields/Multiselect.php index 80bf037..3069b54 100644 --- a/src/fields/Multiselect.php +++ b/src/fields/Multiselect.php @@ -32,7 +32,7 @@ public function getSettingsHtml() ] ); } - + public function getContentColumnType(): string { return $this->columnType; @@ -43,14 +43,23 @@ public function normalizeValue($value, ElementInterface $element = null): string $view = Craft::$app->getView(); $templateMode = $view->getTemplateMode(); $view->setTemplateMode($view::TEMPLATE_MODE_SITE); - + $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->multiselectOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + if ($this->isFresh($element)) : foreach ($options as $key => $option) : if (!empty($option['default'])) : @@ -58,32 +67,41 @@ public function normalizeValue($value, ElementInterface $element = null): string endif; endforeach; endif; - + if (is_array($value)) : $value = json_encode($value); endif; - + return (is_null($value) ? '' : $value); } - + public function getInputHtml($value, ElementInterface $element = null): string { $view = Craft::$app->getView(); $templateMode = $view->getTemplateMode(); $view->setTemplateMode($view::TEMPLATE_MODE_SITE); - + $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->multiselectOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + return Craft::$app->getView()->renderTemplate('craft-dynamic-fields/_includes/forms/multiselect', [ 'name' => $this->handle, 'values' => $value, 'options' => $options, 'size' => ($this->fieldHeight > 0 ? $this->fieldHeight : count($options)) ]); - } -} \ No newline at end of file + } +} diff --git a/src/fields/Radiobuttons.php b/src/fields/Radiobuttons.php index 0571e90..f98c8c6 100644 --- a/src/fields/Radiobuttons.php +++ b/src/fields/Radiobuttons.php @@ -13,7 +13,7 @@ class Radiobuttons extends Field { - + public $radioOptions = ''; public $columnType = 'text'; @@ -31,25 +31,34 @@ public function getSettingsHtml() ] ); } - + public function getContentColumnType(): string { return $this->columnType; } public function normalizeValue($value, ElementInterface $element = null): string - { + { $view = Craft::$app->getView(); $templateMode = $view->getTemplateMode(); $view->setTemplateMode($view::TEMPLATE_MODE_SITE); $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->radioOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + if ($this->isFresh($element) ) : foreach ($options as $key => $option) : if (!empty($option['default'])) : @@ -57,10 +66,10 @@ public function normalizeValue($value, ElementInterface $element = null): string endif; endforeach; endif; - + return (is_null($value) ? '' : $value); } - + public function getInputHtml($value, ElementInterface $element = null): string { $view = Craft::$app->getView(); @@ -69,11 +78,20 @@ public function getInputHtml($value, ElementInterface $element = null): string $variables['element'] = $element; $variables['this'] = $this; - + + $siteHandle = Craft::$app->request->get('site', null); + $currentSite = Craft::$app->sites->currentSite; + if ($siteHandle && $siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite(Craft::$app->sites->getSiteByHandle($siteHandle)); + } + $options = json_decode('[' . $view->renderString($this->radioOptions, $variables) . ']', true); - + $view->setTemplateMode($templateMode); - + if ($siteHandle !== $currentSite->handle) { + Craft::$app->sites->setCurrentSite($currentSite); + } + return Craft::$app->getView()->renderTemplate('craft-dynamic-fields/_includes/forms/radioGroup', [ 'name' => $this->handle, 'value' => $value,