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.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Ich habe mal irgendwann einen Mod/Snippet geschrieben der das trennt, allerdings für phpbb2. Außerdem einen Mod, der Themen vor dem User versteckt, wenn sie nicht seine eigenen Themen sind (also der User der Ersteller ist, für phpbb3). Allerdings nicht gleich das ganze Forum.

Der Block den du suchst ist dieser:

Code: Alles auswählen

// If the post need approval we will wait a lot longer.
			if ($post_need_approval)
			{
				meta_refresh(10, $redirect_url);
				$message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
				$message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
			}
			else
			{
				meta_refresh(3, $redirect_url);

				$message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
				$message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url . '">', '</a>');
			}

			$message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']) . '">', '</a>');
			trigger_error($message);
Wenn du ganz oben über der klammernden IF Abfrage schaust, dann steht da im Kommentar "Store message" drin ;)

Du musst hier den Inhalt der redirect_url ersetzen falls du dich im Gästebuch befindest.
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,

so, das Problem mit der Weiterleitung ist auch gelöst, ich habe es jetzt so gemacht:

Code: Alles auswählen

......
				// If the post need approval we will wait a lot longer.

			// SVI Guestbook
			$redirect_url2 = append_sid("{$phpbb_root_path}svisuite/gbook.$phpEx");
			
			$book2 = request_var('gaestebuch', 0);
			
			if ($book2 == 1)
			{
				//Guestbook Posting
				if ($post_need_approval)
				{
					meta_refresh(10, $redirect_url2);
					$message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
					$message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
				}
				else
				{
					meta_refresh(3, $redirect_url2);

					$message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
					$message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url2 . '">', '</a>');
				}

				$message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}svisuite/gbook.$phpEx") . '">', '</a>');
				trigger_error($message);			
			}
			else
			{
				//Forum Posting
				if ($post_need_approval)
				{
					meta_refresh(10, $redirect_url);
					$message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
					$message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
				}
				else
				{
					meta_refresh(3, $redirect_url);

					$message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
					$message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url . '">', '</a>');
				}

				$message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']) . '">', '</a>');
				trigger_error($message);
			}		
......
Bleibt mir noch die Sache mit den Forenrechten, das muss ich noch testen. Wenn das auch gelöst ist, dann habe ich ein komplettes Gästebuchauf der Basis von posting.php erstellt, das über das Forum verwaltet wird.


[EDIT]
Ich habe nun etwas mit den Forenrechten gespielt, dabei bekomme ich als nicht eingeloggter User folgende Fehlermeldung wenn ich im Gästebuch auf "Vorschau" klicke
Der eingegebene Bestätigungscode ist fehlerhaft.
Wenn ich eingelogt bin, dann kommt die Fehlermeldung nicht.

Ich kann in das Gästebuch posten, das Forum wird aber für normale User nicht angezeigt. Ich habe dem Forum keine Rolle zugewiesen, sondern nur die erweiterten Berechtigungen verwendet. So habe ich die Rechte jetzt für Gäste eingestellt:

Beiträge
Kann Bekanntmachungen erstellen Nein
Kann Themen-/Beitrags-Symbole verwenden Nein
Kann Forum sehen Nein
Kann neue Themen im Forum starten Nein
Kann Forum lesen Ja
Kann auf Themen antworten Ja
Kann wichtige Themen erstellen Nein

Inhalt
Kann Dateianhänge anfügen Nein
Kann BBCode verwenden Ja
Kann Dateianhänge herunterladen Nein
Kann Flash verwenden Nein
Kann Bilder verwenden Nein
Kann Signatur verwenden Nein
Kann Smilies verwenden Ja

Aktivitäten
alles auf Nein

Diverse
Kann die Wartezeit umgehen Nein
Kann Beiträge ohne Freigabe erstellen Ja
Beitrags-Zähler wird erhöht Nein
Kann das Forum durchsuchen Nein

Umfragen
alles auf Nein


[EDIT_2]
Ich habe noch einen kleinen Schönheitsfehler entdeckt. Wenn die Vorschau angezeigt wird, dann steht im Vorschaufenster über dem Wort "Vorschau" ein Cursor. Das macht er aber nur beim Firefox, beim IE habe ich das nicht gesehen. Was ist die Ursache dafür?

[ externes Bild ]

[EDIT_3]
Ich habe mir das mal angeschaut, der Cursor steht genau an der Stelle wo das Formular beginnt (posting_layout.html bzw. svi_gbook_posting_layout.html). An der ursprünglichen Datei wurde nichts verändert.

Code: Alles auswählen

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

Der Fehler mit der Fehlermeldung Der eingegebene Bestätigungscode ist fehlerhaft. ist behoben, ich hatte vergessen, den Codeteil mit <!-- IF S_CONFIRM_CODE --> in meine Datei mit einzubinden. Die Einstellungen der Rechte funktioniert einwandfrei, bleibt nur noch das Designproblem mit dem Cursor, dann ist das Gästebuch fertig.

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 »

Hast du es nur über das Berechtigungssystem geschafft, dass das Forum nicht angezeigt wird, man aber posten kann? Ich habe mich an dieser Stelle noch nicht sehr ausgiebig mit phpbb3 beschäftigt, es kann natürlich gut sein, dass dort eine Änderung gemacht wurde.

Zu dem Strich kann ich nichts sagen, im proSilver taucht auch im FF nichts auf bei proSilver, allerdings hast du da ja auch Änderungen dran gemacht.
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, ich habe es nur über das Berechtigungssystem gemacht, das klappt ganz gut. Probier es einfach aus, nimm den Befehl (Topic usw. anpassen):
und stelle für ein Forum die Berechtigungen so ein, wie bei mir.

Das Problem habe ich auch an der Original Datei posting_layout.html, also wenn ich ins normale Forum poste. Ich habe es mit den alten Dateien probiert, daran liegt es nicht. Kann vielleicht sein, dass eine der CSS Dateien diesen Effekt verursacht, aber da kenne ich mich auch nicht so gut damit aus. Ich habe den Firefox 2.0.0.8 und Windows XP prof. laufen. Werde es mal noch mit einer anderen Version vom Firefox testen.

Was ich jetzt noch suche ist die Möglichkeit, dass man zuerst die Forenregeln bestätigen muss, bevor man auf "Absenden" klicken kann. Das kann auch für das ganze Forum gelten. Für phpBB2 gabs mal sowas, habs aber noch nicht wieder gefunden.

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 »

Da kannst du doch einfach eine Checkbox ins Template bauen und dann noch einen <!-- IF S_GAESTEBUCH --> oder so drumherum und dann fragst du in der posting.php ab ob es eine Kombination gegeben hat in der zwar Submit (und nicht preview) und GAESTEBUCH (oder wie auch immer du die Variable genannt hast), aber nicht die Checkbox dabei war und brichst die Ausführung in dem Fall sofort ab mit trigger_error(Fehlermeldung);
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, hab auch schon an sowas ähnliches gedacht, dachte nur dass es vielleicht schon einen Mod oder ein fertiges Skript gibt um mir die Arbeit zu erleichtern.

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 gn#36,

irgendwie komme ich nicht ganz klar mit der Abfrage. Ich kann die Checkbox abfragen und dann den "Absenden" Button umschalten, aber ich bekomme es nicht hin, die Fehlermeldung nur auszugeben, wenn der umgeschaltete Button gedrückt wird.

Code: Alles auswählen

.....
$bookagree = request_var('gbookagree', 0);

if ($bookagree == 1)
{
	$template->assign_var('S_GBOOK_AGREE', true);
}
.....

Code: Alles auswählen

......
<div align="left"><input name="gbookagree" type="checkbox" value="1">&nbsp;&nbsp;<span>Test</span></div>
......

			<!-- IF S_GBOOK_AGREE -->
			<input type="submit" accesskey="s" tabindex="6" name="post" value="{L_SUBMIT}" class="button1" />&nbsp;
			<!-- ELSE --><input type="submit" accesskey="s" tabindex="6" name="preview" value="{L_SUBMIT}" class="button1"<!-- IF not S_PRIVMSGS -->onclick="document.getElementById('postform').action += '#preview';"<!-- ENDIF --> />&nbsp;<!-- ENDIF -->
......
Wenn die Checkbox nicht gesetzt ist, dann schalte ich auf die Vorschau um. Wie bekomme ich es jetzt hin, dass zusätzlich dann noch die Fehlermeldung angezeigt wird?

[EDIT]
Irgendwie stecke ich jetzt fest, ich habe noch eine andere Variante probiert, aber das bringt mich auch nicht weiter. So habe ich es jetzt:

Code: Alles auswählen

....
$bookagree = request_var('gbookagree', 0);

if ($bookagree == 1)
{
	$template->assign_var('POST_AGREE_1', "submit");
}
else
{
	$template->assign_var('POST_AGREE_1', "preview");
		
	if ($submit = 0)
	{
		$template->assign_var('S_GBOOK_FAIL', true);
	}
}
.....

Code: Alles auswählen

....
			<div align="left"><input name="gbookagree" type="checkbox" value="1">&nbsp;&nbsp;<span>Test</span></div>

			<input type="hidden" name="gaestebuch" value="1">
			<input type="submit" tabindex="5" name="preview" value="{L_PREVIEW}" class="button1"<!-- IF not S_PRIVMSGS -->onclick="document.getElementById('postform').action += '#preview';"<!-- ENDIF --> />&nbsp;
			<input type="submit" id="postsubmit" accesskey="s" tabindex="6" name="{POST_AGREE_1}" value="{L_SUBMIT}" class="button1"<!-- IF not S_PRIVMSGS -->onclick="document.getElementById('postform').action += '#preview';"<!-- ENDIF -->  />&nbsp;
....
Er schaltet mir den Button erst von preview auf submit um, wenn die Checkbox gesetzt ist, aber ich bekomme es nicht hin, dass nur dann ein Fehlertext angezeigt wird, wenn auf den "Absenden" Button geklickt wird, ohne dass die Checkbox gesetzt ist.

Ich denke das geht nur an der Stelle in der posting.php wo genau der "Absenden" Button abgefragt und dann der Beitrag gespeichert wird. Leider konnte ich nicht die passende Stelle dazu finden. Kannst du nochmal schauen, wo ich da eingreifen muss?


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 »

Ich dachte eigentlich eher an sowas:

Code: Alles auswählen

if(request_var('gaestebuch',0) && $submit)
{
if(!request_var('checkbox_agree',0))
{
trigger_error('Keine Einverständnis');
}
}
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 für deine Hilfe. Ich habe es jetzt so getestet wie dein Vorschlag war, aber es bringt auch nicht den gewünschten Erfolg. Das Problem ist dann, dass alle gemachten Eingaben verloren gehen und man wieder am Ausgang ist mit der Sicherheitsabfrage. Er müsste dann irgendwie zur Vorschau springen.

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 kannst versuchen es als Posting-Error einzufügen, so ähnlich wie wenn der Titel bei einem neuen Thema fehlt.

Effektiv müsstest du dazu nur vor dem hier:

Code: Alles auswählen

// Store message, sync counters
	if (!sizeof($error) && $submit)
	{
(Am besten relativ früh nach dem hier:

Code: Alles auswählen

$error = $post_data = array();
)
das gleiche wie oben einfügen, nur dass du statt trigger_error() etwas wie das hier verwendest:

Code: Alles auswählen

$error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
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.
Antworten

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