Was brauche ich für externe Beitragserstellung

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.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Was brauche ich für externe Beitragserstellung

Beitrag von Helmut »

Hallo,

so, nun habe ich wieder eine Frage. Ich möchte gerne ein Gästebuch machen, das auf der Basis eines Themas in einem bestimmten Forum funktioniert. Das Thema und das Forum gibt es schon auf meinem alten Forum, nun möchte ich es genauso für phpBB3 machen. Die Anzeige für den Text geht schon (Dank an nickvergessen und an gn#36), aber die Texteingabe fehlt noch.

Ich habe mir die posting.php mal angeschaut, da ist soviel Zeug drinnen, was ich garnicht brauche. Es soll lediglich eine Antwort auf ein bestehendes Thema erstellt werden, ohne Subject, ohne Poll und ohne Attachment und ohne Signatur. Nur der Text, bbcode und Smilies sollen in die Eingabe rein. Eine Vorschau wäre auch gut, eine Möglichkeit zum editieren und löschen der bestehenden Antworten brauche ich nicht. Achja, die Berechtigungen zum Verfassen eines Beitrages sollen wie im Forum sein.

Kann mir dabei jemand etwas helfen was ich dazu an Teilen z.B. aus der posting.php usw. brauche und wie ich das am besten umsetzen kann?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Die einfachste Lösung wird wohl sein, daß du einfach die posting.php von phpBB mit einem eigenen Template verwendest. Dann kannst du ja über eine spezielle GET/POST Variable steuern, ob das original- oder dein Template verwendet wird.
KB:knigge
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Pyramide,

hm, du meinst ich solle an die posting.php eine Variable anhängen, so etwa: posting.php?mode=gbook

und dann über if oder switch einfach auf mein Template umschalten. Könnte klappen, werde ich morgen mal testen.


[EDIT]

So, ich habe das mal getestet,das mit dem "umbiegen" auf mein Template geht schon, aber es gibt doch einige Probleme. Ich habe jetzt folgenden Code eingebaut:

Aufruf der posting.php

Code: Alles auswählen

		'SVI_GB_POSTING'	=> append_sid("{$phpbb_root_path}posting.$phpEx?mode=reply&f=$forum_id&t=$topic_id&gb=1"),
posting.php

Code: Alles auswählen

......
// Output page Forum or Guestbook

switch ($_GET['gb'])
{
	case '1':
		$book = 1;
	break;
}

if (empty($book))
{
	page_header($page_title);

	$template->set_filenames(array(
		'body' => 'posting_body.html')
	);
}
else
{
	page_header($user->lang['SVI_PAGE_GBOOK']);
	
	$template->set_filenames(array(
		'header' => 'svi_header.html',
		'body' => 'svisuite/svi_gbook_posting.html')
	);
}
.....
gbook_posting.html

Code: Alles auswählen

.....
<form id="postform" method="post" action="{S_POST_ACTION}" onsubmit="return checkForm(this);"{S_FORM_ENCTYPE}>

<!-- IF S_DRAFT_LOADED -->
	<div class="panel">
		<div class="inner"><span class="corners-top"><span></span></span>
		
		<h3>{L_INFORMATION}</h3>
		<p>{L_DRAFT_LOADED}</p>
		
		<span class="corners-bottom"><span></span></span></div>
	</div>
<!-- ENDIF -->

<!-- IF S_SHOW_DRAFTS --><!-- INCLUDE drafts.html --><!-- ENDIF -->

<!-- IF S_POST_REVIEW --><!-- INCLUDE posting_review.html --><!-- ENDIF -->

<!-- IF S_UNGLOBALISE -->
	<div class="panel bg3">
		<div class="inner"><span class="corners-top"><span></span></span>
		<fieldset class="fields1">
			<h2>{L_SELECT_DESTINATION_FORUM}</h2>
			<p>{L_UNGLOBALISE_EXPLAIN}</p>
			<dl>
				<dt><label for="to_forum_id">{L_MOVE}:</label></dt>
				<dd><select id="to_forum_id" name="to_forum_id">{S_FORUM_SELECT}</select></dd>
			</dl>
			
			<dl>
				<dt>&nbsp;</dt>
				<dd><input class="button1" type="submit" name="post" value="{L_CONFIRM}" /> <input class="button2" type="submit" name="cancel_unglobalise" value="{L_CANCEL}" /></dd>
			</dl>
		</fieldset>

		<span class="corners-bottom"><span></span></span></div>
	</div>
<!-- ENDIF -->

<!-- IF S_DISPLAY_PREVIEW --><!-- INCLUDE posting_preview.html --><!-- ENDIF -->

<div class="panel" id="postingbox">
	<div class="inner"><span class="corners-top"><span></span></span>
	
	<h3>{L_POST_A}</h3>

	<!-- DEFINE $EXTRA_POSTING_OPTIONS = 1 -->
	<!-- INCLUDE posting_editor.html -->

	<span class="corners-bottom"><span></span></span></div>
</div>
</form>
......
das sieht dann so aus: Bild

Ich bekomme die Felder unten nicht weg und auch dis Box rechts bei den Smilies lässt sich nicht anpassen.

Wenn ich dann auf "Vorschau" oder "Absenden" klicke, dann bekomme ich folgende Fehlermeldung: Das übermittelte Formular war ungültg. Versuche erneut, das Formular abzusenden. und außerdem springt er zur normalen Vorschau von der posting.php. Scheint so als ob es doch nicht so einfach ist, die posting.php für diesen Zweck zu nutzen.

Was kann ich machen, damit es trotzdem geht?

Ich dachte mir schon, die posting.php und alles was dazu gehört, umzubenennen, aber das scheint mir eine ziemliche Menge an Arbeit zu sein damit es funktioniert und sich nicht mit der normalen posting.php in die quere kommt.



Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

so, ich bin jetzt einen Schritt weiter, die Fehlermeldung kam dadurch, dass ich am Ende von </form> davor das {S_FORM_TOKEN} vergessen hatte. Er nimmt nun den Text an, aber wenn ich auf "Vorschau" klicke, dann lande ich auf der normalen Vorschau von der posting.php und nicht auf der angepassten Datei. Ich finde leider den Punkt nicht, wohin der Button verweist und weis auch nicht, wie ich die posting.php dazu bringe, auf meine *.html für die Vorschau und nach dem Absenden zu springen.

Diese Dateien habe ich als Kopie schon angepasst, aber nicht alle Änderungen werden auch angezegt:
posting.php
posting_editor.html -> svi_gbook_posting_editor.html
posting_preview.html -> svi_gbook_posting_preview.html
posting_review.html -> svi_gbook_posting_review.html
posting_buttons.html -> svi_gbook_posting_buttons.html

Kann mir jemand da etwas weiterhelfen?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Du könntest ein zusätzliches Hidden Field einfügen in dem du dann die Information einfügst, dass du gerade in das Gästebuch postest.
Also etwas wie

Code: Alles auswählen

<input type="hidden" name="gaestebuch" value="1">
das du mit

Code: Alles auswählen

request_var('gaestebuch',0);
in der posting.php abfragen könntest, das würde auch dann mitgeschickt, wenn du die Vorschau verwendest.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo gn#36,

ja wäre ne Möglichkeit, aber dazu müsste ich trotzdem wissen, an welcher Stelle genau die Vorschauseite generiert wird und wie ich dann auf meine Seite verweisen kann, das konnte ich noch nicht finden.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Eigentlich ist das Preview ja nichts anderes als das Postingfenster beim ersten Aufruf, nur dass noch ein paar Daten hinzu kommen die angezeigt werden. Abgesehen davon dass du das in deinem Template berücksichtigen musst musst du eigentlich nur grundsätzlich darauf reagieren wenn die Variable gesetzt ist. Ob das jetzt für das posting oder ein preview ist ist dabei ja egal. Du dürftest auf die gleiche Weise reagieren können wie vorher.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo gn#36,

ich habe es jetzt doch soweit hin bekommen. Für die Vorschau ist die Datei posting_body.php und posting_layout.html verantwortlich, als ich die Kopie entsprechend angepasst hatte, klappte das mit der Vorschau perfekt.

1. Nur ein Problem habe ich noch, nach Absenden des Beitrages lande ich auf der viewtopic.php. Hast du noch eine Idee, wie ich nach dem Absenden wieder auf der Gästebuchseite lande?


2. Wie muss ich die Rechte einstellen, damit ich zwar im Gästebuch posten kann, aber das Forum nicht in der normalen Forenansicht auftaucht und ich auch nicht vom normalen Forum aus posten kann?


[EDIT]
Jetzt habe ich noch ein Problem gefunden. Wenn ich im Gästebuch auf "Vorschau" klicke, dann ruft er immer die posting_body.php auf und je nachdem was ich dann ob ich dann <!-- INCLUDE svi_gbook_posting_layout.html --> (Gästebuch Vorschau) oder <!-- INCLUDE posting_layout.html --> (mormale Vorschau) auf. Wie kann ich dort umschalten, dass er mir die richtige Vorschau anzeigt?

In der posting.php habe ich es gemacht, der Teil funktioniert auch:

Code: Alles auswählen

.....
// Output page Forum or SVI
switch ($_GET['book'])
{
	case 'pst':
		$book = "pst";
	break;
	
	case '':
		$book = '';
	break;
	
}

if ($book == '')
{
	page_header($page_title);

	$template->set_filenames(array(
		'body' => 'posting_body.html')
	);
}
else
{
	page_header($user->lang['SVI_PAGE_GBOOK']);
	
	$template->set_filenames(array(
		'header' => 'svi_header.html',
		'body' => 'svi_gbook_posting_layout.html')
	);
}

if ($book == "pst")
{
	$template->assign_var('S_DIS_GBOOK', true);
}
.....

[EDIT_2]

So, ich bin bei meinen Bemühungen nun ein kleines Stück weiter gekommen. Ich habe in der posting_body.html nun diese Änderung eingebaut:

Code: Alles auswählen

....
<!-- IF S_PRIVMSGS -->
	<!-- INCLUDE posting_pm_layout.html -->
<!-- ELSE -->
	<!-- IF S_DIS_GBOOK -->
		<!-- INCLUDE svi_gbook_posting_layout.html -->	
	<!-- ELSE -->
		<!-- INCLUDE posting_layout.html -->		
	<!-- ENDIF -->
<!-- ENDIF -->
....
Das Umschalten zwischen posting_layout.html und svi_gbook_posting_layout.html funktioniert auch soweit, aber sobald ich die Vorschau im Gästebuch drücke, verliere ich den Wert in $book und er springt dann auf die normale Vorschau. Was muss ich machen, damit mir der Wert nicht verloren geht, bis der Beitrag abgesendet ist?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Wenn du die POST Variable einfach grundsätzlich in das Formular einfügst (evtl. sogar "hardcoded" im Template, das ist vermutlich in dem Fall das einfachste) dann sollte die Variable doch eigentlich jedes Mal mitgesendet werden wenn das korrekte Formular angezeigt wird.

Das Sichtbarkeitsproblem ist natürlich tatsächlich eines. Du kannst das Posting für Gäste nicht verbieten, sonst würde es - da du ja die posting.php verwendest - auch im Gästebuch nicht mehr klappen. Wenn du die Sichtbarkeit entfernst dann weist auch die posting.php alle Versuche zurück in das Forum zu posten. Genau hier könntest du ansetzen indem du die posting.php so einstellst, dass lediglich auf die Posting-Rechte reagiert.
Wenn du nach $auth-> in der Datei suchst müsstest du die betreffende Stelle sicher schnell finden. Anders geht es denke ich nicht. Dann musst du nur noch die Rechte auf "lesen und sehen verboten" aber posting erlaubt stellen und evtl. einschränken, dass nur anonymous in dem Forum posten kann. Das hätte dann sogar den Vorteil, dass du einigen Gruppen die Sicht auf dieses Forum lassen könntest wenn du wolltest.

Die Weiterleitung solltest du finden können wenn du mal nach "meta" oder "trigger_error" in der posting.php suchst. Hier könntest du dann z.b. mit einem simplen IF abfragen ob du gerade vom Gästebuch oder aus dem Forum kommst (oder ob das Forum in das du gerade gepostet hast das Gästebuch ist) und dann das Ziel in der Meta Funktion entsprechend anpassen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo gn#36,

danke dir für deine Unterstützung. Das mit der Vorschau klappt jetzt, ich habe das hier noch eingebaut:

posting.php

Code: Alles auswählen

....
$book2 = request_var('gaestebuch', 0);

if ($book2 == 1)
{
	$template->assign_var('S_DIS_GBOOK', true);
}
....
svi_gbook_posting_editor.html

Code: Alles auswählen

<input type="hidden" name="gaestebuch" value="1">
Die Sache mit der Weiterleitung nach dem Absenden ist nicht so leicht, ich habe mehrere Stellen mit "meta" und "trigger_error" gefunden, aber keine passt so richtig dazu. Kannst du da auch mal schauen, ob du eine geeignete Stelle findest?

Wegen den Forenrechten werde ich mir das mal anschauen, ich glaube mich zu erinnern, dass man Foren anzeigen und Beiträge lesen/schreiben getrennt einstellen kann. Wenn das so nicht gehen sollte, dann werde ich mich wohl mit "$auth->" in der posting.php beschäftigen müssen.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Antworten

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