Le module weight permet d'ajouter un attribut de "poids" au contenu qui peut être utilisé dans les listing pour les ordonner comme l'on veut.
La version 8 s'intègre très bien avec views et permet d'avoir un réordonnancent en backoffice sur un listing de contenu. (ce qui pouvait être obtenu sous drupal 7 avec la combinaison weight + draggable views)
Installation du module
"À l'ancienne" en téléchargeant la dernière version sur drupal.org : https://www.drupal.org/project/weight
ou via composer avec composer require drupal/weight.
La version 8.x-3.0 du module est sortie, mais à ce jour elle nécessite 3 patches pour fonctionner correctement :
- Strict warning: Non-static method : https://www.drupal.org/files/issues/weight-non-static-method-2671844-3…
- Views widget assumes that weight field name is named 'field_weight' : https://www.drupal.org/files/issues/weight-views-field-name-2687953-0.p…
- Weight selector missing : https://www.drupal.org/files/issues/weight-show-selector-2671840-4.patch
Si vous utilisez composer pour gérer vos modules, voici la section à ajouter à votre fichier composer.json pour patcher le module automatiquement :
// Dans la section "extra" "patches": { "drupal/weight": { "Strict warning: Non-static method ": "https://www.drupal.org/files/issues/weight-non-static-method-2671844-3.patch", "Views widget assumes that weight field name is named 'field_weight'": "https://www.drupal.org/files/issues/weight-views-field-name-2687953-0.patch", "Weight selector missing": "https://www.drupal.org/files/issues/weight-show-selector-2671840-4.patch" } }
Plus d'informations sur la gestion des patchs via composer ici.
Configuration du tri
Première chose à faire, ajouter un champ de type "Poids" au type de contenu / entité que l'on souhaite trier :
Vous pourrez ensuite configurer le range qui par défaut est de 20 (donc possibilité de trier de -20 à +20) vous pouvez l'augmenter si vous avez beaucoup de contenu.
Maintenant nous allons utiliser créer une vue d'administration pour pouvoir "drag'n'droper" les contenus pour en changer le poids.
Il faut utiliser le format "Tableau" et bien penser à limiter au type de contenu que l'on souhaite trier :
Ajoutons aux champs, le champs "poids" que nous avons créé, afin d'avoir la petite flèche multidimensionnelle pour réordonner. Attention il faut bien prendre l'élément "Selector" si l'on sélectionne l'autre, alors on aura juste une cellule dans le tableau nous indiquant le poids du contenu, ce n'est pas ce que l'on veut ici :
Deuxième chose à faire, ajouter un critère de tri sur ce champ :
Évidement il faudra trier par poids croissant (un contenu avec un poids de -10 doit être placé avant celui qui a un poids de 10).
Réordonnez les critères de tri pour mettre le tri par poids en premier :
Enregistrez votre vue et rendez-vous sur la page crée, vous pouvez maintenant réordonner vos contenus comme vous le souhaiter, en pensant bien à enregistrer.
Enfin, pensez bien à modifier vos vues front pour prendre en compte le critère de tri maintenant existant (de la même façon que nous l'avons créé dans la vue backoffice.)
Commentaires
Bonjour,
j'ai suivi le tuto et j'ai un soucis pour patcher le module.
J'ai donc ajouté "patches" dans "extra" de mon fichier composer.json à la racine de mon projet, puis un composer update et install.
"extra": {
"_readme": [
"By default Drupal loads the autoloader from ./vendor/autoload.php.",
"To change the autoloader you can edit ./autoload.php.",
"This file specifies the packages.drupal.org repository.",
"You can read more about this composer repository at:",
"https://www.drupal.org/node/2718229"
],
"merge-plugin": {
"include": [
"core/composer.json"
],
"recurse": false,
"replace": false,
"merge-extra": false
},
"installer-paths": {
"core": ["type:drupal-core"],
"modules/contrib/{$name}": ["type:drupal-module"],
"profiles/contrib/{$name}": ["type:drupal-profile"],
"themes/contrib/{$name}": ["type:drupal-theme"],
"drush/contrib/{$name}": ["type:drupal-drush"],
"modules/custom/{$name}": ["type:drupal-custom-module"],
"themes/custom/{$name}": ["type:drupal-custom-theme"]
},
"patches": {
"drupal/weight": {
"Strict warning: Non-static method ": "https://www.drupal.org/files/issues/weight-non-static-method-2671844-3…",
"Views widget assumes that weight field name is named 'field_weight'": "https://www.drupal.org/files/issues/weight-views-field-name-2687953-0.p…",
"Weight selector missing": "https://www.drupal.org/files/issues/weight-show-selector-2671840-4.patch"
}
}
},
après le composer update/install, j'obtiens uniquement ceci
Gathering patches for root package.
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
> Drupal\Core\Composer\Composer::preAutoloadDump
> Drupal\Core\Composer\Composer::ensureHtaccess
Du coup j'ai l'impression que le patch ne s'applique pas et je garde l'erreur :
Deprecated function: Non-static method Drupal\weight\Plugin\Field\FieldWidget\WeightSelectorWidget::rangeOptions() should not be called statically in Drupal\weight\Plugin\views\field\WeightSelector->viewsForm() (line 66 of modules/weight/src/Plugin/views/field/WeightSelector.php).
Une idée pour m'aider ?
Merci d'avance :)
Ajouter un commentaire