Astuce Centrer une popin Bootstrap 3

Sur le site de Bootstrap, voici le code pour afficher un bouton ouvrant une popin :

<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg">Large modal</button>
 
<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
      ...
    </div>
  </div>
</div>

Par défaut la popin sera placée en haut de la fenêtre, ce qui n'est pas toujours très joli :

Popin Bootstrap 3 non centrée verticalement

Si vous préférez que vos popin soient centrées verticalement, vous pouvez ajoutez ces quelques lignes à votre feuille de style :

.modal.in .modal-dialog {
    -webkit-transform: translate(0, calc(50vh - 50%));
    -ms-transform: translate(0, 50vh) translate(0, -50%);
    -o-transform: translate(0, calc(50vh - 50%));
    transform: translate(0, 50vh) translate(0, -50%);
}

Vous obtenez alors ce résultat :

Popin Bootstrap 3 centrée verticalement


Astuce [eZ5] Authentifier un utilisateur programmatiquement

Pour authentifier programmatiquement un utilisateur en front-office, vous pouvez utilisez cette méthode :

<?php
 
use eZ\Publish\Core\MVC\Symfony\Security\User as SecurityUser;
use eZ\Publish\API\Repository\Values\User\User;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
 
 
    /**
     * Connecte l'utilisateur en argument.
     *
     * @param User $user
     *   Utilisateur eZ Publish récupéré depuis le repository
     *
     * @throws \Exception Si une erreur survient lors de la récupération du service de gestion de jeton.
     */
    public function login(User $user)
    {
        // Authentification pour Symfony
        $roles =['ROLE_USER'];
        $security_user = new SecurityUser($user, $roles);
        $security_user->setAPIUser($user);
 
        $token = new UsernamePasswordToken($security_user, null, 'ezpublish_front', $roles);
        $this->container->get('security.token_storage')->setToken($token);
 
        // Authentification pour le repo eZ Publish
        $this->repository->setCurrentUser($user);
    }

Marque-page Ouvrir un PSD sans Photoshop

Vous êtes sous Linux, ou vous n'avez pas Photoshop ? Vous avez besoin d'ouvrir correctement un fichier psd ?

Si c'est juste pour du découpage et pas de la créa, la version online fera très bien l'affaire !

C'est ce que propose le site https://www.photopea.com/.


Astuce Virtual host avec contexte d'URL

Si vous voulez accéder à votre application via un contexte spécifique, il faut ajouter cette ligne dans votre virtual host apache :

Alias /mon-contexte /chemin/vers/mon_appli/web

Si votre vitual host répond au nom de domaine www.mon-site.com par exemple, votre site sera maintenant accessible via l'URL www.mon-site.com/mon-contexte.


Astuce [D8] Erreur lors de l'upgrade de Drupal à propos du module Views

Lors de la mise à jour de Drupal (par exemple de 8.3.7 vers 8.4.3), vous pouvez rencontrer ce genre d'erreur :

$ drush updb -y
The following updates are pending:

views module : 
  Fix table names for revision metadata fields.

Do you wish to run all pending updates? (y/n): y
Après la mise à jour de views                                                    [ok]
Failed: InvalidArgumentException : The configuration property                      [error]
display.default.display_options.filters.my_custom_filter_id.value.2 doesn&#039;t
exist. dans Drupal\Core\Config\Schema\ArrayElement-&gt;get() (ligne 76 de
/var/www/ftvpro/web/core/lib/Drupal/Core/Config/Schema/ArrayElement.php).
Cache rebuild complete.                                                            [ok]
Finished performing updates.

Le module Views est incapable de mettre à jour la base de données correctement, à cause d'un filtre de vue.

Pour éviter ça, cherchez dans vos modules (ou ceux communautaires que vous utilisez) le filtre de vue en question. (Ici my_custom_filter.) Le module qui déclare ce filtre doit également proposer une mise à jour de la base via un fichier yaml. Pour cet exemple, le module my_module doit contenir le fichier config/schema/my_module.views.schema.yml :

# Schema for the views plugins of the my_module module.

views.filter.my_custom_filter:
  type: views.filter.in_operator
  label: 'My custom view filter'

Si ce n'est pas le cas, crééz-le et relancer la commande drush updb.

Remarque : Si on regarde le fichier comment.views.schema.yml que propose le module Comment, on y trouve aussi ce genre de déclarations :

views.argument.argument_comment_user_uid:
  type: views_argument
  label: 'Commented user ID'

views.field.comment_depth:
  type: views_field
  label: 'Comment depth'

views.row.comment_rss:
  type: views_row
  label: 'Comment'
  mapping:
    view_mode:
      type: string
      label: 'Display type'

views.sort.comment_ces_last_comment_name:
  type: views_sort
  label: 'Last comment name'

Le problème peut donc sûrement se produire pour les arguments, les champs, les lignes et les tris des vues déclarés dans les modules.


Astuce Installer un patch via composer

Lorsqu'il y a un bug dans l'une de vos dépendances gérées par composer, il faut éviter de le corriger en modifiant directement la lib. Sinon, la correction sera automatiquement écrasée lors de la prochaine installation/mise à jour de la lib.

Si un patch est proposé sur le site du fournisseur de la lib, mais pas encore intégré dans leur dernière release, vous pouvez demander à Composer de l'appliquer lors de l'installation des dépendances (i.e. composer install).

La lib composer-patches pour Composer, permet cette fonctionnalité. Pour l'utiliser, ajoutez-la dans votre composer.json. Par exemple :

{
  // ...
  "require": {
    // ...
    "cweagans/composer-patches": "~1.0",
    "drupal/core": "~8.4.0"
  },
  // ...
  "extra": {
    // ...
    "patches": {
      "drupal/core": {
        "Quickedit missing css classes": "https://www.drupal.org/files/issues/2551373-35.patch"
      }
    }
  }
}

Explications :

  • Le projet requiert la lib composer-patches comme dépendance.
  • On a ausssi intégré drupal/core, que l'ont veut patcher.
  • Après avoir téléchargé et installé cette dépendance, Composer va appliquer le patch présent à l'URL https://www.drupal.org/files/issues/2551373-35.patch.

Remarque :

On peut appliquer plusieurs patchs successifs pour une ou plusieurs lib. Ex :

{
  // ...
  "require": {
    // ...
    "cweagans/composer-patches": "~1.0",
    "vendor1/lib1": "~1.0",
    "vendor1/lib2": "~1.0",
    "vendor2/lib3": "~1.0"
  },
  // ...
  "extra": {
    // ...
    "patches": {
      "vendor1/lib1": {
        "Patch 1": "https://www.vendor1.org/lib1/patch1.patch",
        "Patch 2": "https://www.vendor1.org/lib1/patch2.patch"
      },
      "vendor2/lib3": {
        "Patch 3": "https://www.vendor2.org/lib3/patch.patch"
      }
    }
  }
}

Astuce Ajouter des variables dans un render array existant

Les render array sont utilisés partout dans Drupal, pour générer des affichages. Lorsqu'on crée un bloc côté PHP, il retourne un render array. Même chose pour un formulaire ou pour un contrôleur.

Les modules peuvent définir leurs propres apparences pour les éléments : ils peuvent décrire de nouveaux render array (hook_theme()) qui seront ensuite utilisables partout.

Pour ajouter des variables à un render array proposé par un autre module, il faut tout d'abord modifier sa définition, pour que la variable puissent être transmise au template. On utilise pour cela le hook_theme_registry_alter().

/**
 * Implements hook_theme_registry_alter().
 */
function mon_module_theme_registry_alter(&$theme_registry) {
  $theme_registry['nom_du_render_array']['variables']['nouvelle_variable'] = 'valeur_par_defaut';
}

Maintenant que la variable "est autorisée", il faut l'ajouter au render array existant. Il s'agit d'un simple hook_preprocess_HOOK().

/**
 * Implements hook_preprocess().
 */
function mon_module_preprocess_nom_du_render_array(&$variables) {
  $variables['nouvelle_variable'] = 'valeur de la variable';
}

Explication :

  • nom_du_render_array est la clé définie dans le hook_theme() du module qui le propose. C'est celle qu'on renseigne lorsqu'on utilise le render array ('#theme" => 'nom_du_render_array').
  • C'est cette clé qu'on utilise dans le nom de notre fonction hook_preprocess_HOOK().

Remarque :

Comme après chaque implémentation de hook(), pensez à vider les caches.


Astuce Étendre la taille d'un disque virtuel

Si vous avez créé un disque avec VirtualBox et qu'il est trop petit, vous pouvez l'agrandir.

Vous pouvez voir les disques d'une VM en cliquant-droit dessus : Configuration... > Stockage.

Configuration des disques

Modifications côté Virtual box

Avant toute chose, prenez le temps de créer un clone intégral de votre VM. En cas de problème vous n'aurez ainsi rien perdu.

Pré-requis

Tout d'abord, il faut que votre disque soit au format vdi (et pas vmdk). Si ce n'est pas le cas, utilisez la commande suivante :

VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi

Si votre disque a une taille fixe et non pas allouée dynamiquement, ajoutez l'option --variant Standard à la commande précédente pour en changer (vous pourrez revenir à l'état précédent par la suite).

Ajout d'espace disque

Il faut ensuite modifier la taille du disque, via la commande :

VBoxManage modifyhd "cloned.vdi" --resize 51200

51200 est la nouvelle taille en Mo.

Retour au format initial

Vous avez maintenant un disque au format vdi, avec une taille dynamique. Pour retrouver un disque au format vmdk, et/ou de taille fixe, inversez la première commande :

VBoxManage clonehd "cloned.vdi" "source.vmdk" --format vmdk --variant Fixed

Modification côté VM

Votre disque a maintenant la taille souhaitée, mais la partition n'a pas changé. Vous avez donc tout un espace disque non alloué.

  • Téléchargez un iso de gparted
  • Insérez-le dans le lecteur virtuel de votre VM
  • Bootez dessus
  • Suivez ce tutoriel
  • Redémarrez votre VM

Vous devriez maintenant avoir un disque dur plus grand et fonctionnel !


Astuce Installer PHP 7 sous Debian 8

Par défaut, les dépôts de Debian 8 proposent d'installer PHP 5.6. Si vous voulez la version 7, procédez ainsi.

  • Ajoutez un nouveau dépôt pour apt, en tant que super administrateur :
echo 'deb http://packages.dotdeb.org jessie all' > /etc/apt/sources.list.d/dotdeb.list
wget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt update
  • Installez PHP 7, avec les extensions que vous souhaitez. Probablement au moins gd, mcrypt, php-pear, intl :
apt-get -y install php7.0 libapache2-mod-php7.0 php-pear php7.0-gd php7.0-mcrypt php7.0-intl

Globalement, les paquets portent le même nom que ceux pour PHP 5.6.


Astuce Installation de PostgreSQL

Navigation

  1. Installation d'un environnement LAPP sous Debian
  2. Installation d'Apache
  3. Installation de PHP
  4. Installation de PostgreSQL

Remarque :

Si vous préférez MySQL, vous pouvez suivre ce tutoriel à la place.

Il vous faudra peut-être également ajouter la ligne suivante au fichier /etc/apache2/apache2.conf puis redémarrer Apache :

Include /etc/phpmyadmin/apache.conf

Installation

  • Exécutez simplement la commande suivante :
sudo apt-get install postgresql postgresql-client postgresql-doc
  • Vérifiez votre version de postgres (ex: 9.4)
ls /etc/postgresql/
  • Forcez postgreSQL à utiliser l'UTF-8. (Adaptez les commandes suivantes avec la bonne version) :
sudo  pg_dropcluster --stop 9.4 main
sudo  pg_createcluster --start -e UTF-8 9.4 main

Configuration générale

Connexion distante

Par défaut, PostgreSQL n'est pas accessible à distance (ex: avec votre IDE sur votre poste de dev).

Pour l'autoriser, modifiez le fichier le fichier de configuration /etc/postgresql/<version>/main/pg_hba.conf, en remplaçant la ligne suivante par celle du dessous :

#local   all         all                               peer
local   all         all                               trust

Redémarrez le service postgresql :

sudo /etc/init.d/postgresql reload

Adminer

Quand on utilise MySQL, on le couple souvent avec PHPMyAdmin, pour pouvoir l'administrer via une interface web. Côté PostgreSQL, il n'y a pas d'outil aussi abouti.

Adminer ne s'en tire tout de même pas si mal. D'ailleurs, il permet aussi de se connecter à plein d'autres SGBD, dont MySQL.

Pour l'installer, suivez les commandes suivantes :

sudo mkdir /var/www/adminer
sudo cd /var/www/adminer
sudo wget https://www.adminer.org/latest.php
sudo mv latest.php index.php
sudo chown -R phpuser:phpuser .

Ensuite si vous utilisez les virtual host pour votre site, ajoutez-en un pour adminer. Pour cela créez par exemple le fichier /etc/sites-available/adminer.conf :

<VirtualHost *:80>
    ServerName db.adminer.dev
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/adminer

    ErrorLog ${APACHE_LOG_DIR}/adminer.error.log
    CustomLog ${APACHE_LOG_DIR}/adminer.access.log combined
</VirtualHost>

Remarques :

  • Vous pouvez bien sur adapter ces configurations, en particulier le nom de domaine db.adminer.dev.
  • Vous devrez probablement ajouter ce nom de domaine dans le fichier hosts de votre poste de dev pour pouvoir l'utiliser.

Activez maintenant ce virtual host et redémarrez Apache :

sudo a2ensite adminer
sudo service apache2 reload

Configuration pour votre site

Par défaut, la base de données postgres a été créée. Son propriétaire s'appelle aussi postgres. Un nouvel utilisateur système postgres a lui aussi été créé.

  • Connectez vous en tant qu'utilisateur postgres (qui est administrateur postgreSQL) :
sudo su - postgres
  • Créez un nouvel utilisateur :
createuser --interactive mypguser

Avec les options suivantes :

  • Super-utilisateur : Non
  • Créateur de base de données : Oui
  • Création de nouveaux rôles : Non

Modifiez son mot de passe :

psql
> ALTER USER mypguser WITH PASSWORD 'new_password';
  • Créez une nouvelle base de données :
createdb -O mypguser mypgdatabase
  • Si besoin, connectez-vous y pour rendre votre utilisateur propriétaire du schéma public :
psql mypgdatabase
> ALTER SCHEMA public OWNER TO mypguser;
  • Redémarrez le service postgresql :
sudo /etc/init.d/postgresql reload

Utilisation

Connectez-vous à la base avec le nouvel utilisateur :

psql -d mypgdatabase -U mypguser

Si vous n'avez pas d'erreur, alors c'est prêt (\q pour quitter la console postgreSQL).


S'abonner à