Шпаргалка для работы с объектами и TWIG

Tags: 
Drupal version: 

Надоело всё вспоминать и гулить каждый раз, как и что пишется...  Немного кода, без которого турдно обойтись в любом проекте.

Многие функции отсюда часто использую для определения переменных. которые используются в twig шаблонах

1.Получение значений поля

//получение текста из полей типа select
//в большинстве случаев:
            $allowed_values = $entity->get('field_name')->getSetting('allowed_values');
            $field_value = $entity->get('field_name')->value;
            $field_text = $allowed_values [$field_value];

//original - Это оригинал сущности в хуках типа _update _presave
            $allowed_values = $entity->original->get('field_name')->getSetting('allowed_values');
            $field_value = $entity->original->get('field_name')->value;
            $field_text = $allowed_values[$field_value];

2.Устанвока переменных TWIG

//Часто приходится ставить переменные в через  function theme_preprocess(&$vars, $hook), но они кешируются
//Отключить кеш  можно так:
function theme_preprocess(&$vars, $hook) {
    $vars['#cache']['max-age'] = 0;
}

3.Аргументы  arg() в drupal 8

  $path = \Drupal::request()->getpathInfo();
  $arg  = explode('/',$path);
 // if($arg[1] == 'user' and is_numeric($arg[2])) {
 //     $user_url = \Drupal\user\Entity\User::load($arg[2]);
 //     $vars['mail_user_from_url'] = $user_url->getEmail();
 // }

4.Получить сущность пользователя

    $current_user = \Drupal::currentUser();
    $user = \Drupal\user\Entity\User::load($current_user->id());
    $vars['current_mail_user'] = $user->getEmail();

    if($arg[1] == 'user' and is_numeric($arg[2])) {
        $user_url = \Drupal\user\Entity\User::load($arg[2]);
        $vars['mail_user_from_url'] = $user_url->getEmail();
    }

5. Загрузить сущность, любую. Тут пример как получить профиль пользователя (модуль profile) 

    ->getStorage('profile')
         ->loadByProperties([
             'uid' => $user_url->id(),
             'type' => 'ip_ili_yur_lica',
     ]);

6. Добавить класс к старице термина таксономии

function THEME_NAME_preprocess_html(&$vars) {
    $current_path = \Drupal::service('path.current')->getPath();
    $path_args = explode('/', $current_path);

    if($path_args[1] == 'taxonomy' and $path_args[2] == 'term' and is_numeric($path_args[3])) {
        $vars['attributes']['class'][] = 'taxonomy-term-'.$path_args[3];
    }

}
//Можно и как-то так, но ид термина надо получать либо иначе либо через аргумент
   //$current_path = \Drupal::service('path.current')->getPath();
   //$path_args = explode('/', $current_path);
   //$route_name = \Drupal::routeMatch()->getRouteName();
   //if($route_name == 'entity.taxonomy_term.canonical') {
   //  $vars['attributes']['class'][] = 'taxonomy-term-'.$path_args[3];
   //}

7.Получить node из URL

    $node = \Drupal::entityManager()->getStorage('node')->load($arg[2]);
    if ($node and isset($node->type)) {
        $type_name = $node->type->entity->id();   
    }

 

Tags

module (3) mysql (2) drush (2) pass (1) bootstrap (1) update (1) modal (1) theme (1) css (1) proxy (1) custom (1) sftp (1) php (1) twig (1) mail (1) backups (1) telegram (1) new year (1) Вёрстка (1) ssh (1) Интеграция вёрстки (1)