it-swarm.com.de

Zeile aus benutzerdefiniertem SQL löschen, wenn Artikel in Joomla gelöscht werden

Ich bin noch neu in Joomla und in der Programmierung von SQL.

Ich dachte darüber nach, wie ich ein großes System verwalten sollte, das ich mit Informationen erstellt habe, die in einer SQL-Tabelle gespeichert sind, die einige Benutzereingaben und die "ID" eines Artikels enthält.

Wenn Sie oder ein anderer Administrator einen Artikel löschen, muss ich dann wohl auch die Zeile mit der Artikel-ID in meiner benutzerdefinierten SQL-Tabelle löschen?

Gibt es eine Möglichkeit, ein Skript zu erstellen, das jedes Mal ausgeführt wird, wenn ein Artikel gelöscht wird? Auf diese Weise könnte ich möglicherweise die Artikel-ID abrufen und sie dann aus meiner benutzerdefinierten Tabelle entfernen.

Wie geht ihr mit euren benutzerdefinierten SQL-Tabellen um, die Verweise auf Artikel oder Benutzer in Joomla enthalten?

1
JonasB

Erstelle ein Plugin mit dem Event onContentAfterDelete. Einfaches Beispiel:

<?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
        }
    }
}

Ersetzen Sie #__customtable Durch den Namen Ihrer Tabelle und article_id Durch die Spalte mit den Artikel-IDs.

Dokumente:

Plugin/Events/Content

Inhalts-Plugin erstellen

Plugin-Entwicklung

2
Sharky