J'ai créé un champ de fichier avec plusieurs téléchargements autorisés. Existe-t-il un moyen (sauf CSS) de supprimer le lien "Afficher les poids des lignes" du champ de téléchargement de fichier? Ou existe-t-il un moyen de supprimer entièrement la perte de poids du champ de fichier?
Vous devez désactiver/modifier settings.tableDrag
une fonction.
<?php
/**
* Implements hook_js_alter().
*/
function MODULENAME_js_alter(&$javascript) {
unset($javascript['misc/tabledrag.js']);
}
?>
La première partie de votre question concerne la suppression du lien "Afficher les épaisseurs de ligne" (ou "Masquer les épaisseurs de ligne" si la fonctionnalité de déplacement est désactivée) sous une forme où les lignes du tableau peuvent être déplacées, donc je vais y répondre.
La chaîne "Afficher les poids des lignes" apparaît dans la méthode Drupal.tableDrag.prototype.showColumns()
et les masques "Masquer les poids des lignes" dans la méthode Drupal.tableDrag.prototype.hideColumns()
qui sont inclus dans tabledrag.js
fichier (voir tête dans Drupal 7.x ) donc vous devez remplacer ces méthodes afin de remplacer ou supprimer ces chaînes sans perdre la fonctionnalité de glissement de ligne.
Placez ce code dans un fichier .js qui est chargé avec le formulaire qui utilise tabledrag.js:
(function ($) {
// Copy hideColumns() method
var hideColumns = Drupal.tableDrag.prototype.hideColumns;
Drupal.tableDrag.prototype.hideColumns = function() {
// Call the original hideColumns() method
hideColumns.call(this);
// Remove the 'Show row weights' string
$('.tabledrag-toggle-weight').text('');
}
// Copy showColumns() method
var showColumns = Drupal.tableDrag.prototype.showColumns;
Drupal.tableDrag.prototype.showColumns = function () {
// Call the original showColumns() method
showColumns.call(this);
// Remove the 'Hide row weights' string
$('.tabledrag-toggle-weight').text('');
}
})(jQuery);
Voici une solution pour Drupal 8 en utilisant hook_preprocess_field_multiple_value_form()
Trouvez d'abord le champ dont vous souhaitez supprimer la capacité de réorganisation:
/**
* Implements hook_preprocess_field_multiple_value_form().
*/
function MY_MODULE_preprocess_field_multiple_value_form(&$variables) {
if($variables['element']['#field_name'] == 'MY_FIELD_NAME') {
MY_MODULE_remove_table_reordering($variables['table']);
}
}
Et puis appelez une fonction d'assistance pour supprimer la fonctionnalité de réorganisation des tables:
/**
* Removes the ability for a table to be re-ordered.
*/
function MY_MODULE_remove_table_reordering(&$table) {
unset($table['#tabledrag']);
// Remove re-order header column
foreach($table['#header'] as $header_i => $header) {
if(is_object($header) && (string) $header == 'Order') {
unset($table['#header'][$header_i]);
}
}
// Loop table rows
foreach($table['#rows'] as &$row) {
// Remove draggable class from tr
$i = array_search('draggable', $row['class']);
if($i !== FALSE) {
unset($row['class'][$i]);
}
// Loop columns in row
foreach($row['data'] as $col_i => &$col) {
if(empty($col['class'])) {
continue;
}
// Remove td with drag handle
$i = array_search('field-multiple-drag', $col['class']);
if($i !== FALSE) {
unset($row['data'][$col_i]);
}
// Remove td with re-ordering select
$i = array_search('delta-order', $col['class']);
if($i !== FALSE) {
unset($row['data'][$col_i]);
}
}
}
}
Vous pouvez également essayer une substitution de thème, comme dans https://api.drupal.org/api/drupal/modules!field!field.form.inc/function/theme_field_multiple_value_form/7
Collez la fonction dans le template.php de votre thème, renommez 'theme_' dans le nom de la fonction en nom de votre thème et videz le cache.
Trouvez la ligne disant
drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
et commentez-le.
Je ne suis pas sûr de désactiver pour un seul champ, mais je me suis retrouvé à vouloir désactiver le glissement de ligne pour un formulaire entier.
monymirza a suggéré une réponse pour le désactiver complètement. Cependant en D7, cette approche n'est pas fiable, car sous certaines formes drupal_add_tabledrag () sera appelé après votre hook_js_alter (). Ceci est typique Drupal - tout est théoriquement personnalisable, mais en pratique, il est sujet aux erreurs et sensible.
À la fin, j'ai utilisé le hook_form_alter () suivant pour désactiver le glissement de table pour un seul formulaire spécifique:
<?php
/**
* Implements hook_form_alter()
*/
function sunflower_custom_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'field_ui_field_overview_form' && $form['#bundle'] == 'sunflower_habitat') {
// The habitat form is wizardized based on row weights. This is a sensitive thing, and drupal's row weight javascript is not at all sensitive, completely changing all values when it feels like it. So we don't want that "feature" on this form.
// Disable it, if already enabled.
$javascript = &drupal_static('drupal_add_js', array());
unset($javascript['misc/tabledrag.js']);
// Prevent it from being enabled later.
$tabledrag_added = &drupal_static('drupal_add_tabledrag');
$tabledrag_added = TRUE;
}
}
?>
Ajout à la réponse de money mirza pour supprimer les poids et ajouter un qualificatif, car nous ne voulons pas désactiver tabledrag.js
De l'ensemble du site.
<?php
/**
* Implements hook_js_alter().
*/
function MODULENAME_js_alter(&$javascript) {
// Use a more specific page condition as desired.
if(arg(0) == "node" && arg(2) == "edit") {
unset($javascript['misc/tabledrag.js']);
drupal_add_js(drupal_get_path('module', 'MODULENAME') . '/MODULENAME.js');
}
}
Créez ensuite un fichier MODULENAME.js:
(function ($) {
Drupal.behaviors.NoTabledragWeights = {
attach: function (context, settings) {
// Again, get more specific if desired.
$('td:nth-child(2),th:nth-child(2)').hide();
}
};
}(jQuery));