Welcome to the LimeSurvey Community Forum

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

Caricare dinamicamente le risposte di una domanda di tipo "Array"

  • seccalisca
  • seccalisca's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 weeks 4 days ago #270758 by seccalisca
Per favore aiutaci ad aiutarti e compila dove necessario:
La tua versione di LimeSurvey:  LimeSurvey Community Edition - Version 5.6.68+240625
Tema:
==================
Buonasera a tutti,
devo creare un form da inviare ad un lista di utenti ("Venditori").
Ciascun utente ha diverse aree di competenza ("Regioni") che vengono registrate, al momento della creazione del db dei partecipanti, in un campo ATTRIBUTE separate dal ";"  (Es "Lazio;Abruzzo;Marche")
Devo preparare un form che contenga una sola domanda "Indica le Aree di competenza che hai potuto seguire" e risposta "Sì" o "No".
Sarebbe carino poter creare un array, le cui righe vengano popolate dinamicamente a seconda di quante regioni ha ciascun utente (ogni utente le ha diverse per numero e contenuto).
Ho chiesto al "nostro" amico chatGPT se poteva darmi una soluzione e la risposta è stata quella di utilizzare un JavaScript all'interno della domanda ma non ho avuto successo: non succede nulla.
Ve lo copio qui, qualcuno è in grado di aiutarmi a capire se lo script è scritto male e dove? Io sono una mezza schiappa 
Code:
<script type="text/javascript">
$(document).ready(function(){
    // Recupera la lista delle regioni dal campo token personalizzato
    var regioniString = '{TOKEN:regioni}';
    var regioni = regioniString.split(";");
 
    // Rimuove tutte le righe tranne la prima
    $('#question{QID} .subquestion-list tr').slice(1).remove();
 
    // Clona la prima riga come template
    var templateRow = $('#question{QID} .subquestion-list tr:first').clone();
 
    // Pulisce la riga template
    templateRow.find('th').text('');
    templateRow.find('input[type=radio]').prop('checked', false);
 
    // Aggiunge le righe con le regioni reali
    for (var i = 0; i < regioni.length; i++) {
        var newRow = templateRow.clone();
        newRow.find('th').text(regioni[i]);
        // Cambia il nome degli input per mantenerli univoci
        newRow.find('input').each(function(){
            var oldName = $(this).attr('name');
            var newName = oldName.replace(/X[0-9]+X[0-9]+/, 'X{QID}X' + (i+1));
            $(this).attr('name', newName);
        });
        $('#question{QID} .subquestion-list').append(newRow);
    }
 
    // Rimuove la riga di esempio
    $('#question{QID} .subquestion-list tr:first').remove();
});
</script>
 

 

Please Log in to join the conversation.

  • lfanfoni
  • lfanfoni's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 weeks 3 days ago #270761 by lfanfoni
Javascript non è il mio forte, quindi ti posso soltanto suggerire una soluzione con l'Expression Manager.
Ipotizzando che un utente possa avere al massimo 10 regioni di competenza, dovresti definire 10 attributi aggiuntivi della tabella dei partecipanti. Per ogni partecipante, caricherai le etichette delle regioni in questi campi, ovviamente dove non c'è la regione dovrai lasciare in bianco...esempio: se ne hai 3, allora i primi 3 campi aggiuntivi saranno pieni e gli altri 7 saranno vuoti.
Sulla domanda Array dovrai definire 10 sottodomande, in ognuna di essa dovrai personalizzare l'etichetta visibile della riga con una cosa tipo {TOKEN:ATTRIBUTE_1}, in modo da mostrare la regione presente nel primo campo aggiuntivo di quel rispondente. Inoltre dovrai mettere una equazione di rilevanza sempre per ogni sotto domanda, in modo da mostrare le riga solo se è presente una regione. Dovresti poter usare una espressione tipo questa:
!is_empty(TOKEN:ATTRIBUTE_1)
Sono andato a memoria, quindi se non ti funziona la sintassi, controlla sul manuale, alla pagina dell'Expression Manager

Se mi vuoi contattare, non mandare messaggi privati qui, bensì scrivi a lfanfoni at gmail.com
Per le livestream in italiano vai su: www.youtube.com/playlist?list=PLOSjjxAG9...SiiCsSz_JxIH7xJwLdPd
Le soluzioni LimeSurvey per l'Italia si trovano su: github.com/lfanfoni
The following user(s) said Thank You: seccalisca

Please Log in to join the conversation.

  • seccalisca
  • seccalisca's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 weeks 11 hours ago #270828 by seccalisca
Grazie per la risposta e scusa il ritardo ma sono stato "dirottato" su altre attività :-)
Allora, la soluzione che proponi mi sembra molto più comoda per tutti (la sintassi è corretta, mancavano solo le parentesi graffe).
Il problema è che, dopo diversi tentativi, mi sono accorto che l'espressione
{!is_empty(TOKEN:ATTRIBUTE_1)}
non ritorna 0 ma... NULL (o almeno credo visto che provando a visualizzare il risultato dell'espressione non si vede niente)!
Cioè se imposto a 0 manualmente l'equazione di rilevanza, la riga non viene mostrata, altrimenti viene comunque mostrata.
Ho fatto diverse prove inserendo anche una if all'interno dell'equazione di rilevanza e provando ad inserire un valore testabile nel campo ATTRIBUTE che volevo nascondere (tipo scrivere "VUOTO") ma finora non ho avuto risultati.
Grazie ancora, se noti qualche evidente stupidaggine che ho fatto, fammi sapere, altrimenti se riuscirò a trovare la soluzione la aggiungo qui.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 weeks 10 hours ago - 2 weeks 10 hours ago #270831 by Joffm
Bongiorno,
Sembra che tu stia confondendo due cose:

1. La visualizzazione della sottodomanda 1
Viene visualizzata solo se l'attributo non è vuoto.
In realtà è "!is_empty(TOKEN:ATTRIBUTE_1)" senza le parentesi graffe. 
2. Il testo della sottodomanda 1
Il nome della regione dovrebbe essere visualizzato qui; e questo è {TOKEN:ATTRIBUTE_1} con le parentesi graffe.
Quindi se
Attributo 1: Puglia
Attributo 2: Basilicata
Attributo 3: Molise
Attributi 4-10: vuoti
Ecco come vengono visualizzate le prime tre righe.

Forse sarebbe meglio per l'analisi se una riga contenesse sempre le informazioni su una regione specifica.
Quindi crei 20 attributi e 20 sottodomande, una per ogni regione.
Allora forse
Attributo 8: Puglia
Attributo 17: Basilicata
Attributo 18: Molise
Tutti gli altri: vuoto
Il resto rimane invariato; tuttavia, è possibile inserire il nome della regione direttamente nel testo della sotto-domanda.
Anche in questo caso, vengono visualizzate solo tre righe: l'ottava, la diciassettesima e la diciottesima.

Come sempre, è consigliabile inviare un'esportazione LSS di questa domanda pertinente.     

Joffm  

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 10 hours ago by Joffm.
The following user(s) said Thank You: seccalisca

Please Log in to join the conversation.

  • seccalisca
  • seccalisca's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 weeks 6 hours ago #270835 by seccalisca
Grazie Joffm!
Hai ragione mi sono sbagliato io:
scrivendo {TOKEN:ATTRIBUTE_1} nel testo della sottodomanda mi sono incartato e continuavo a metterlo anche nel campo dell'equazione di rilevanza.
Scusatemi per il disguido 
Ora funziona tutto perfettamente, grazie mille ad entrambi!

Please Log in to join the conversation.

Moderators: lfanfoniholchtpartner

Lime-years ahead

Online-surveys for every purse and purpose