[Erledigt]Plugin mit onAfterContentSave: $article->text leer

Fragen zum Entwickeln eigener Addons?

Moderator: General Support Moderators

Forum rules
Forumregeln
Locked
RafelP
Joomla! Fledgling
Joomla! Fledgling
Posts: 2
Joined: Sat Jun 05, 2010 10:47 am

[Erledigt]Plugin mit onAfterContentSave: $article->text leer

Post by RafelP » Sat Jun 05, 2010 11:00 am

Hallöchen!

Ich melde mich, da ich gerade an einem total simplen Plugin verzweifel, weil, wie im Titel beschreiben, eine doofe Variable leer ist.

Folgendes soll das Plugin tun:
Sobald ich einen Artikel unter einer bestimmten (von mir fest definierten) Kategorie, neu anlege (also Anwenden oder Speichern gedrückt habe), soll das Plugin diesen Artikel ebenfalls in meinem Forum veröffentlichen (geht dabei halt um News).

Soweit so gut. Der Thread wird auch in die nötige Tabelle in der Datenbank geschrieben, aber er hat keinen Text, wodurch mir der erste Beitrag in dem Thread ebenfalls nicht erstellt wird.

Der Titel wird gespeichert.

Also $article->title funktioniert.
Aber $article->text nicht.

Warum?

Zur Verdeutlichung etwas Code:

Code: Select all

<?php
// kein direkter Zugriff über eine Url sondern nur über's Joomla-Framework
defined( '_JEXEC' ) or die( 'Unerlaubter Zugriff' );

// lade Elternklasse (dieses Plugin erbt von JPlugin)
jimport( 'joomla.plugin.plugin' );

// Rumpf der Plugin-Klasse
class  plgContentGdENeues extends JPlugin
{
  //Konstruktor
	function plgContentGdENeues( &$subject, $params ) {
		parent::__construct( $subject, $params );
	}

   //Funktion wird ausgeführt, nachdem man einen Artikel gespeichert hat
   function onAfterContentSave(&$article, $isNew){
                
                global $mainframe;
               //Nur ausführen, wenn der Artikel neu angelegt wurde und die Kategorie 36 (Neues) ist
               if($isNew && $article->catid == 36){
                  // Neues Datenbank-Objekt erzeugen
                  $db = @new mysqli('Server', 'User', 'PW', 'Datenbankr');
                  // Pruefen ob die Datenbankverbindung hergestellt werden konnte
                  if (mysqli_connect_errno() == 0){
                    //Daten die an die DB gesendet werden sollen
                    $titel    = $article->title;
                    $text     = $article->text;
                    $boardID  = 333;
                    $userID   = 777;
                    $user     = 'name';
                    $time     = TIME();
                    
                    //Thread wird erstellt
                    $sql  = "INSERT INTO `wbbx_thread` (`boardID`, `languageID`, `topic`, `firstPostPreview`, `time`, `userID`, `username`, `lastPostTime`, `lastPosterID`,  `lastPoster`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
                    $eintrag = $db->prepare($sql);
                    $eintrag->bind_param('iissiisiis', $boardID, $userID, $titel, $text, $time, $userID, $user, $time, $userID, $user);
                    $eintrag->execute();
                    //ID vom Thread ermitteln
                    $sql = "SELECT LAST_INSERT_ID() AS id;";
                    $ergebnis = $db->query( $sql );
                    $zeile = $ergebnis->fetch_object();
                    $lastid = $zeile->id;
                    $ergebnis->close();
                    //Erster Beitrag vom Thread wird erstellt
                    $sql = "INSERT INTO `wbbx_post` (`threadID`, `message`, `time`, `userID`, `username`) VALUES (?, ?, ?, ?, ?);";
                    $eintrag = $db->prepare($sql);
                    $eintrag->bind_param('isiis', $lastid, $text, $time, $userID, $user);
                    $eintrag->execute();
                    //ID vom beitrag ermitteln
                    $sql = "SELECT `postID` FROM `wbb1_1_post` WHERE `threadID` = ".$lastid.";";
                    $ergebnis = $db->query( $sql );
                    $zeile = $ergebnis->fetch_object();
                    $lastid2 = $zeile->id;
                    $ergebnis->close();
                    //dem Thread die ID vom ersten Beitrag übermitteln
                    $sql = "UPDATE `wbbx_thread` SET `firstPostID` = ? WHERE `threadID` = ?;";
                    $eintrag = $db->prepare($sql);
                    $eintrag->bind_param('si', $lastid2, $lastid);
                    $eintrag->execute();
                                        
                  }else{
                    // Es konnte keine Datenbankverbindung aufgebaut werden
                    echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
                  }
                  //Verbindung schließen
                  $db->close();
                }
                
                return true;
  }
}
?>
Also, im ersten SQL Statement, soll der Thread erstellt werden und der Text vom Artikel übergeben werden. In der Spalte "firstPostPreview" müsste halt der Text stehen, der mit $article->text übergeben wird. Da habe ich aber nur NULL stehen.
Der erste Beitrag wird erst gar nicht erstellt, da die DB nicht zulässt, dass der Inhalt leer ist.
Von euchw er ne Idee, woran es liegen könnte dass ich keinen Inhalt bekomme?

Gruß
Rafel
Last edited by RafelP on Thu Jun 10, 2010 8:53 pm, edited 1 time in total.

RedEye
Joomla! Ace
Joomla! Ace
Posts: 1460
Joined: Sat Jan 21, 2006 8:42 pm

Re: Plugin mit onAfterContentSave: $article->text leer

Post by RedEye » Thu Jun 10, 2010 7:33 pm

Falls Du es nicht schon selber rausgefunden hast, $article->text gibt es nicht bei allen Events.
$article->introtext und $article->fulltext sollte aber funzen

RafelP
Joomla! Fledgling
Joomla! Fledgling
Posts: 2
Joined: Sat Jun 05, 2010 10:47 am

Re: Plugin mit onAfterContentSave: $article->text leer

Post by RafelP » Thu Jun 10, 2010 8:51 pm

Jap du hast Recht, mittlerweile hatte ich die Lösung schon.
Introtext war es, wo der Text drinne steht.
Danke dennoch :)


Locked

Return to “Entwicklerforum”