Jeden Beitrag einzeln als Webseite anzeigen und verlinken

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt, um einen neuen Mod zu entwickeln, geht's in [3.0.x] Mods in Entwicklung weiter.
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 phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Jeden Beitrag einzeln als Webseite anzeigen und verlinken

Beitragvon dieweltist » 28.07.2007 20:12

Einen einzelnen Foren-Beitrag, wie beim vBulletinBoard, irgendwo verlinken können, ist meines Erachtens doch sehr wichtig. Ich habe eine Möglichkeit gefunden, die aber noch viel besser ist als die beim vBB existierende Möglichkeit. Indem man grundsätzlich ein Forenbord in verschiedenen Ordnern installiert und über dieselben Datenbanktabellen laufen lässt, kann der User durch Veränderung der Angabe des Ordnernamens in der Url in seinem Browser von einer Installation zur anderen wechseln.

Wenn ein Board so konfiguriert ist, dass jeweils ein Beitrag je Threadseite eingestellt ist, kann man sogar nicht nur einen einzelnen Beitrag je Threadseite anzeigen lassen, sondern dieser Beitrag wird komplett mit sämtlichen Forumsfunktionen angezeigt. Das sieht nicht nur viel besser aus, man kann dann sofort zum jeweils vorigen oder nachfolgenden Beitrag wechseln. Ggf. kann sogar sofort auf diesen Beitrag geantwortet werden.

Grundsätzlich müssen dabei zwei Probleme überwunden werden. Zum einen muss ein System zwei mal in verschiedenen Ordnern installiert werden und jeweils auf dieselben Datenbanktabellen zugreifen. Zum anderen muss das zweite System so eingestellt werden, dass alle oder ein Teil seiner Funktionen auf die Anzeige von einem Beitrag je Threadseite eingestellt wird.

Bei einem Forensystem, wie bspw. dem UNB, ist das am einfachsten, weil man nach der Installation einfach den Datenbankpräfix sogar nachträglich im ACP (Adminbereich) ändern kann und weil die Konfiguration über eine Datei erfolgt. Klick!

Man würde also ein Forensystem in einem Ordner installieren, es dann anschließend ein zweites mal in einem anderen Ordner installieren und dann das Datenbankpräfix der ersten Installation bei dieser zweiten Installation im ACP angeben. Die nicht benötigten neuen Datenbanktabellen kann man dann mit phpMyAdmin löschen. Dann bräuchte man nur noch für eines der beiden Forensysteme die Anzahl der Beiträge je Threadseite auf Eins stellen im ACP.

Beim phpBB3 ändert man das Datenbankpräfix einfach in der Datei config.php. Rechts neben der Variable $table_prefix die Angabe zwischen den beiden Apostrophs ' ändern! Ich weiß nicht, ob dann auch noch der Cache über den Adminbereich geleert werden muss, damit es sofort wirksam wird.

Wenn das bei einem Forensystem nicht möglich ist, das Datenbankpräfix nach der Installation zu ändern; oder man nicht weiß, wie man das machen könnte, löst man einfach so, indem man das Forenboard zuerst in einem Ordner installiert. Dann löscht man sämtliche Datenbanktabellen und installiert das Board im anderen Ordner. Dabei gibt man dasselbe Datenbankpräfix wie bei der ersten Installation an. Man sollte darauf achten, dass man bei der zweiten Installation bei jeder Option dieselben Angaben macht.

Wie man beim zweiten System die Anzahl der Beiträge je Threadseite auf '1' stellt, gehe ich später darauf ein. Das Problem ist nämlich, dass, wenn man das einfach im ACP (Adminbereich) ändern würde, dass man das damit für beide Systeme zugleich ändern würde, weil diese Einstellung von der Datenbank abgerufen wird.

Falls man aber noch eine weitere (dritte) Installation hinzufügen möchte, wenn es im Forum schon zahlreiche Beiträge und Mitglieder gibt, müsste man ein Datenbank-Backup machen, die Datenbanktabellen löschen, diese dritte Installation durchführen und dann mit der Backupdatei die Datenbanktabellen wiederherstellen.

Die Mühe, das System ein zweites mal zu installieren, kann man sich beim phpBB3 sparen, indem man einfach sämtliche Dateien einer Installation herunterlädt und in einen anderen Ordner wieder hochlädt. Falls man meinen sollte, dass das nicht funktionieren könne, weil der Scriptpfad in den Dateien falsch angegeben sei, so ist das seltsamer Weise nicht so; weil dieser, außer in der Datei cache/data_global.php, in keiner Datei angegeben ist; sondern dass sich das System den Namen des Ordners aus den bereits vorhandenen Datenbanktabellen über >[Präfix_]config - 'script_path'< holt.

Auch die Datei im Cache cache/data_global.php macht dabei kein Problem, denn die holt sich nach einer Cache-Löschung über das ACP, den Namen des Ordnernamen unmittelbar nach dem ersten Aufruf auch aus der Datenbank. Das Problem ist nur, dass es sich dabei um den alten Ordnernamen der kopierten Installation handelt. Dasselbe Problem hat man aber auch, wenn man ein System ein zweites mal normal (in einen weiteren Ordner) installiert.

Seltsamer Weise schadet das aber überhaupt nicht, was ich mir überhaupt nicht erklären kann; denn eigentlich müsste man in der Datenbank eine weitere Tabellenspalte anlegen und in den Dateien alle Verweise auch entsprechend ändern. Also überall 'script_path' durch den neu gewählten Namen ersetzen, bspw. 'script_path_1', falls man die neue Tabellenspalte in der Datenbank so benennen würde. Der Name 'script_path' ist übrigens in diesen Dateien vorhanden:

common.php
adm/index.php
cache/data_global.php
includes/functions.php
includes/functions_convert.php
includes/functions_transfer.php
includes/message_parser.php
includes/session.php
includes/acp/acp_board.php

Und dann gibt es noch ein zweites Problem, nämlich dass das Board nicht über Konfigurationsdateien konfiguriert wird, sondern über die Datenbank in der Tabelle >[Präfix_]config - posts_per_page<. Jede Veränderung der Einstellung für die Anzahl der Beiträge in einem Board würde früher oder später auch im anderen wirksam werden, weil die diesbezügliche Einstellung aus der Datenbank abgerufen wird. Bspw. beim UNB erfolgt die Einstellung der Anzahl der Seite über Konfigurationsdateien, wie ich das schon schrieb. Aber um eine Veränderung der Anzahl der Beiträge beim phpBB3 in nur einem System zu realisieren, geht man so vor:

In der Datenbank in dieser Tabelle >[Präfix_]config< eine zweite Spalte posts_per_page_1 eröffnen. Dazu klickt man links auf >[Präfix_]config<! (Präfix_ ist der bei der Installation gewählte Präfix, bspw. 1_ oder phpbb3_) Dann rechts oben auf Einfügen! Unter >config_name< gibt man posts_per_page_1 an. Unter >config_value< die Anzahl der Beiträge je Threadseite, also 1. Unter >is_dynamic< gibt man 0 an. Ich weiß zwar nicht warum, ich weiß nur, dass das bei der Tabellenspalte >posts_per_page< auch angegeben ist, wie man sieht, wenn man oben auf Anzeigen klickt und dann die Seite 6 auswählt.

Ich weiß nicht, warum ich nach jedem Einfügeversuch eine Fehlermeldung hatte; jedenfalls stellte sich dann heraus, dass schon der erste Versuch glückte, ohne dass ich das sofort bemerkte. Die hinzugefügte Tabellenspalte war als letzte auf Seite 8 vorhanden, wie ich dann später bemerkte.

Das Forensystem, dass einen Beitrag je Threadseite anzeigen soll, muss nun so modifiziert werden, dass man in sämtlichen Dateien 'posts_per_page' durch 'posts_per_page_1' ersetzt. Möglicherweise wäre das aber gar nicht so gut, weil dann auch bspw. bei den Suchergebnissen und auch im Formular für den neuen Beitrag nur ein Beitrag je Threadseite angezeigt werden würde.

Deswegen habe ich mich, als jemand, der sich mit PHP leider noch nicht auskennt, nur so vom Gefühl her für die Datei viewtopic.php (Viewtopic = Anzeigen-Beitrag) entschieden und dort alle Ersetzungen vorgenommen. Der Test zeigte, dass alles anscheinend einwandfrei so funktioniert, wie ich es haben wollte. Für Hinweise, dass man was besser anders machen sollte, bin ich natürlich dankbar.

Und auf diese Weise verfährt man, wenn man noch weitere Installationen hinzufügen möchte; bspw. eine, die 100 Beiträge je Seite anzeigen soll. Die hinzuzufügendede Datenbankzeile wäre dann 'posts_per_page_100', oder so. Eine Installation kann man so lassen, wie sie ist. Über den Adminbereich stellt man für diese wie gewohnt ein, wie viele Beiträge je Threadseite angezeigt werden sollen.

Dabei ist es egal, aus welcher Installation heraus man die Adminzentrale aufruft, es wird in jedem Fall in dieselbe Datenbankzeile eingetregen, nämlich in 'post_per_page'. Durch die Änderungen der jeweiligen Dateien viewtopic.php hat diese Einstellung dann aber in den anderen Installationen bei der Anzeige der Threads keinen Einfluss mehr. Von diesen Installationen kann man dann aber nur noch diese Anzahl durch entsprechende Änderungen in der Datenbank einstellen.

Die Variable 'posts_per_page' ist übrigens auch in diesen Dateien enthalten:

search.php
cache/data_global.php (gegebenenfalls)
includes/functions_display.php
includes/functions_posting.php
includes/mcp/mcp_notes.php
includes/ mcp mcp_post.php
includes/ mcp/mcp_topic.php
includes/acp/acp_board.php
includes/acp/acp_users.php

Zweckmäßigerweise sollte man die Ordner so benennen, wie viele Beiträge je Threadseite angezeigt werden sollen. Also ein Ordner sollte 1 heißen und der andere bspw. 10 oder 100; also je nach eingestellter Anzahl der Beiträge je Threadseite.

Praktisch wäre es vielleicht, wenn man das System so abändern könnte, dass in dem System, das bspw. auf 10 Beiträge je Threadseite eingestellt wäre, der Link zu dem Beitrag zu dem System führt, das mit einem Beitrag je Threadseite eingestellt ist. Wie schon weiter oben erwähnt, sehe ich momentan überhaupt keine Möglichkeit das zu ändern, weil in jedem System der Name des Ordners, in dem das System installiert wurde, aus der Datenbank abgerufen wird.

Und dort ist der Ordnername von der Installation angegeben, das man als erstes normal installierte, von dessen Installation man die Datenbanktabellen hinterher nicht löschte. Aber vielleicht kann ja ein phpBB-Experte hierzu was sagen. Übrigens wird die Option "Board deaktivieren" nicht in der Datenbank gespeichert. Gegebenenfalls müsste man diese Einstellung jeweils bei beiden Installationen tätigen.
Zuletzt geändert von dieweltist am 08.06.2008 23:53, insgesamt 6-mal geändert.

Boecki91
Ehemaliger
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitragvon Boecki91 » 28.07.2007 20:53

Erstmal alles durchlesen :D

Dazu fallen mir ein paar Probleme/Fragen ein:
1. Was machst du bei Datei-Anhängen die im 1. Forum in einem Ordner liegen und im 2. Forum nicht?

2. Eine Kopie der Dateien lässt den Webspace gleich doppelt so voll werden gerade wer mit wenig Speicher auskommen muss hat ein Problem

3. Wenn man einen Beitrag einzeln verlinken will muss man das die URL ändern, Beispiel
domain.de/forum/viewtopic.php?p=33&f=66#33 (wäre normal)
muss man nun um ändern zu
domain.de/forum/1/viewtopic.php?p=33&f=66#33 (wäre 1 Beitrag)

Insgesamt glaube ich du hast um zu viele Ecken gedacht. Aber Hauptsachen ist du hast überhabt gedacht :grin:

Verbesserung:

Du könntest einfach in dem Link ein Parameter übergeben z.B. in dem du schreibst:
domain.de/forum/viewtopic.php?p=33&f=66#33&pps=1
und in der viewtopic eine if-Abfrage erstellst wenn ppp = 1 ist dann page_per_site = 1 sonst Standard aus der Datenbank verwenden.

Eventuell ist es auch möglich fest zu legen das wenn das Paramter p nicht leer ist direkt page_per_site auf 1 zu setzen.
Wenn das einmal entwickelt wurde beträgt die einbau Zeit des Mini-Mods weniger wie 5 Minuten
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs

Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitragvon Stefane » 28.07.2007 21:26

nabend,

also das mit den 2 Installationen ist vlt schön gedacht, aber da gib es sicher eine wesentlich einfachere Lösung zu programmieren, und zwar, wie schon von boecki genannt, die viewtopic.php etwas zu editieren. Dort einfach via request_var(...); die eine Parameter der URL abfragen und wenn dieser vorhanden ist, dass soll er nur diesen Post anzeigen. Das sollte kein Problem sein.

Das geht auch ganz einfach...und zwar so:

öffne: viewtopic.php

suche:

Code: Alles auswählen

// Dump vars into template
      $template->assign_block_vars('postrow', $postrow);

füge davor ein:

Code: Alles auswählen

$single_post = request_var ('sp', '');
   if ($single_post == '')
   {

füge danach ein:

Code: Alles auswählen

}
   else if ($single_post == $i+1)
   {
      $template->assign_block_vars('postrow', $postrow);
      break;
   }


Nun kannst du in deiner URL z.B. folgendes machen:
http://localhost/phpBB3/viewtopic.php?t=1&sp=1

so spuckt er dir vom Topic mit der ID 1 nur den ersten Post aus.

Ändere den Parameter sp beliebig, je machdem, welcher einzelne post angezeigt werden soll, oder lass ihn weg und das ganze Thema wird angezeigt.

So werden die ganzen Fehler, die durch 2 Board auftauchen würden ganz einfach umgangen und du hast, wenn ich das richtig verstanden habe, den gleichen Effekt. ;-)

Lg

Stefane

Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitragvon dieweltist » 29.07.2007 00:35

Danke. Prima wäre es jetzt, wenn jemand hier bitte die Code-Änderung bekanntgeben würde, wie man das macht, dass jeder Link zum Beitrag #123 eben diese Url schon hätte, die dann zu der Darstellung dieses einen Beitrages führen würde.

Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitragvon Stefane » 29.07.2007 18:40

hmmf, das wird nicht gehen, weil man, denke ich, einen Anker nicht via php auslesen kann.

Man kann aber den Code folgendermaßen ändern, dass, sobald ein "p=" angegeben ist, NUR dieser Post mit der ID angezeigt wird.

Das wäre dann anstelle der obigen Änderungen das:
suche:

Code: Alles auswählen

// Dump vars into template
      $template->assign_block_vars('postrow', $postrow);

füge davor ein:

Code: Alles auswählen

if ($post_id == '')
   {

füge danach ein:

Code: Alles auswählen

}
   else if ($post_id == $row['post_id'])
   {
      $template->assign_block_vars('postrow', $postrow);
      break;
   }


Das ist aber mit Vorsicht zu genießen, da so häufig ein "p=" übergeben wird und es so ungewollt zu fehlenden, nicht angezeigten Posts kommen kann.

Aber probier das mal aus.

Lg

Stefane

Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitragvon dieweltist » 30.07.2007 15:03

Vielen Dank! Das verstehe ich nicht. Wie, wenn ein 'P=' angegeben wird? Indem man es an den jeweiligen Link zu einem Beitrag, bspw. #123, anhängt? Wo wäre da der Vorteil zur vorherigen Code-Änderung?

Boecki91
Ehemaliger
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitragvon Boecki91 » 30.07.2007 15:27

Die Beitrags-Nummer kommt 2 mal vor
viewtopic.php?p=33&f=66#33

Beim 1. ist es das p Parameter

Beim 2. Mal ein Anker damit man direkt zum Beitrag springt. "#" Zeigt an das nun ein Anker kommt und Danach kommt der Anker Name.
Das kannst du recht leicht selbst machen:
ww.link-zur-seite.de/index.html#irgendwo
Und auf der Seite musst du dann irgendwo

Code: Alles auswählen

<a name="irgendwo"></a>
schreiben und schon Springt man mit dem Link genau da hin.

Weitere Infos:
http://de.selfhtml.org/html/verweise/pr ... .htm#anker
Auch da ist ein Anker und wie heißt der?

Genau, "Anker" :D
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs

Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitragvon dieweltist » 30.07.2007 16:12

Boecki91 hat geschrieben:Die Beitrags-Nummer kommt 2 mal vor
viewtopic.php?p=33&f=66#33

Das verstehe ich schon wieder nicht, wieso die Beitragsnummer zwei mal vorkommt. Nehmen wir doch mal den Link mit Anker zu meinem vorletzten Beitrag in diesem Thread:

http://www.phpbb.de/viewtopic.php?t=152115#886633

Wo kommt da die Beitragsnummer zwei mal vor? Und wie müsste dann die Url angegeben werden, damit nur dieser Beitrag angezeigt wird? Bezogen auf die erste oder zweite Code-Änderung?

Und falls das nicht möglich wäre, dass im Board der Link zu einem einzigen Beitrag automatisch generiert wird; wie könnte ich das System nach meiner obigen Methode mit den zwei Installationen dazu veranlassen, dass jeder Beitrag zu der Installation verlinkt, wo nur ein Beitrag je Seite angezeigt wird?

Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitragvon Stefane » 30.07.2007 17:00

ahoi,

also folgendes:
Ein Anker, also das Ding mit der # ist dazu da, um schnell auf einer Seite zu navigieren. Der Anker kann nur vom Browser selbst ausgelesen werden, einfach gesagt. Ein Anker ist ein HTML-Element, auf welches man mit php nicht zugreifen kann.

Beispiel: Wenn du in phpBB3 ein Topic mit mehreren Beiträgen öffnest und auf die Titel klickst und dir dann die URL jeweils anschaust, dann stellst du fest, dass sich _NUR_ der Anker ändert und _NUR_ im Browserfenster hoch und runtergesprungen wird. Es wird keine Datei neu aufgerufen, sodass auch nix ausgelesen werden kann.

Wenn du ein Topic z.B. letzter Post in einem Forum vom Index aus, wird die ID dieses letzten Posts mit übergeben als Parameter "p=...". Da der Browser auch zu diesem Akner springen soll, damit du den Post gleich lesen kannst, wird der Anker mit der gleichen ID auch noch übergeben. So kommt es zustande, dass 2 Post-IDs vorhanden sind.

Meine letzte Variante ziehlt nun darauf ab, immer sobald ein "p=" vom Script übergeben wird, _NUR_ diesen Post anzuzeigen.
Allerdings halte ich es momentan doch sinnvoller die obere Variante zu nehmen.

Ich denke, worauf du hinauswillst: Sobald man in einem Thema auf den Titel eines Posts klickt, soll dieser alleine angezeigt werden, richtig?

Lg

Stefane

Benutzeravatar
dieweltist
Mitglied
Beiträge: 1966
Registriert: 25.07.2006 13:28
Wohnort: Thüringen
Kontaktdaten:

Beitragvon dieweltist » 30.07.2007 22:05

Ja, genau. Eigentlich wollte ich ursprünglich nur meine diesbezüglichen Ideen und die Umsetzmöglichkeit bekanntgeben. Im Moment habe ich noch nicht mal mehr das phpBB3 installiert, sodass ich jetzt vor Ort nicht mal nachschauen kann. Da war das glaube ich so, dass in der Url einfach nur die Beitrags-ID drin ist, bin mir aber nicht sicher.

Beim UNB bspw. hat eine Url zu einem Beitrag nur die Beitrags-ID in der Url (klick), obwohl es dort auch Thread-IDs gibt. Wenn ich mich nicht täusche, ist das beim phpBB3 auch so; das weiß ich jetzt aber wirklich nicht. Im Moment hat Adobe bei mir die höchtse Priorität. Mit dieser gigantischen Software kann man auch PHP-Code für dynamische Webseiten erzeugen. Ich habe schon die Demo-CD bestellt. Klick!


Zurück zu „[3.0.x] Mod Suche/Anfragen“