web-dev-qa-db-fra.com

Réinitialisation de la tâche de formulaire Joomla

J'essaie d'exporter une liste d'éléments dans un fichier CSV à partir de la vue liste standard dans un composant Joomla. J'ai un simple bouton d'exportation qui crée un fichier à télécharger.

Le problème que je rencontre est que le lien suivant activé tente de réexporter les données jusqu'à ce que le formulaire soit actualisé. Je suppose que c'est parce que je ne réoriente pas à la fin de la tâche.

Existe-t-il un moyen d'annuler cette tâche une fois terminée sans rediriger? parce que la redirection empêchera le téléchargement de mon fichier.

Ceci est mon code de contrôleur qui est exécuté après la génération de la liste.

protected function exportData($data) {

    // Set Headers
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment;filename='.'shows.csv');

    if($fp = fopen('php://output', 'w')) {
        // Output the first row as column headings
        if($data[0]) {
            fputcsv($fp, array_keys(JArrayHelper::fromObject($data[0])));
        }

        // Output the rows
        foreach ($data as $row) {
            fputcsv($fp, JArrayHelper::fromObject($row));
        }

        // Close the file
        fclose($fp);
    }

    JFactory::getApplication()->close();
}
2
Lee Wiggins

Votre formulaire peut appeler une fonction qui exécute la fonctionnalité d'exportation. donné

<input name='task' value='normaltask'>

puis dans le script quelque chose comme:

function exportCsvButton() {
    document.getElementById('task').value = 'export.csv';
    form.submit();
}

Si vous regardez les autres liens sur la page, ils peuvent appeler une fonction différente qui ne réinitialise pas le task; par conséquent, une fois que cela a changé, il reste changé.

Ajoutez simplement une instruction de réinitialisation de la tâche, vous pouvez même la placer dans la fonction exportCsvButton() après avoir appelé form.submit().

La redirection dans le contrôleur ne fonctionne pas, JApplication::close() est appelé de manière appropriée pour arrêter l'exécution après le transfert du fichier.

1
Riccardo Zorn