You are here

node_class.module in Node Class 8

Same filename and directory in other branches
  1. 6.2 node_class.module
  2. 6 node_class.module
  3. 7 node_class.module

This is the file description for Node class module.

This file adds a fieldset to the node form and adds classes to the node page in article tag.

File

node_class.module
View source
<?php

/**
 * @file
 * This is the file description for Node class module.
 *
 * This file adds a fieldset to the node form and adds classes to the
 * node page in article tag.
 */
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function node_class_form_node_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
  $form['node_class_group'] = [
    '#type' => 'details',
    '#title' => t('Node Class settings'),
    '#description' => t('Assign CSS classes to the node.'),
    '#group' => 'advanced',
    '#open' => FALSE,
    '#access' => TRUE,
    '#attributes' => [
      'class' => [
        'node-class-form',
      ],
    ],
  ];
  $form['node_class']['#group'] = 'node_class_group';
}

/**
 * Implements hook_entity_base_field_info().
 */
function node_class_entity_base_field_info(EntityTypeInterface $entity_type) {
  if ($entity_type
    ->id() === 'node') {
    $fields['node_class'] = BaseFieldDefinition::create('string')
      ->setLabel(t('CSS class(es)'))
      ->setDisplayOptions('form', [
      'type' => 'string_textfield',
      'weight' => 35,
    ])
      ->setDisplayConfigurable('form', TRUE);
    return $fields;
  }
}

/**
 * Implements hook_preprocess_html().
 */
function node_class_preprocess_node(&$variables) {
  if (!empty($variables['node'])) {
    $entity = $variables['node'];
    $classes = $entity
      ->get('node_class')
      ->getValue();
    if (!empty($classes)) {
      $variables['attributes']['class'][] = $classes['0']['value'];
    }
  }
}