Snippets

Een verzameling kleine code fragmenten voor relatief simpele aanpassingen

Een redirect na login wordt vaak toegevoegd op hook_user_login, maar dat is niet juist. Dit zorgt er voor dat de andere hook_user_login implementaties niet worden uitgevoerd. Het is beter om deze redirect in een custom submit handler te zetten.

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MY_MODULE_form_user_login_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form['#submit'][] = 'MY_MODULE_user_login_form_submit';
}

/**
 * Custom submit handler for the login form.
 */ 
function MY_MODULE_user_login_form_submit($form, FormStateInterface $form_state) {
  $url = Url::fromRoute('');
  $form_state->setRedirectUrl($url); 
}

Hoe kun je een node of entity renderen in Drupal 8 zoals met node_view() in Drupal 7 ?
Hoe toon je een node of entity met een display mode?

$nid = 1;
$entity_type = 'node';
$view_mode = 'teaser';
$view_builder = \Drupal::entityTypeManager()->getViewBuilder($entity_type);

// You could also use Node::load($nid);
$storage = \Drupal::entityTypeManager()->getStorage($entity_type);
$node = $storage->load($nid);

$build = $view_builder->view($node, $view_mode);
$output = render($build);

If you want to add a submenu link you first have to load the parent link and then create a submenu link:

use Drupal\menu_link_content\Entity\MenuLinkContent;

function MY_MODULE_update_8001() {
  $menu_link_parents = \Drupal::entityTypeManager()
    ->getStorage('menu_link_content')
    ->loadByProperties([
      'title' => 'Dashboard',
      'menu_name' => 'main',
    ]);

  $menu_link_parent = reset($menu_link_parents);

  if ($menu_link_parent) {
    MenuLinkContent::create([
      'title' => 'Add tasks',
      'link' => ['uri' => 'internal:/add-task'],
      'menu_name' => 'main',
      'weight' => -50,
      'parent' => $menu_link_parent->getPluginId(),
    ])->save();
  }
}