web-dev-qa-db-fra.com

Ajouter des données de champ de contenu lors de l'envoi du formulaire

J'ai un plugin qui ajoute quelques champs supplémentaires à com_content. J'ai déjà déterminé comment ajouter les champs au formulaire de modification de l'interface, afin qu'ils soient affichés et enregistrés correctement, cela fonctionne parfaitement pour moi.

Ce que j'essaie de faire, c’est que les utilisateurs remplissent un champ, puis, lorsque le formulaire est soumis, récupère les données de ce champ, les manipule et en enregistre une variante dans un autre champ, puis les enregistre dans le base de données.

Par exemple. Un utilisateur remplit le champ video_url avec " https://www.youtube.com/watch?v=uO59tfQ2TbA ". Lorsque le formulaire est soumis, je récupère le contenu de video_url, je le manipule pour isoler l'ID de la vidéo youtube, puis je l'enregistre dans video_id sous le nom "uO59tfQ2TbA" et l'ajoute aux données enregistrées dans la base de données.

Je pensais que je pourrais utiliser l'événement de plug-in onContentBeforeSave, mais je pense que je fais quelque chose de mal, cependant, parce que ça ne marche pas lol.

Voici ce que j'ai jusqu'à présent. (pour que la logique reste simple et pour savoir comment sauvegarder réellement ce deuxième champ, je suis en train de copier le premier champ dans le deuxième ... ou d'essayer de le faire.

public function onContentBeforeSave ($context, &$article, &$isNew)
    {

        $app = JFactory::getApplication();
        $option = $app->input->get('option');
        $layout = $app->input->get('layout');

        if($option == 'com_content' && $layout == 'edit') {
            $video_url = $_POST['jform']['attribs']['video_url'];
            $video_id = $video_url;
            $attribs->video_id = $video_id;

            $article->attribs = json_encode($attribs);
        }
    }

De l'aide? J'essaie de comprendre cela au fur et à mesure, je ne l'ai pas fait avant.

1
Jon

après avoir trouvé un tutoriel obscur avec une sorte d'intention connexe, j'ai enfin trouvé comment faire cela lol. Voici ce que j'ai fini avec.

public function onContentBeforeSave($context, $article, $isNew)
    {

        // getting the data from the submitted content
        $attribs = json_decode($article->attribs);

        //logic/code for the process of getting the url, etc. goes here

        // adding my updated field content to the attributes
        $attribs->video_id = $vim_id;

        //Set the new $attribs object for the article
        $article->attribs = json_encode($attribs);

        return true;
    }

cela me permet d’obtenir des informations soumises dans le formulaire, de les manipuler, de les ajouter, de les modifier, etc., puis de les replacer juste avant de les enregistrer dans la base de données.

1
Jon

Si je comprenais bien, était sur le point de suggérer une solution frontale avec un keydown () qui enregistre une valeur de votre premier champ à un second, qui utilise ensuite split ().

0
NicholasByDesign