Drupal theme api常用预处理函数(二)

hook_template_preprocess_default_variables_alter

修改模板的默认变量

function hook_template_preprocess_default_variables_alter(&$variables) {
 $variables['is_admin'] = \Drupal::currentUser()->hasPermission('access administration pages');
}

hook_form_alter

修改表单
一个受欢迎的用法是将表单元素添加到节点形式 
dpm($form);

function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  if (isset($form['type']) && $form['type']['#value'] . '_node_settings' == $form_id) {
    $upload_enabled_types = \Drupal::config('mymodule.settings')->get('upload_enabled_types');
    $form['workflow']['upload_' . $form['type']['#value']] = [
      '#type' => 'radios',
      '#title' => t('Attachments'),
      '#default_value' => in_array($form['type']['#value'], $upload_enabled_types) ? 1 : 0,
      '#options' => [t('Disabled'), t('Enabled')],
    ];
    // Add a custom submit handler to save the array of types back to the config file.
    $form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';
  }
}

 // 判断form表单提交按钮的类型,给对应元素添加类
function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
    if (isset($form['actions']['submit']['#button_type'])){
        if($form['actions']['submit']['#button_type'] === 'primary'){
            $form['actions']['submit']['attributes']['class'][] = 'btn btn-primary';
        }
    }
    if (isset($form['actions']['submit']['#button_type'])){
        if($form['actions']['submit']['#button_type'] === 'danger'){
            $form['actions']['submit']['attributes']['class'][] = 'btn btn-danger';
        }
    }
}

template_preprocess_table

修改表格

function hook_preprocess_table(&$variables){
    $variables['attributes']['class'][] = 'table';
    $variables['attributes']['class'][] = 'table-boreder';
    $variables['#attached']['library'][] = 'themename/table'
}

template_preprocess_views_view_table

视图表格

function hook_preprocess_views_view_table(&$variables){
    $variables['attributes']['class'][] = 'table';
    $variables['attributes']['class'][] = 'table-boreder';
    $variables['#attached']['library'][] = 'themename/views-table'
}

preprocess_form_element

表单元素预处理

function hook_preprocess_form_element(&$variables){
    // 元素的type赋值给label #attributes 下面的type,就可以在twig模板里面判断使用。
    $variables['label']['#attributes']['type'] = $variables['type'];
}