web-dev-qa-db-fra.com

Comment supprimer l'option "Afficher les poids des lignes" dans le champ Téléchargement de fichier?

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?

5
qasimzee

Vous devez désactiver/modifier settings.tableDrag une fonction.

<?php
/**
 * Implements hook_js_alter().
 */
function MODULENAME_js_alter(&$javascript) {
  unset($javascript['misc/tabledrag.js']);
}
?>
4
monymirza

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);
6
maijs

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]);
      }
    }
  }

}
2
Felix Eve

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.

1
Ideogram

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;
  }
}
?>
1
Dave Cohen

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));
1
digitgopher