Özel öğelerim neden işlenmiyor?
Radyo ve onay kutusu türünde özel Web formu öğeleri oluşturmaya çalıştım. Öğe, yönetici için Webform kullanıcı arayüzünde mevcuttur, bunu web formlarıma derleme bölümünden ekleyebilirim, ancak web formu ön ucunda işlenmiyor. Ne kaçırdığım hakkında hiçbir fikrim yok.
(Not: textfield, selectbox, autocomplete türünde başka özel öğeler oluşturdum ve hepsi iyi çalışıyor.)
Aşağıda özel src / Element kodum ve src / Plugin / WebformElement kodum var: (Bu öğeleri ön uç formunda işlemek için başka dosyalar eklemem / değiştirmem gerekir mi?)
--> src/Element/MyCustomRadio.php
<?php
namespace Drupal\my_custom_element\Element;
use Drupal\Core\Render\Element\Radios;
use Drupal\Core\Render\Element\FormElement;
use Drupal\Core\Form\FormStateInterface;
/**
* @FormElement("my_custom_element")
*
*/
class MyCustomRadio extends Radios {
/**
* {@inheritdoc}
*/
public function getInfo() {
$class = get_class($this);
return [
'#input' => TRUE,
'#size' => 60,
'#process' => [
[$class, 'processMyCustomRadio'],
[$class, 'processAjaxForm'],
],
'#element_validate' => [
[$class, 'validateMyCustomRadio'],
],
'#pre_render' => [
[$class, 'preRenderMyCustomRadio'],
],
'#theme' => 'input__my_custom_element',
'#theme_wrappers' => ['form_element'],
];
}
public static function processMyCustomRadio(&$element, FormStateInterface $form_state, &$complete_form) {
// Here you can add and manipulate your element's properties and callbacks.
return $element;
}
public static function validateMyCustomRadio(&$element, FormStateInterface $form_state, &$complete_form) {
// Here you can add custom validation logic.
}
/**
* @param array $element
* @return array
*/
public static function preRenderMyCustomRadio(array $element) {
$element['#attributes']['type'] = 'checkboxes';
Element::setAttributes($element, ['id', 'name','value']);
static::setAttributes($element, ['form-text', 'my-custom-element']);
return $element;
}
}
================================================ ============================================
--> src/Plugin/WebformElement/MyCustomRadio.php
<?php
namespace Drupal\my_custom_element\Plugin\WebformElement;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformElement\Radios;
use Drupal\webform\Plugin\WebformElementBase;
use Drupal\webform\WebformSubmissionInterface;
/**
* Provides a 'my_custom_element' element.
*
* @WebformElement(
* id = "my_custom_radio_element",
* label = @Translation("My Custom Radio"),
* description = @Translation("Provides a webform radio element."),
* category = @Translation("My Custom elements"),
* )
*/
class MyCustomRadio extends Radios {
/**
* {@inheritdoc}
*/
protected function defineDefaultProperties() {
return [
'multiple' => '',
'size' => '',
'minlength' => '',
'maxlength' => '',
'placeholder' => '',
] + parent::defineDefaultProperties();
}
/**
* {@inheritdoc}
*/
public function prepare(array &$element, WebformSubmissionInterface $webform_submission = NULL) {
parent::prepare($element, $webform_submission);
}
/**
* {@inheritdoc}
*/
public function form(array $form, FormStateInterface $form_state) {
$form = parent::form($form, $form_state);
return $form;
}
}
================================================ ============================================
Sorunu net bir şekilde anlamasına yardımcı olması için bir resim de ekledim. Bu modül, taze drupal 8 örneğinde yapılmıştır. Lütfen herhangi bir ayrıntı gerekip gerekmediğini bana bildirin.
Yönetici panelinde: (formuma özel radyolar ekleme seçeneğim var)

Ön uçta: (Özel Radyolar işlenmez, sadece drupal ve katkı radyoları ve onay kutuları oluşturulur)

Yanıtlar
Radyoların veya onay kutularının çalışması için aramanız gerekir
\Drupal\Core\Render\Element\Checkboxes::processCheckboxes
veya
\Drupal\Core\Render\Element\Radios::processRadios
Örnek kodunuz, Radyolar'ı genişletiyor ancak onay kutularını oluşturmaya çalışıyor. Onay kutularını genişletmenizi ve \ Drupal \ Core \ Render \ Element \ Checkboxes :: processCheckboxes dahil varsayılan yöntemleri kademeli olarak geçersiz kılmanızı öneririm.
Aşağıda bir örnek
<?php
namespace Drupal\my_custom_element\Element;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element\Checkboxes;
/**
* Provides a form element for a set of My custom element.
*
* @FormElement("my_custom_element")
*/
class MyCustomElement extends Checkboxes {
/**
* {@inheritdoc}
*/
public function getInfo() {
$properties = parent::getInfo();
// My custom properties.
$class = get_class($this);
$properties['#process'][] = [$class, 'processMyCustomElement'];
$properties['#element_validate'] = [[$class, 'validateMyCustomRadio']];
return $properties;
}
/**
* {@inheritdoc}
*/
public static function processCheckboxes(&$element, FormStateInterface $form_state, &$complete_form) {
// You can override and extend this method.
$element = parent::processCheckboxes($element, $form_state, $complete_form)
return $element;
}
public static function processMyCustomRadio(&$element, FormStateInterface $form_state, &$complete_form) {
// Here you can add and manipulate your element's properties and callbacks.
return $element;
}
public static function validateMyCustomRadio(&$element, FormStateInterface $form_state, &$complete_form) {
// Here you can add custom validation logic.
}
}