web-dev-qa-db-fra.com

Supprimer la ligne du code SQL personnalisé lors de la suppression d'un article dans Joomla

Je suis encore nouveau sur Joomla et sur le codage SQL.

Je réfléchissais à la façon dont je devrais gérer un grand système que j'avais créé avec des informations enregistrées dans une table SQL, contenant certaines entrées d'utilisateur et "l'identifiant" d'un article.

Si vous ou un autre administrateur supprimez un article, je suppose que je dois également supprimer la ligne contenant cet identifiant d'article dans ma table SQL personnalisée?

Existe-t-il un moyen de créer un script exécuté chaque fois qu'un article est supprimé? De cette façon, je pourrais peut-être obtenir l'identifiant de l'article, puis le supprimer de ma table personnalisée.

Comment gérez-vous vos tables SQL personnalisées contenant des références à des articles ou à des utilisateurs dans Joomla?

1
JonasB

Créez un plugin avec l'événement onContentAfterDelete. Exemple de base:

<?php
defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\CMSPlugin;

class PlgContentExample extends CMSPlugin
{
    public function onContentAfterDelete($context, $item)
    {
        // Check that the deleted item is an article.
        if ($context !== 'com_content.article')
        {
            return true;
        }

        $db = Factory::getDbo();
        $query = $db->getQuery(true)
            ->delete($db->quoteName('#__customtable'))
            ->where($db->quoteName('article_id') . ' = ' . (int) $item->id);
        $db->setQuery($query);

        try
        {
            $db->execute();
        }
        catch (\RuntimeException $e)
        {
            // Informational log only
        }
    }
}

Remplacer #__customtable avec le nom de votre table et article_id avec la colonne contenant les ID d'article.

Docs:

Plugin/Événements/Conten

Création d'un plugin de conten

Développement de plugin

2
Sharky