Написал скрипт которые делает запись с экрана, отправляет на сервер а в ответ получает ссылку на файл.
хочу добавить новый тип виджета для текстовго поля, где как раз и были бы мои кнопки управления этим скриптом, а после получения ссылки данные записывались бы в поле.
По сути задача сводится к тому чтобы чтобы при выборке кастомного виджета, возле текстового поля, появлялся произвольный html рядом с этим полем, содержащий кнопки.
Про hook_field_widget_info знаю, но как с помощью него добавить нужный виджет с кодом к определенному полю так и не понял.
Не нашел примеров как зацепиться за определенное поле
Комментарии
План
...
$field = $context['field'];
if ($field['type'] == {{myType}}) {
foreach (element_children($element) as $delta) {
// Add all extra functionality provided by the {{myType}} widget.
$element[$delta]['#process'][] = 'myModule_widget_process';
}
}
...
...
...
//add myButton
$element['myModule_action_delete'] = array(
'#value' =>t('My button'),
'#type' => 'submit',
'#submit' => ['myModule_myButton_submit']
);
return $element;
}
...
...
}
Для начала скопировал ваш код, подставив название своего модуля, кеш сбросил.
<?php
function a_module_field_widget_info() {
$field = $context['field'];
if ($field['type'] == 'text') {
foreach (element_children($element) as $delta) {
$element[$delta]['#process'][] = 'a_module_widget_process';
}
}
}
a_module_widget_process($element, &$form_state, $form) {
$element['myModule_action_delete'] = array(
'#value' =>t('Start recording'),
'#type' => 'submit',
'#submit' => ['a_module_myButton_submit']
);
return $element;
}
}
?>Но у текстового поля ничего не появилось. Насколько я понял, в самом модуле тоже где то должно быть объявлено название нового виджета.
Нет это не новый видгет это расширение имеющихся ... = {{type}} кроме типа поля можно использовать критерии, которые можно так же добавить в инстансе нужно поля доп. свойства и по ним селектировать
/**
* Implements hook_field_form_field_ui_field_edit_form_alter().
*/
function myModule_form_field_ui_field_edit_form_alter(&$form, &$form_state) {
if (!empty($form['#instance']['widget']['type'])) {
$form['instance']['myModuleFieldFeature'] = array(
'#type' => 'checkbox',
'#title' => t('My feature'),
'#default_value' => isset($form['#instance']['myModuleFieldFeature']) ? $form['#instance']['myModuleFieldFeature'] : FALSE,
);
}
}
...
Если нужно полностью новый видгет, то надо использовать
https://api.drupal.org/api/drupal/modules%21field%21field.api.php/functi...
https://api.drupal.org/api/drupal/modules%21field%21field.api.php/functi...