1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-23 05:16:03 +02:00

feat(core): new method getElementName() in Forms #218 #186

This commit is contained in:
Awilum
2019-08-27 14:06:05 +03:00
parent eb3f978c96
commit c1c8edfa7e

View File

@@ -120,55 +120,44 @@ class Forms
// Create attribute value
$property['label'] = Arr::keyExists($property, 'label') ? $property['label'] : true;
$pos = strpos($element, '.');
// Set element name
$element_name = $this->getElementName($element);
if ($pos === false) {
$form_element_name = $element;
} else {
$form_element_name = str_replace('.', '][', "$element") . ']';
}
$pos = strpos($form_element_name, ']');
if ($pos !== false) {
$form_element_name = substr_replace($form_element_name, '', $pos, strlen(']'));
}
// Form value
// Set element value
$form_value = Arr::keyExists($values, $element) ? Arr::get($values, $element) : $property['value'];
// Define form element
// Set form element
$form_element = '';
// Form elements
switch ($property['type']) {
// Simple text-input, for multi-line fields.
case 'textarea':
$form_element = $this->textareaField($element, $form_value, $property);
$form_element = $this->textareaField($element_name, $form_value, $property);
break;
// The hidden field is like the text field, except it's hidden from the content editor.
case 'hidden':
$form_element = $this->hiddenField($element, $form_value, $property);
$form_element = $this->hiddenField($element_name, $form_value, $property);
break;
// A WYSIWYG HTML field.
case 'html':
$form_element = $this->htmlField($element, $form_value, $property);
$form_element = $this->htmlField($element_name, $form_value, $property);
break;
// Selectbox field
case 'select':
$form_element = $this->selectField($form_element_name, $property['options'], $form_value, $property);
$form_element = $this->selectField($element_name, $property['options'], $form_value, $property);
break;
// Template select field for selecting entry template
case 'template_select':
$form_element = $this->templateSelectField($form_element_name, [], $form_value, $property);
$form_element = $this->templateSelectField($element_name, [], $form_value, $property);
break;
// Visibility select field for selecting entry visibility state
case 'visibility_select':
$form_element = $this->visibilitySelectField($form_element_name, ['draft' => __('admin_entries_draft'), 'visible' => __('admin_entries_visible'), 'hidden' => __('admin_entries_hidden')], (! empty($form_value) ? $form_value : 'visible'), $property);
$form_element = $this->visibilitySelectField($element_name, ['draft' => __('admin_entries_draft'), 'visible' => __('admin_entries_visible'), 'hidden' => __('admin_entries_hidden')], (! empty($form_value) ? $form_value : 'visible'), $property);
break;
// Simple text-input, for single-line fields.
default:
$form_element = $this->textField($form_element_name, $form_value, $property);
$form_element = $this->textField($element_name, $form_value, $property);
break;
}
@@ -193,6 +182,25 @@ class Forms
return $form;
}
protected function getElementName(string $element) : string
{
$pos = strpos($element, '.');
if ($pos === false) {
$element_name = $element;
} else {
$element_name = str_replace('.', '][', "$element") . ']';
}
$pos = strpos($element_name, ']');
if ($pos !== false) {
$element_name = substr_replace($element_name, '', $pos, strlen(']'));
}
return $element_name;
}
protected function templateSelectField($name, $options, $value, $property)
{
$_templates_list = $this->flextype['themes']->getTemplates($this->flextype['registry']->get('settings.theme'));