Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Mehrfachantworten und übergreifende Maximalpunkte

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 year 1 week ago - 1 year 1 week ago #242742 by Joffm
So, ich habe einmal etwas gebaut.

Ist jetzt für mich etwas schwieriger, da ja LS 6.x auf bootstrap 5 basiert; damit habe ich mich noch nicht angefreundet.

Gut.
Der Teilnehmer hat wohl schon früher für 33 Punkte bestellt; also wird dies auch angezeigt
 

 
Tja, Pech, sein restliches Kontingent ist zu klein.

Also bestellen wir nur ein großes T-Shirt
 

Und nach Absenden wird das Attribut entsprechend aktualisiert, eqSum wird übergeben.
 

Schau es einfach einmal an.
 

File Attachment:

File Name: limesurvey...5_JK.lss
File Size:46 KB

Bis dann
Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 1 year 1 week ago by Joffm.

Please Log in to join the conversation.

  • moritz0903
  • moritz0903's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
1 year 1 week ago #242758 by moritz0903
Vielen, vielen Dank für Deine Hilfe und Mühen, das ist wirklich fantastisch! Ich habe damit jetzt alles so hinbekommen wie ich es gerne hätte (war ja quasi schon fertig). Jetzt noch kurz 2 Fragen:

1. Die von dir definierte eqSum: Was genau macht diese? Ich sehe, es rechnet nochmal die Summe von eqToken und allem aus der Auswahl aus, aber wird als eigene Frage nach Q1 nochmal angelegt?

2. Nicht alle Textilien und Größen sind kombinierbar, kann man das dynamisch anlegen? Im JS part hab ich gesehen, dass Du z.B. für answer_cell_X001 etc. die entsprechenden Werte vergeben hast. Kann man das irgendwie abhängig. machen? In Deinem Tut steht unter 1.2.2. etwas zu abhängigen Spalten, aber das ist nicht genau das oder?

Danke und schönen Abend
Moritz

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 year 1 week ago - 1 year 1 week ago #242759 by Joffm
Hallo,

1. Ich berechne die Summe noch einmal, damit ich nicht diese riesige Equation in das Plugin übergeben muss. Jetzt wird dort nur {eqSum} eingetragen.
Ähnlich ist es mit eqToken: Hier wollte ich mir nur ersparen, immer "TOKEN:ATTRIBUTE_1" schreiben zu müssen.

2. 

Nicht alle Textilien und Größen sind kombinierbar

Das war in Deinem allerersten Beispiel aber anderes, oder?
Dort gab es für beide Typen dieselben drei Farben und dieselben Größen.

Wenn das nicht so sein soll, dann ist es einfach ärgerlich, dass man solche Dinge nicht vorher weiß
Vielleicht kannst Du ja validieren, indem Du nicht vorhandene Kombinationen "anmeckerst".

Außerdem gibt es einen Thread über abhängige Drop-downs
[url] forums.limesurvey.org/index.php/forum/ca...e-row?start=0#229169 [/url]
Das wäre natürlich ein ganz anderes Design.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 1 year 1 week ago by Joffm.

Please Log in to join the conversation.

  • moritz0903
  • moritz0903's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
1 year 1 week ago - 1 year 1 week ago #242763 by moritz0903
Danke für die Erklärung! Ja, in dem ursprünglichen Beispiel hatte ich das nicht angegeben, weil ich es nicht noch komplizierter machen wollte. Wäre es einfacher, n Matrixfragen zu haben (quasi eine Pro Textilart) und dort einfach nur die existierenden Kombinationen anzulegen? Insgesamt gibt es bei mir 9 Textilien, das wird etwas viel manuelle Konfiguration von vorhandenen Kombinationen sonst.

Und noch eine kurze Frage: ich habe gerade mal testweise geantwortet, da steht dann aber in der Tabelle nicht der Wert, der gewählt wurde, sondern leider der ganze Fragentext. Kann ich das anpassen?

Nochmal Danke und VG
Last edit: 1 year 1 week ago by moritz0903.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 year 1 week ago - 1 year 1 week ago #242764 by Joffm

ich habe gerade mal testweise geantwortet, da steht dann aber in der Tabelle nicht der Wert, der gewählt wurde, sondern leider der ganze Fragentext. Kann ich das anpassen?

Sehe ich nicht.
 
Welche Einstellung hast Du denn "Kompakt" oder "Erweitert". Sollte "Kompakt"  sein.
Ist aber auch egal. Beim Datenexport wählst Du ja die Art der Darstellung.

Ja, in dem ursprünglichen Beispiel hatte ich das nicht angegeben, weil ich es nicht noch komplizierter machen wollte.

 Und damit führst Du die Leute auf die total falsche Fährte.
Gut, Du bist nicht der Einzige, der ein Beispiel bringt, und dann später sagt "Ätsch, es ist aber ganz anders"
Aber es ärgert mich kolossal. Ich habe mir sehr viel Mühe gegeben; und - für Nichts und wieder Nichts.

Dann überlege Dir einmal etwas anderes!
Da es ja eine Maximalzahl der zu wählenden Teile gibt (Punktkontingent / billigstes Teil) könnte man vielleicht so viele Sequenzen von "Auswahl des Teils" und "Matrix für den Rest (mit Teilfragenrelevanz je nach Art)" 

Aber "up to you".

Bis dann
Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 1 year 1 week ago by Joffm.

Please Log in to join the conversation.

  • moritz0903
  • moritz0903's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
1 year 1 week ago #242765 by moritz0903
Sorry, ich wollte eigentlich Arbeit ersparen, nicht zusätzlich generieren. Jedenfalls weiß ich Deine Mühen sehr zu schätzen und das allermeiste kann ich ja auch 1:1 verwenden, dass das mit der Logik der Kombinationen so viel Ärger macht, war mir nicht klar.

Please Log in to join the conversation.

  • moritz0903
  • moritz0903's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
1 year 6 days ago - 1 year 6 days ago #242809 by moritz0903
Für die Nachwelt: Dank der Vorarbeit war es recht einfach, die Abhängigkeiten der Kombinationen mit ein paar Zeilen Javascript noch einzufügen. Sicher nicht perfekt, aber es geht. Hier mein Ansatz:

Zunächst werden die Felder X_001 (Textilart), X_003 (Farbe) und X_004 (Größe) initialisiert, wobei nur für X_001 Werte eingegeben werden, die anderen setze ich per JS:
Code:
// Insert selects
// X_001: Textilart
$('.answer-item.answer_cell_X001', thisQuestion).addClass('with-select').append(
'<select class="inserted-select form-control list-question-select">\
<option value="">Bitte auswählen</option>\
<option value="1">T-Shirt</option>\
<option value="2">Hoody</option>\
<option value="3">Fleecejacke Vintage</option>\
<option value="4">Fleecejacke</option>\
<option value="5">Polo</option>\
<option value="6">Softshelljacke</option>\
<option value="7">Softshellweste</option>\
<option value="8">Sweatshirt</option>\
<option value="9">Zip-Hoody</option>\
</select>');
 
// X_003: Farbe (abhängig von X_001)
$('.answer-item.answer_cell_X003', thisQuestion).addClass('with-select').append(
'<select class="inserted-select form-control list-question-select">\
<option value="">Bitte Textil wählen!</option>\
</select>');
 
// X_004: Größe (abhängig von X_001)
$('.answer-item.answer_cell_X004', thisQuestion).addClass('with-select').append(
'<select class="inserted-select form-control list-question-select">\
<option value="">Bitte Textil wählen!</option>\
</select>');

Anschließend habe ich mir noch ein Helfer definiert, ich wollte an der Logik für die Preise von Joffm festhalten, daher das Mapping von Größen zu Zahlen:
Code:
// Helpers, dicts set the right text, value combination
var thisQuestion = $('#question{QID}');
var sizes = {
    "XS": "1",
    "S": "2",
    "M": "3",
    "L": "4",
    "XL": "5",
    "XXL": "6",
    "3XL": "7",
    "4XL": "8",
    "5XL": "9",
};
var colors = {
    "Anthrazit": "1",
    "Anthrazit/Platin": "2",
    "Charcoal": "3",
    "Grau": "4",
    "Schwarz": "5",
    "Steel Grey": "6",
    "Weiß": "7",
    "Zinn": "8",
};


Schließlich dann mittels Listener die anderen beiden Dropouts befüllen. Um anzugeben, welches Textil es in welchen Farben und Größen gibt, habe ich ein simples array verwendet, das ich via switch definiere:
Code:
    // Listeners: Changing of textile type will populate the other select fields
    $('.answer-item.answer_cell_X001 .inserted-select', thisQuestion).on('change', function(i) {
      let textilCode = $('option:selected', this).val();
      let textilName = $('option:selected', this).text();
      let allowedColors;
      let allowedSizes;
 
      // Select fields for size and color
      let colorSelect = $(this).closest('tr').find('.answer-item.answer_cell_X003 .inserted-select');
      let sizeSelect = $(this).closest('tr').find('.answer-item.answer_cell_X004 .inserted-select');
 
      // Clear select fields and add dummy text
      colorSelect.find('option').remove().end().append('<option value="">Bitte auswählen</option>').val('');
      sizeSelect.find('option').remove().end().append('<option value="">Bitte auswählen</option>').val('');
   
      // Prepare population of other dropdowns
      switch (textilName) {
        case 'T-Shirt':
          allowedColors = ["Schwarz", "Steel Grey", "Weiß"];
          allowedSizes = ["XS", "S", "M", "L", "XL", "XXL", "3XL", "4XL", "5XL"];
          break;
        case 'Hoody':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
        break;
        case 'Fleecejacke Vintage':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
        break;
        case 'Fleecejacke':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
          break;
        case 'Polo':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
          break;
        case 'Softshelljacke':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
          break;
        case 'Softshellweste':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
          break;
        case 'Sweatshirt':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
          break;
        case 'Zip-Hoody':
          // TODO: Update der Größen und Farben
          allowedColors = ["Weiß"];
          allowedSizes = ["5XL"];
          break;
        default:
          break;
      }
    
 
      // Populate select fields based on switch selection
      $.each(allowedColors, function(_, value) {
        colorSelect.append($("<option></option>").attr("value", colors[value]).text(value)); 
      });
      $.each(allowedSizes, function(_, value) {
        sizeSelect.append($("<option></option>").attr("value", sizes[value]).text(value)); 
      });
 
    });

Das wars auch schon, der Rest ist 1:1 die Implementierung von Joffm. Mittels Bootstrap cards und modals sieht der Einleitungstext jetzt auch nett aus.

VG
Moritz
Last edit: 1 year 6 days ago by moritz0903. Reason: Linting

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 year 6 days ago #242821 by Joffm
Hallo,
das sieht wirklich gut aus.
Da solche Dinge ja sehr häufig angefragt werden, werde ich dies in mein Tutorial einbauen (mit Nennung Deiner Autorenschaft).
Die anderen scripte in den Tutorials stammen ja hauptsächlich von @tpartner.

Viel Erfolg

Joffm

 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

  • moritz0903
  • moritz0903's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
1 year 6 days ago #242824 by moritz0903
Sehr gerne, war dann Dank Deines Inputs nicht mehr viel Arbeit. Wenn es Dir hilft kann ich auch die ganze Datei posten, da sind auch die aktuellen Bootstrap Elemente enthalten.

VG

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 year 6 days ago #242831 by Joffm
Dafür wäre ich sehr dankbar..
Wie ich schon schrieb "mit bootstrap 5 habe ich mich noch nicht angefreundet"

Joffm 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

  • moritz0903
  • moritz0903's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
1 year 5 days ago #242851 by moritz0903
Alles klar, ich hab die ganze Datei angehängt. Die Logik ist etwas kompliziert auf Grund der vielen Textilien, die zur Wahl stehen. Für das Beispiel habe ich jetzt kurzerhand die Besonderheit mit den Aufschlägen ab 3XL entfernt. Ansonsten funktioniert es aber wie bei Dir auch, das Bootstrap Grid System macht alle Bilder schön gleich hoch, natürlich wird er sich in dem Schnipsel über die nicht gefunden Bilder beschweren.

Hoffe es ist soweit verständlich.

Schönen Abend!

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 year 5 days ago - 1 year 4 days ago #242860 by Joffm
Hallo, Moritz,
das ist echt gut geworden.

Aber jetzt ist mir eine Sache aufgefallen.
Wenn Du eine Zeile wieder entfernen willst, vielleicht, weil das Punkte kontingent überschritten wurde, wird nur die Zelle "Anzahl" gelöscht, die Drop-Downs aber nicht. Daraus resultiert dann auch, dass die Punktzahl nicht aktualisiert wird.

Da muss wohl in der Funktion  function removeRow(qID) { noch etwas ergänzt werden.

Du bist offensichtlich in javascript mehr bewandert als ich, also schau einmal.

Im schlimmsten Fall müssen wir hoffen, dass Tony (@tpartner) einen Tipp hat.
Ich werde diese "Unschönheit" einmal im englischen Teil ansprechen.

Joffm

P.S.
Tony hat ein Update geliefert.
In "removeRow" unter
          $(arrayRow + '[name="visible"]:last input[type="text"]').val('');
dies zusätzlich
          $(arrayRow + '[name="visible"]:last select').val('');

Damit ist der Eintrag zwar weg, aber die Bestellsumme wird trotzdem nicht aktualisiert.
Da müssen wir noch einmal ran.

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 1 year 4 days ago by Joffm.

Please Log in to join the conversation.

Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose