Themen automatisch in der Datenbank erstellen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
bb-newbie2013
Mitglied
Beiträge: 7
Registriert: 25.05.2013 15:02

Themen automatisch in der Datenbank erstellen

Beitrag von bb-newbie2013 »

Hallo zusammen,

ich habe über die Suche im Forum und per Google leider nur eine alte Anleitung gefunden, die aber nicht mehr aktuell ist.

Ich möchte in meinem Forum eine Art Archiv von Nachrichten-Meldungen anlegen. So dass in einem Unterforum jeden Tag automatisch ein neues Thema generiert wird, in dem als Posts immer ein paar Meldungen automatisch eingetragen werden.

Bisher habe ich diese Meldungen in einer eigenen MySQL-Datenbank archiviert, es wäre aber praktischer diese ins Forum zu stellen, damit sie durchsuchbar sind.

Ich habe also:
1. ein eigenes phpBB Forum mit entsprechender MySQL-Daten
2. ein php-Skript dass bisher jeden Abend die aktuellen Nachrichten-Meldungen von meiner Homepage in eine andere MySQL-Datenbank schreibt

Nun will ich dieses Skript am besten so anpassen, dass es die Meldungen zusätzlich in die Datenbank des Forum schreibt, damit diese eben als Themen dort erscheinen.

In einem alten Eintrag habe ich gelesen, dass ich die Meldunge in die phpbb_posts schreiben könnte. Das habe ich probiert, aber sie erscheinen nicht im Forum. Vermutlich, weil ich keine richtige post_checksum und bbcode_uid anlege, kann das sein?

Kurzum: Wie bekomme ist also externe Daten am besten automatisch als Themen ins Forum generiert?

Danke für jeden Tipp!
Verschoben von phpBB 3.0: Administration und Benutzung nach phpBB 3.0: Mod-Bastelstube am 25.05.2013 16:15 durch Kirk

Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Themen automatisch in der Datenbank erstellen

Beitrag von Elsensee »

Ich glaube, was du suchst, ist das: https://wiki.phpbb.com/Function.submit_post :wink:
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
bb-newbie2013
Mitglied
Beiträge: 7
Registriert: 25.05.2013 15:02

Re: Themen automatisch in der Datenbank erstellen

Beitrag von bb-newbie2013 »

Hallo Elsensee,

das sieht gut aus, vielen Dank!

Leider hilft es mir aber nur bedingt, bin nämlich absoluter Anfänger was das Umprogrammieren von phpBB angeht. Einfache PHP-Skripte und MySQL-Abfragen kriege ich hin...

Daher: Wie kann die phpBB-Funktionalität in mein bestehendes PHP-Skript einbauen? Das Skript soll sich quasi im Forum anmelden und einen Text posten.

Gibt es vielleicht irgendwo ein gutes Tutorial für Einsteiger? Ich habe bisher nur das hier https://wiki.phpbb.com/Deutsch:Vorlage_ ... ene_Seiten gefunden. Damit komme ich aber leider nicht klar... Ich brauche ja keine Seite und keine Templates...
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Themen automatisch in der Datenbank erstellen

Beitrag von HabNurNeFrage »

Hi,

vielleicht findest Du in dieser Mod ein paar passende Passagen:
https://www.phpbb.com/community/viewtop ... 0&t=587212

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Themen automatisch in der Datenbank erstellen

Beitrag von Elsensee »

Ich habe dich so verstanden, dass du das alles in einem externen Skript hast. Das heißt, dass du deine Datei folgendermaßen starten musst:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
Nun hast du alles an phpBB-Funktionen parat, was du brauchst... Obwohl.. eine Sache fehlt da noch...
Ich nehme an, du hast einen eigenen User für das Posten der News-Beiträge erstellt. Wie auch immmer.. du brauchst zumindest irgendeinen, der die Themen postet.
Von diesem brauchst du die User-ID.

Hast du die User-ID gefunden, kannst du sie in der folgenden Passage einfügen, die wiederum nach den Zeilen, die ich eben schrieb, einzufügen ist:

Code: Alles auswählen

$user->session_create(USER-ID, false, false, false);
$auth->acl($user->data);
USER-ID ersetzt du einfach mit der User-ID. Übrigens wird der User, der die Themen schreibt, als unsichtbar angezeigt werden.

Nun musst du noch folgende Zeile hinzufügen, die das bitfield und die bbcode_uid initialisiert:

Code: Alles auswählen

$bbcode_uid = $bbcode_bitfield = '';
Wenn jetzt deine Nachricht in der Variable $message sein sollte, lautet die nächste Zeile:

Code: Alles auswählen

generate_text_for_storage($message, $bbcode_uid, $bbcode_bitfield, $bbcode_flags, true, true);
Dadurch hast du alle Daten zusammen. (Übrigens sind die letzten beiden "true" einmal dafür, dass URLs erlaubt sind und einmal für Smileys.)

Wenn du dachtest, du wärst schon fertig.. Nein.. Nun musst du noch das $data array für die Funktion zum korrekten Eintragen deines Posts erstellen:

Code: Alles auswählen

$data = array(
        'forum_id'    => FOREN_ID, // Die ID des Forums, in welchem das Thema erstellt werden soll
        'topic_id'    => 0, // 0 heisst: Thema wird neu erstellt.. willst du ja, oder?
        'icon_id'    => false, // Kein spezielles Icon
        
        'enable_bbcode'        => true,
        'enable_smilies'    => false,
        'enable_urls'        => true,
        'enable_sig'        => true,
        
        'message'        => $message, // Die Nachricht ist in $message...
        'message_md5'    => md5($message),
        
        'bbcode_bitfield'    => $bbcode_bitfield,
        'bbcode_uid'        => $bbcode_uid,
        
        'post_edit_locked'    => 0,
        'topic_title'        => THEMEN-TITEL, // Der Titel des Themas.. sei kreativ.. du kannst hier ja auch eine Variable einsetzen.. ;-)
        
        'notify_set'    => false,
        'notify'        => false,
        'post_time'        => 0,
        'forum_name'    => '',
        
        'enable_indexing'    => true,
        
        'force_approved_state'    => true,
    );
Fertig? Fast...
Jetzt noch folgende Zeile, um den Post abzusenden:

Code: Alles auswählen

submit_post('post', $data['topic_title'], $user->data['username'], POST_NORMAL, $poll_data = array(), $data);
Wenn alles geklappt hat, liefert diese Funktion übrigens die URL zum Thema. Wenn nicht, liefert sie "false".

Möchtest du dich jetzt noch ganz korrekt abmelden, lautet die nächste Zeile:

Code: Alles auswählen

$user->session_kill();
Und das war's. :)
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
bb-newbie2013
Mitglied
Beiträge: 7
Registriert: 25.05.2013 15:02

Re: Themen automatisch in der Datenbank erstellen

Beitrag von bb-newbie2013 »

Hey, Du bist super! Vielen, vielen Dank!

Es läuft auch alles soweit mit den neuen Meldungen, perfekt! :-)

Nur eine Sache klappt nicht: Ich möchte auch die alten Meldungen aus der Datenbank übertragen - und dabei die alten Daten als Post-Zeit nehmen.

Jetzt dachte ich mir einfach, ich nehme das Datum der Archivmeldung, wandele es per strtotime($datum) in eine UNIX-Code um und gebe sie als 'post_time' an.

Das geht aber nicht. Der Post wird trotzdem zur gerade aktuellen Zeit erstellt.

Wenn ich jetzt direkt in die MySQL-Datenbank des Forums gehe und in der Tabelle phpbb_posts die Post-Time und in der Tabelle phpbb-topics die Topic-Time manuell übeschreibe geht's. Aber das wäre bei fast 1000 Archivmeldungen ja viel zu aufwändig.

Wieso übernimmt die Funktion submit_posts meine angegebene post_time nicht? Gibt es eine Alternative?

Edit: Ist das vielleicht ein Fehler in der functions_posting.php? Oder Absicht:

Code: Alles auswählen

                'icon_id'            => $data['icon_id'],
                'post_time'            => $current_time, // hier werden die Daten aus dem $data-Array nicht übernommen
                'enable_bbcode'        => $data['enable_bbcode'],
                'enable_smilies'    => $data['enable_smilies'],
                'enable_magic_url'    => $data['enable_urls'],
                'enable_sig'        => $data['enable_sig'],
 
Vielleicht kann ich mir ja - nur für das Überspielen des Archivs - eine passende functions_posting.php basteln?
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Themen automatisch in der Datenbank erstellen

Beitrag von Elsensee »

Oh - das ist mir noch gar nicht aufgefallen... :o
bb-newbie2013 hat geschrieben:Vielleicht kann ich mir ja - nur für das Überspielen des Archivs - eine passende functions_posting.php basteln?
Klar.. Ich habe mir mal die Freiheit genommen und das für dich gemacht: :D

Öffne: includes/functions_posting.php
Suche:

Code: Alles auswählen

$current_time = time(); 
Ersetze mit:

Code: Alles auswählen

$current_time = ($data['post_time']) ? $data['post_time'] : time(); 
Nun kannst du mit strtotime deine Zeit so umwandeln und sie mit dem Array-Key post_time übergeben und dann sollte die jeweilige Zeit so erscheinen. :wink:
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
bb-newbie2013
Mitglied
Beiträge: 7
Registriert: 25.05.2013 15:02

Re: Themen automatisch in der Datenbank erstellen

Beitrag von bb-newbie2013 »

Du bist ja der Hammer, tausend Dank!

Läuft wie geschmiert!
bb-newbie2013
Mitglied
Beiträge: 7
Registriert: 25.05.2013 15:02

Re: Themen automatisch in der Datenbank erstellen

Beitrag von bb-newbie2013 »

Hallo... Sorry, ich brauche doch noch mal einen Tipp:

Habe das alles jetzt ans Laufen gebracht, habe aber die ganze Zeit mit einem extra dafür installierten phpBB3-Froum gearbeitet - falls was schief geht.

Jetzt läuft aber ja alles - zumindest in dem neuen Forum. Ich wollte das Script jetzt also nur schnell mit dem original-Forum laufen lassen - und es kommt sofort eine Fehlermeldung. Vielleicht bin ich zu blöd, aber ich finde den Fehler nicht.

So läuft es prima:

Code: Alles auswählen

  define('IN_PHPBB', true);
  $phpbb_root_path = '../phpBB3/'; // das ist mein  Forum  zum experimentieren
  $phpEx = substr(strrchr(__FILE__, '.'), 1);
  include($phpbb_root_path . 'common.' . $phpEx);
  include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
  include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
 
Und so nicht:

Code: Alles auswählen

  define('IN_PHPBB', true);
  $phpbb_root_path = '../forum/'; // das ist mein Original-Forum
  $phpEx = substr(strrchr(__FILE__, '.'), 1);
  include($phpbb_root_path . 'common.' . $phpEx);
  include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
  include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
 
Bei dem zweiten stolpert er ein paar Zeilen später über diesen Befehl, der die Nachrichten aus dem Archiv holt:

Code: Alles auswählen

$result=mysql_query("SELECT * FROM News ORDER BY ID ASC"); 
Es kommt die Fehlermeldung: "[phpBB Debug] PHP Warning: in file /homepages/archiv_ins_forum_posten.php on line 30: mysql_fetch_row() expects parameter 1 to be resource, boolean given"

Aber nur, wenn ich das Root-Verzeichnis des einen Forums angebe, nicht bei dem anderen...

Ich steh total auf dem Schlauch: Warum sollte es mit dem einen Forum gehen, mit dem anderen nicht? Was habe ich übersehen?
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Themen automatisch in der Datenbank erstellen

Beitrag von Elsensee »

Poste doch mal Zeile 30, wenns geht.

Und.. aus welcher Datenbank sind denn die News-Beiträge? Ist die Tabelle in der Datenbank eines bestimmten Forums oder ist die Tabelle in einer externen Datenbank?
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“