Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[verworfen - unbrauchbar] Textfield to Slider für mehrere Felder in Profil Kategorie nutzen?

Eingetragen von Herr Lich (109)
am 02.04.2012 - 11:30 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x oder neuer

Hallo zusammen,

da ich gerade die Formulare überarbeite, die bei den Profil Kategorien auszufüllen sind, habe ich bei meiner Suche "textfield to slider" gefunden und nach anfänglichen Problemen (falsche jQuery Versionen usw) auch in mein Modul einbinden können.

Bisher bin ich soweit gekommen, daß ich zuerst einmal generell mittels hook_form_alter ein Formularelement ändern konnte und mir der Slider entsprechend angezeigt wird. Das Ganze habe ich dann erweitern wollen, um für jedes Element der Kategorie einen Slider zu bekommen. Das hat auch bisher geklappt. Doch leider arbeitet der Slider so, daß er die Werte nicht über die ID sondern über die Klasse ändert. Und hier ist das Problem, welches ich bisher noch nicht gelöst bekommen habe: Alle Divs haben die gleiche Klasse und somit werden alle Slider mit EINEM Wert gefüllt und es bewegen sich demnach auch alle Slider synchron, statt einzeln.

Ich hab echt eine Denkblockade, wie ich das nun so hinbekomme, daß eben nicht die Klasse, sondern die ID entscheidend ist. Denn die ID ist schonmal logisch aufgebaut und natürlich unterschiedlich.

Der Code der slider_textfield.js sieht so aus:

$(function() {
$('.slider_callout').hide();
window.calloutVisible = false;

  $.each(Drupal.settings.slider_settings, function(elem_id, settings) {

    settings.start = function(e, ui) {
      $(this).find('.slider_callout').fadeIn('fast', function() { window.calloutVisible = true;});
      if (settings.callbacks && settings.callbacks.start) {
        try {
          eval(settings.callbacks.start)(e, ui);
        }
        catch (err) {
        };
      };
    };

    settings.stop = function(e, ui) {
      if (window.calloutVisible == false) {
        $(this).find('.slider_callout').fadeIn('fast', function() { window.calloutVisible = true;});
        $(this).find('.slider_callout').css('left', ui.handle.css('left')).text(Math.round(ui.value));
      }
$(this).find('.slider_callout').fadeOut('fast', function() { window.calloutVisible = false; });

      $('#' + elem_id).val(ui.value);

      if (settings.callbacks && settings.callbacks.stop) {
        try {
          eval(settings.callbacks.stop)(e, ui);
        }
        catch (err) {
        };
      };
    };

    settings.slide = function(e, ui) {
      var slider_marginLeft;
  slider_marginLeft = parseInt(settings.width) * ui.value / settings.max;
  slider_marginLeft = Math.round(slider_marginLeft);
  slider_marginLeft = slider_marginLeft - 10;
  slider_calloutMarginLeft = slider_marginLeft - 10;

    $('.slider_callout').css("margin-left", slider_calloutMarginLeft);
      $('.slider_callout').text(ui.value);
  $(settings.handle).css("margin-left",slider_marginLeft);
      if (settings.callbacks && settings.callbacks.slide) {
        try {
          eval(settings.callbacks.slide)(e, ui);
        }
        catch (err) {
        };
      };
    };

    settings.handle = '.slider_handle';
    settings.steps = settings.max - settings.min;

    var slider_wrapper = $('<div />').addClass('slider_wrapper');
    var slider_bar = $('<div />').addClass('slider_bar').attr({'id':'slider_bar_' + elem_id}).appendTo(slider_wrapper);

    slider_bar.append(
      $('<div />').addClass('left')
    ).append(
      $('<div />').addClass('right')
    ).append(
      $('<div />').addClass('slider_callout')
    ).append(
      $('<div />').addClass('slider_handle')
    );

    $('#' + elem_id).after(slider_wrapper);

    slider_wrapper.siblings('.field-prefix').prependTo(slider_wrapper);
    slider_wrapper.siblings('.field-suffix').appendTo(slider_wrapper);

    $('.large_label, .small_label').show();

    slider_bar.parents('.fieldset-wrapper').addClass('slider');
    slider_bar.width(parseInt(settings.width)).slider(settings);
    var slider_marginLeft;
slider_marginLeft = parseInt(settings.width) * $('#' + elem_id).val() / settings.max;
    slider_marginLeft = Math.round(slider_marginLeft);
    slider_marginLeft = slider_marginLeft - 10;
  $(settings.handle).css("margin-left",slider_marginLeft);
  });
});

So lasse ich den Typ für jedes Element ändern:

foreach ($pfields as $pfield) {
      $form[$category_field][$pfield]['#type'] = 'slider_textfield';
      $form[$category_field][$pfield]['#slider_settings'] = array(
      'min' => $field['min'] ? $field['min'] : 0,
      'max' => $field['max'] ? $field['max'] : 10,
      'width' => $field['widget']['slider_width'] ? $field['widget']['slider_width'] : 400,
      );
     }

Wie gesagt, klappt die Umwandlung in Slider ja perfekt. Nur habe ich eben das Problem, daß alle Slider gleichzeitig reagieren und dementsprechend identische Werte bei den Feldern gespeichert würden.

Sollte jemand ein ähnliches Problem schon gelöst haben oder einen völlig anderen Weg gegangen sein, würde ich gerne erfahren, wie und wo ich was ändern muss.

Oder müsste ich statt eines Moduls eher eine theme Funktion einsetzen, um ans Ziel zu kommen?

Gruß
Rainer

‹ Generierung verschiedener Records aus Textdatei Anfängerfragen zur Einbindung von PHP in Drupal ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Da der Textfield Slider mit

Eingetragen von Herr Lich (109)
am 05.04.2012 - 11:10 Uhr

Da der Textfield Slider mit jquery leider nicht nach elementID differenzieren kann, musste ich einen anderen Weg finden. Daher habe ich den jquery.ui slider wieder verworfen und bin auf den früher von mir schon verwendeten prototype slider zurück gekommen.

Nach anfänglichen Schwierigkeiten läuft er nun absolut sauber und stellt die entsprechenden Felder genau einer Kategorie als Slider dar. Auch speichern klappt perfekt in der Tabelle profile_values. Ich habe ebenso neben dem Slider noch ein Textfeld abgelegt, welches mir je nach Wert einen (noch festen) Alternativtext anzeigt. Hier werde ich noch im Modul eine Möglichkeit einbinden, diese Anzeige nach Admin-Vorgabe ausgeben zu lassen. Das sollte nicht wirklich problematisch werden, da bei jedem Slider ein kleines Script zur Steuerung mit ausgegeben wird. Hier kann ich über php dann die entsprechenden Arrays definieren.

Vorteil daran ist, daß das Modul dann flexibel auch für andere Bereiche genutzt werden kann und nicht nur spezifisch für meine Seite ein Einzelfall bleibt.

Da es aber nun vollständig abgeändert wurde, beende ich hier das Thema jquery slider für mehrere Felder.

MfG
Rainer

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Tagen 10 Stunden
  • Hey danke
    vor 3 Tagen 5 Stunden
  • Update: jetzt gibt's ein
    vor 3 Tagen 23 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 5 Tagen
  • In der entsprechenden View
    vor 1 Woche 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 5 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 14 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association