Перейти к основному содержанию

Получение значения поля типа Список

Отправлено said от чт, 07/28/2016 - 10:54

Получение значения поля типа список делается при помощи двух строк

$field = field_info_field('my_field_name');
$values = list_allowed_values($field);

А это функция на случай необходимости получения значения спискового поля в разных частях кода

function _mymodule_list_field_value($field, $key) {
    $field = field_info_field($field);
    $values = list_allowed_values($field);
    return isset($values[$key]) ? $values[$key] : NULL;
}

 

Теги

Мониторинг ошибок и предупреждений в реальном времени

Отправлено said от пн, 07/25/2016 - 12:02
При помощи drush и команды
drush watchdog-show --sleep-delay=2 --tail

возможно в режиме онлайн отслеживать сообщения о ошибках, которые регистрируются в журнале друпала

Теги

Webform сохранение файла оправленного через ajax-форму

Отправлено said от пн, 05/30/2016 - 11:04

Меняю тип поля файла в вебформе с помощью hook_form_alter()

function mymodule_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'my_webform') {
        $form['submitted']['requisites']['#type'] = 'file';
    }
}

При сабмите формы, файл будет отправляться. Теперь в hook_webform_submission_presave() сохраняю этот файл

Теги

Обновление полей ноды без вызова hook_node_update

Отправлено said от вт, 04/12/2016 - 17:31

Иногда требуется обновить поля ноды, после ее сохранения пользователем.

Если использовать hook_node_update и в нем вызвать node_save произойдет зацикливание скрипта. Чтобы этого не происходило мы вместо node_save используем field_attach_update

Теги

Изменение обертки для элементов формы

Отправлено said от пн, 04/04/2016 - 17:21

В конструкторе формы или в hook_form_alter указываем имя функции темизации обертки

$form['name']['#theme_wrappers'] = array('form_element_no_wrappers');

В hook_theme отпределяем функцию темизации

function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'form_element_no_wrappers' => array(
      'render element'  => 'element',
    ),
  );
}

И собственно сама функция темизации. В данном случае мы убираем все обертки, но можно так же задать свои.

Программный вывод блока

Отправлено said от пт, 04/01/2016 - 15:57

Вывод блока созданного через админку в модуле block

$block = block_load('block', 'block-id');
$block = _block_render_blocks(array($block));
$block = _block_get_renderable_array($block);
$output = drupal_render($block);

Вывод блока созданного модулем

$block = module_invoke('search', 'block_view');
$output = render($block['content']);

Вывод блока созданного модулем views

Теги

Отправка ajax-запроса из javasacript

Отправлено said от пт, 04/01/2016 - 11:38

Динамическое добавление ajax-обработчика на DOM-элемент

// Параметры запроса
var  element_settings = {
    url: path_request_path,
    event: 'click',
};
// Элемент на которые вешаем обработчик
base = $(this).attr("id");

// Создаем ajax объект
Drupal.ajax[base] = new Drupal.ajax(base, $(this), element_settings);

// Имитируем событие, чтобы выполнить ajax запрос
$(this).trigger("click");

Если нужно отправить запрос не привязывая его к елементу, то так

Теги

Небезопасный контент в google chrome

Отправлено said от чт, 03/03/2016 - 14:35

Для того, чтобы запустить хром с возможностью загрузки небезопасного контента используйте ключ --allow-running-insecure-content

Например:

google-chrome --allow-running-insecure-content

Теги

Назначение CTools modal обработчика на ссылку загруженную через ajax

Отправлено said от сб, 02/20/2016 - 17:29

В штатном режиме ссылка на открытие модального окна выводится так

print ctools_modal_text_button($current_city, 'change-region', '', 'ctools-modal-select-city-style');

это отлично работает, если нам заранее известно где в DOM дереве эта ссылка находиться

Если эту ссылку вставить с помощью jQuery уже после того, как страница отрендерилась, обработчик загрузки модального окна нужно вешать вручную. Вот так

Теги