menus_attribute-8.x-1.2/menus_attribute.module
menus_attribute.module
<?php
/**
* @file
* Provides alters for menus_attribute.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\menus_attribute\StorageHelper;
/**
* Implements hook_form_FORM_ID_alter().
*/
function menus_attribute_form_alter(array &$form, FormStateInterface $form_state): array {
if ($form['#form_id'] == 'menu_link_content_menu_link_content_form' || $form['#form_id'] == 'menu_link_edit') {
$instance = StorageHelper::instance();
$data = NULL;
$plugin_id = NULL;
$get_path = explode("/", \Drupal::service('path.current')->getPath());
if ($get_path[6] == 'edit') {
if ($form['#form_id'] == 'menu_link_content_menu_link_content_form') {
$id = $get_path[5];
$plugin_id = \Drupal::entityTypeManager()->getStorage('menu_link_content')->load($id)->getPluginId();
}
if ($form['#form_id'] == 'menu_link_edit') {
$plugin_id = $get_path[5];
}
if ($instance->exists($plugin_id)) {
$data = $instance->getData($plugin_id);
}
}
$form['menu_link_attributes'] = [
'#type' => 'details',
'#title' => t('Menu Link Attributes'),
];
$form['menu_link_attributes']['menu_link_id'] = [
'#type' => 'textfield',
'#title' => t('ID'),
'#description' => t('Specifies a unique ID for the link.'),
'#default_value' => $data ? $data->link_id : '',
];
$form['menu_link_attributes']['menu_link_name'] = [
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => $data ? $data->link_name : '',
];
$form['menu_link_attributes']['menu_link_title'] = [
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $data ? $data->link_title : '',
];
$form['menu_link_attributes']['menu_link_rel'] = [
'#type' => 'textfield',
'#title' => t('Relationship'),
'#description' => t("Specifies the relationship between the current page and the link. Enter 'nofollow' here to nofollow this link."),
'#default_value' => $data ? $data->link_rel : '',
];
$form['menu_link_attributes']['menu_link_class'] = [
'#type' => 'textfield',
'#title' => t('Classes'),
'#description' => t('Enter additional classes to be added to the link.'),
'#default_value' => $data ? $data->link_classes : '',
];
$form['menu_link_attributes']['menu_link_style'] = [
'#type' => 'textfield',
'#title' => t('Style'),
'#description' => t('Enter additional styles to be applied to the link.'),
'#default_value' => $data ? $data->link_style : '',
];
$form['menu_link_attributes']['menu_link_target'] = [
'#type' => 'select',
'#title' => t('Target'),
'#description' => t('Specifies where to open the link. Using this attribute breaks XHTML validation.'),
'#options' => [
'' => t('None(ie.same window)'),
'_blank' => t('New window (_blank)'),
'_top' => t('Top window (_top)'),
'_self' => t('Same window (_self)'),
'_parent' => t('Parent window (_parent)'),
],
'#default_value' => $data ? $data->link_target : '',
];
$form['menu_link_attributes']['menu_link_access_key'] = [
'#type' => 'textfield',
'#title' => t('Access Key'),
'#size' => 1,
'#maxlength' => 1,
'#description' => t('Specifies a keyboard shortcut to access this link.'),
'#default_value' => $data ? $data->link_accesskey : '',
];
$form['menu_item_attributes'] = [
'#type' => 'details',
'#title' => t('Menu Item Attributes'),
];
$form['menu_item_attributes']['menu_item_id'] = [
'#type' => 'textfield',
'#title' => t('ID'),
'#description' => t('Specifies a unique ID for the link.'),
'#default_value' => $data ? $data->item_id : '',
];
$form['menu_item_attributes']['menu_item_class'] = [
'#type' => 'textfield',
'#title' => t('Classes'),
'#description' => t('Enter additional classes to be added to the link.'),
'#default_value' => $data ? $data->item_classes : '',
];
$form['menu_item_attributes']['menu_item_style'] = [
'#type' => 'textfield',
'#title' => t('Style'),
'#description' => t('Enter additional styles to be applied to the link.'),
'#default_value' => $data ? $data->item_style : '',
];
$form['actions']['submit']['#submit'][] = '_menus_attribute_form_submit_handler';
}
return $form;
}
/**
* Submit handler.
*/
function _menus_attribute_form_submit_handler(&$form, &$form_state): void {
$plugin_id = NULL;
$instance = StorageHelper::instance();
$get_path = explode("/", \Drupal::service('path.current')->getPath());
if ($get_path[6] == 'edit') {
if ($form['#form_id'] == 'menu_link_content_menu_link_content_form') {
$id = $get_path[5];
$plugin_id = \Drupal::entityTypeManager()->getStorage('menu_link_content')->load($id)->getPluginId();
}
if ($form['#form_id'] == 'menu_link_edit') {
$plugin_id = $get_path[5];
}
}
else {
$plugin_id = $form_state->getBuildInfo()['callback_object']->getEntity()->getPluginId();
}
foreach ($form_state->getValues() as $key => $value) {
$temp[$key] = $value;
}
if (!is_null($plugin_id)) {
($instance->exists($plugin_id)) ? ($instance->update($temp, $plugin_id)) : ($instance->add($temp, $plugin_id));
}
}
/**
* Implements hook_theme_registry_alter().
*/
function menus_attribute_theme_registry_alter(&$theme_registry): void {
$theme_registry['menu']['path'] = \Drupal::service('extension.list.module')->getPath('menus_attribute') . '/templates';
}
