Snippets

Sauvegarde d'un dossier via FTP (sans rsync ou ssh)

Partager cet article :

Certains mutualisé n'offrent toujours pas d'accès SSH, donc les backup ne peuvent se faire via rsync par exemple. 

On peut dans ce cas utiliser la commande "lftp" avec la ligne de commande suivante, à adapter selon vos environnement :

lftp ftp://USER:PASSWORD@HOST -e "mirror --delete --only-newer --verbose CHEMIN/DISTANT/A/SAUVEGARDER/ /DOSSIER/LOCAL/;exit;"

Ici le dossier CHEMIN/DISTANT/A/SAUVEGARDER du serveur HOST sera sauvegardé récursivement dans le dossier /DOSSIER/LOCAL/ en se connectant avec l'identifiant USER et le mot de passe PASSWORD.

--delete supprimera les fichiers local qui n'existent pas/plus sur le serveur distant (dans le cas de sauvegardes repetitives)

--only-newer ne retransferera pas les fichiers déjà existants (toujours dans le cas de sauvegardes repetitives)

On peut caler cette ligne directement comme une tache cron pour automatiser les sauvegardes.

Note : lftp n'est parfois pas installé de base, pour l'installer sous debian / ubuntu :

sudo apt-get install lftp

centos / redhat / fedora :

sudo yum install lftp

Si vous voulez utiliser sftp c'est possible :

lftp sftp://USER:PASSWORD@HOST -e "mirror --delete --only-newer --verbose CHEMIN/DISTANT/A/SAUVEGARDER/ /DOSSIER/LOCAL/;exit;"

 

Drupal 8 - Ajouter des variables à l'objet javascript DrupalSettings

Partager cet article :

Via le hook hook_page_attachments() :

/**
 * Implements hook_page_attachments().
 *
 * Add custom variables to DrupalSettings.
 */
function MODULE_page_attachments(array &$attachments) {
  $attachments['#attached']['drupalSettings']['basepath'] = base_path();
  $attachments['#attached']['drupalSettings']['pathtotheme'] = base_path() . drupal_get_path('theme', \Drupal::theme()->getActiveTheme()->getName());
  $attachments['#attached']['drupalSettings']['pathtotfiles'] = PublicStream::basePath();
}

 

Drupal 8 - Afficher une liste à puce avec des classes CSS

Partager cet article :

    $items = [];

    $items[] = [
      '#markup' => t('Mon item 1'),
      '#wrapper_attributes' => [
        'class' => [
          'class-css-item-1'
        ]
      ]
    ];

    $items[] = [
      '#markup' => t('Mon item 2'),
      '#wrapper_attributes' => [
        'class' => [
          'class-css-item-2'
        ]
      ]
    ];

    $build = [
      '#theme' => 'item_list',
      '#items' => $items,
      '#list_type' => 'ul',
    ];
    return $build;

 

Drupal 8 - Ajouter un rôle à un utilisateur

Partager cet article :

Simplement utiliser la méthode "addRole" sur l'utilisateur en question en lui passant le nom machine (l'id) du rôle :

$user->addRole('mon_role')

Si vous voulez le faire à la création de l'utilsateur alors vous pouvez utiliser le HOOK_user_presave :

function MON_MODULE_user_presave(Drupal\user\Entity\User $user) {
    $user->addRole('mon_role');
}

 

Drupal 8 - Afficher un bloc où l'on veut

Partager cet article :

On commence par récupérer le service de gestion des blocks :

$block_manager = \Drupal::service('plugin.manager.block');

On construit le bloc que l'on souhaite via son id

$block_array = $block_manager->createInstance('system_breadcrumb_block', []);

On génère le renderable array :

$block_renderable = $block_array->build()

et voila, plus qu'à l'afficher dans un template.

En plus court cela peut donner ça :

$block_manager = \Drupal::service('plugin.manager.block');
$variables['breadcrumbs']= [
    '#type' => 'container',
    "element-content" => $block_manager->createInstance('system_breadcrumb_block', [])->build(),
];

et dans le template twig :

{{ breadcrumbs }}

 

Pages