Artikel

Drupal 8 Helferlein

(27.02.2018)

Allgemein

Get Parameter aus der URL.
Erweitertes Beispiel: Eine Views-Page mit dem Pfad '/en/%blog/%parameter'

$parameterValue = \Drupal::routeMatch()->getParameter('parameter');

Die Node bekommt man so:

$node = \Drupal::routeMatch()->getParameter('node');

Allerdings gibt es den ein oder anderen Umstand, wo man die node id bekommt. Daher solltet Ihr, wenn es wichtig ist, darauf achten, dass Ihr mit instanceOf Drupal\node\NodeInterface prüft

Doing Links on Drupal 8.
Hier gibt es eine tolle Zusammenfassung über Links: http://agaric.com/blogs/doing-links-drupal-8
Beispiel:

use Drupal\Core\Link;
  $link = Link::createFromRoute('This is a link', 'entity.node.canonical', ['node' => 1]);

use Drupal\Core\Link;
use Drupal\Core\Url;
$link = Link::fromTextAndUrl('This is a link', Url::fromRoute('entity.node.canonical', ['node' => 1]));

Daaaas kann man auch in Twig machen:

<a href="{{url('entity.node.canonical', {'node': node.id} ) }}"> {{ 'This is a link'|t }} </a>

 

Permissions

Hat ein Benutzer eine bestimmte Permission?

$user = \Drupal::currentUser();
if ($user->hasPermission('my permission')) {// do something }

Einer Rolle Rechte hinzufügen/entfernen.
Hinweis: Man kann in Devel anstellen, dass man auf der rechteseite die ID der jeweiligen Permission bei Mouseover angezeigt bekommt.

use Drupal\user\entity\Role;
if(($role = Role::load('MY_ROLE_ID'))) {
      $role->grantPermission('PERMISSION_ID');
      $role->revokePermission('PERMISSION_ID');
   if ($role->save()) {
      drupal_set_message('-- Needed permissions granted/revoked to MY_ROLE_ID' ); // oder drush_print();
   }
   unset($role);

}

Rollen umsortieren

use Drupal\user\entity\Role;
// reorder roles
$roles = [
   0  => 'anonymous',
   1  => 'authenticated',
   2  => 'editor',
   3  => 'product_team',
   8  => 'site_administrator',
   9  => 'administrator',
   10 => 'rest_',
];
foreach ($roles as $roleKey => $roleVal) {
   if
   (
   ($role = Role::load($roleVal))
   ) {
      $role->setWeight($roleKey);
      if ($role->save()) {
         drush_print(
            '-- Successfully changed the weight of role '.$roleVal
            .' to '.$roleKey
         );
      }
      unset($role);
   }
}

User

Reset PW

Wenn ich meine Entwicklungs DB auf die Production DB setze, weiss ich das admin (user 1) pw nicht.

Über Drush geht das ganz einfach

drush uli

und dann einfach den interessanten Teil der URL in den Browser kopieren. Zusammen mit dem LastPass Password manager (zum Beispiel) habe ich so superfix meinen Admin auf mein local admin PW gesetzt.

Man kann es auch "etwas besser" ausdrücken.

drush uli --no-browser --uri=mySite

Mit etwas Glück hast Du dann eine schöne URL, die Du in Deinen Browser kopieren kannst.

Rolle ändern

In unseren Umgebungen (Prod, Stage, QA...) arbeite ich nicht mit user 1. Wenn ich Dinge als Editor teste, nehme ich mir die Rolle "administrator".

So kann man sie sich wieder geben (drupal.stackexchange):

drush user-add-role "administrator" MyUserNameOrId

 

 

Views

Variablen in views nutzen

In views-view-unformatted.html.twig:

{{row.content['#row']._entity.get('MYFIELD').value}}

In views.view.fields.html.twig:

{{ fields.FIELD_NAME.content }}

und in der for Schleife:

{{ field.content }}

Prüfen auf ein Feld kann man hier so:

{% if field == fields.nid %}

Mal checken:

{{ kint(row.FIELD_NAME ,row._entity.get('FIELD_NAME').value) }}

geht auch, wenn man zum Beispiel den value braucht und nicht das komplette Markup(vgl. LINK).