web-dev-qa-db-fra.com

Insérer dans la base de données avec ajax à partir d'un module joomla 3

J'ai vu beaucoup de questions sur ajax, mais normalement, il faut récupérer des données à partir d'une base de données. Je me demandais comment insérer des données en interaction directe dans un module.

J'ai un module avec des listes extraites de la base de données et j'aimerais que les utilisateurs enregistrés puissent conserver certaines informations du module pour pouvoir y accéder ultérieurement. Ce serait très bien d'avoir un bouton près de chaque élément de la liste pour l'enregistrer dans une table avec deux colonnes: User et Element ID.

J'ai fait des recherches et il semble que c'est facile d'utiliser un wrapper appelant un script php qui insère les enregistrements, mais je suis sûr que c'est un problème de sécurité. Des idées, s'il vous plaît?

3
WillyC

C'est parfaitement possible. Vérifiez cet exemple com_ajax, en enregistrant des informations dans la session utilisateur:

Utilisation de l'interface Joomla Ajax https://docs.joomla.org/Using_Joomla_Ajax_Interface

Ajax-Session-Module https://github.com/Joomla-Ajax-Interface

Ajax-Session-Plugin https://github.com/Joomla-Ajax-Interface/Ajax-Session-Plugin

Si vous souhaitez implémenter vos propres tables, toutes les demandes doivent être associées à l'ID utilisateur actuel dans le module pour les utilisateurs "enregistrés" uniquement.

2
Anibal

Vous devez avoir une méthode Controller pouvant être appelée par demande ajax ( peut-être utile ).

Cette méthode sera insérée dans la base de données à l'aide de l'instance de base de données de joomla.

Ensuite, tout ce dont vous avez besoin est d'appeler l'ajax par un événement onClick dans votre module.

1
Guilherme

J'ai fait quelque chose de similaire récemment, sauf que je supprime de la base de données. Je suppose que vous pouvez modifier le code pour mettre à jour à la place.

Ceci est l'appel ajax dans default.php

<script>
function ajaxDeleteEvent(finput)
{
    $.ajax({
        url:"index.php?   option=com_jobApplications&task=deleteApplication&id", 
        method:'POST',
        data: "id="+finput,
        success:
            function(data)
            {
                $("#container-"+finput).remove();
                console.log(data); 
            },
        error:
            function(e)
            {   
                console.log("u done goofed");
                console.log(e.message);
            }
    });
}
</script>

Et dans controller.php j'ai

public function deleteApplication()
{
    $mainframe = JFactory::getApplication(); 
    $id = JRequest::getVar("id",null,"post","int");
    // Check if id is set
    if ( isset( $id ) )
    {
        // remove that application from database
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        ...

    }   
    $mainframe->close();
}
1
Gicadin