Brauche Hilfe beim "Switch-Basteln"

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.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.
kaiste
Mitglied
Beiträge: 37
Registriert: 26.09.2007 13:22

Brauche Hilfe beim "Switch-Basteln"

Beitrag von kaiste »

Hallo zusammen!

Kann mir jemand helfen einen Switch zu basteln, der den "neues Thema"-Button in viewforum und viewtopic nur anzeigt, wenn im entsprechenden Forum alle Themen geschlossen sind?

Gruß,
kaiste
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Erste Frage: Reicht es Dir, wenn die Buttons einfach nur verschwinden, oder soll auch ein Umgehen über Direktlinks neue Themen zu posten verhindert werden?
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
kaiste
Mitglied
Beiträge: 37
Registriert: 26.09.2007 13:22

Beitrag von kaiste »

Hallo!

Buttons nur weg wäre schon gut, ohne Dirketlinkmöglichkeit wär's noch besser.

Gruß,
kaiste
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Ich schau mal, dass ich im Laufe des Tages etwas Zeit frei machen kann um Dir zu helfen. :)
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Also zuerst erzeugst Du in der phpbb_config eine neue Zeile mit dem Namen closed_forums. Und als Wert fügst Du die ids aller Foren ein, bei denen es so sein soll, das neue Themen nur geöffnet werden können, wenn alle anderen geschlossen sind. Die ids werden getrennt mit Kommata. Beispiel: 12,24,51
Dann nimmst Du den folgenden Codeblock

Code: Alles auswählen

if ( in_array($forum_id, explode(',', $board_config['closed_forums'])) )
{
	// Existiert mindestens 1 offenes Thema in diesem Forum?
	$sql = "SELECT topic_id FROM " . TOPICS_TABLE . " WHERE forum_id = $forum_id AND topic_status = 0 LIMIT 1";
	if ( !$result = $db->sql_query($sql) )
	{
		message_die(GENERAL_ERROR, 'Konnte Daten über offene Topics im Forum nicht ermitteln', '', __FILE__, __LINE__, $sql);
	}
	if ( !$db->sql_numrows($result) )
	{
		// Keine Treffer, also wird das Thema-Button angezeigt
		$template->assign_block_vars('switch_show_button', array());
	}
}
else
{
	$template->assign_block_vars('switch_show_button', array());
}
und fügst ihn im viewforum.php unter

Code: Alles auswählen

// End header
//
ein. Ebenso fügst Du denselben Codeblock im viewtopic.php unter

Code: Alles auswählen

$forum_id = intval($forum_topic_data['forum_id']);
ein. Nun müssen wir noch die Templates anpassen.
Im viewforum_body.tpl suche nach (das nun bezieht sich auf subSilver)

Code: Alles auswählen

<td align="left" valign="middle" width="50"><a href="{U_POST_NEW_TOPIC}"><img src="{POST_IMG}" border="0" alt="{L_POST_NEW_TOPIC}" /></a></td>
und ersetze diese Zeile durch

Code: Alles auswählen

<td align="left" valign="middle" width="50">
<!-- BEGIN switch_show_button -->
<a href="{U_POST_NEW_TOPIC}"><img src="{POST_IMG}" border="0" alt="{L_POST_NEW_TOPIC}" /></a>
<!-- END switch_show_button -->
</td>
Im viewtopic_body.tpl suche nach

Code: Alles auswählen

<td align="left" valign="bottom" nowrap="nowrap"><span class="nav"><a href="{U_POST_NEW_TOPIC}"><img src="{POST_IMG}" border="0" alt="{L_POST_NEW_TOPIC}" align="middle" /></a>&nbsp;&nbsp;&nbsp;<a href="{U_POST_REPLY_TOPIC}"><img src="{REPLY_IMG}" border="0" alt="{L_POST_REPLY_TOPIC}" align="middle" /></a></span></td>
ersetze es durch

Code: Alles auswählen

<td align="left" valign="bottom" nowrap="nowrap"><span class="nav">
<!-- BEGIN switch_show_button -->
<a href="{U_POST_NEW_TOPIC}"><img src="{POST_IMG}" border="0" alt="{L_POST_NEW_TOPIC}" align="middle" /></a>&nbsp;&nbsp;&nbsp;
<!-- END switch_show_button -->
<a href="{U_POST_REPLY_TOPIC}"><img src="{REPLY_IMG}" border="0" alt="{L_POST_REPLY_TOPIC}" align="middle" /></a></span></td>
Das wärs. Fehlt nur noch die Sperre bei neuen Postings. Im posting.php suche nach

Code: Alles auswählen

	case 'newtopic':
		if ( empty($forum_id) )
		{
			message_die(GENERAL_MESSAGE, $lang['Forum_not_exist']);
		}
darunter füge ein

Code: Alles auswählen

		if ( in_array($forum_id, explode(',', $board_config['closed_forums'])) )
		{
			// Existiert mindestens 1 offenes Thema in diesem Forum?
			$sql = "SELECT topic_id FROM " . TOPICS_TABLE . " WHERE forum_id = $forum_id AND topic_status = 0 LIMIT 1";
			if ( !$result = $db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, 'Konnte Daten über offene Topics im Forum nicht ermitteln', '', __FILE__, __LINE__, $sql);
			}
			if ( $db->sql_numrows($result) )
			{
				// Keine Treffer, also wird das Thema-Button angezeigt
				message_die(GENERAL_ERROR, 'Du darfst nur neue Themen starten, wenn alle anderen Themen dieses Forums geschlossen sind.');
			}
		}
Diese Modifikation ist ungetestet. Will heissen, ich habe es aus dem Kopf programmiert. Sollte jedoch so wie es da steht funktionieren.

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
kaiste
Mitglied
Beiträge: 37
Registriert: 26.09.2007 13:22

Beitrag von kaiste »

Hallo Tekin!

Erstmal vielen Dank für die Arbeit, die du dir gemacht hast. Ich war nur länger nicht mehr hier und hab's erst heute gelesen.
Wäre auch gegangen, wenn der Switch grundsätzlich in allen Foren gilt. Macht aber nix. Ich klopf halt einmal eine Reihe von 1 bis x in die closed_forums und nehm bei Bedarf eine id raus.
Am Wochenende werd deinen Code mal einbauen und schauen was passiert. Vorher werd ich wahrscheinlich keine Zeit dafür finden:(
Nun aber nochmal DANKEDANKEDANKE und
bis demnächst!
kaiste
kaiste
Mitglied
Beiträge: 37
Registriert: 26.09.2007 13:22

funktioniert, Danke!

Beitrag von kaiste »

Hallo Tekin!

Leider bin ich jetzt erst dazu gekommen, deinen Code in mein Board einzubauen. Nichtsdestotrotz funktioniert es genau wie es soll. Hab auch nix anderes erwartet :wink: Nochmal ein herzliches Dankeschön!!!

Noch ne Frage:
Ich möchte ja, dass dieser Switch grundsätzlich für alle Foren gilt, muss dafür aber vorab ne ganze Liste Foren-IDs in die DB klopfen. Verlangsamt das irgendwann das Board? Gibt's eine simplere Lösung? Zusatzinfo: Beim 1. Boardaufruf nach 0.00 Uhr, werden grundsätzlich alle Themen vom Vortag geschlossen.

Vielleicht hast Du ja noch nen Tip für mich...

Viele Grüße und Frohe Rest-Ostern!
Stephan
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Ändere in allen drei Codeblöcken die If-Zeile von

Code: Alles auswählen

if ( in_array($forum_id, explode(',', $board_config['closed_forums'])) )
auf

Code: Alles auswählen

if ( empty($board_config['closed_forums']) || in_array($forum_id, explode(',', $board_config['closed_forums'])) )
Sobald Du nun die Zelle closed_forums komplett leer lässt, gilt die Sperre für das gesamte Board.

Wichtig: Das empty muss links vom in_array in der if stehen, sonst siehst Du mit großer Wahrscheinlichkeit eine PHP Fehlermeldung wenn Du das Feld closed_forums leerst.

Grüße,
Tekin

P.S.: Warst ja richtig schnell mit der Umsetzung. :D:D
Zuletzt geändert von cYbercOsmOnauT am 05.04.2008 01:39, insgesamt 1-mal geändert.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
kaiste
Mitglied
Beiträge: 37
Registriert: 26.09.2007 13:22

Probleme

Beitrag von kaiste »

Hallo noch mal,

leider klappt irgendwas mit den letzten Änderungen nicht. An viewforum scheint's nicht zu liegen, das geht. Nur kann ich jetzt keine Topics mehr aufrufen. Hab alle Änderungen nochmal überprüft, auch den Codeblock aus der offensichtlich funktionierenden viewforum in die viewtopic kopiert. Ohne Erfolg. Mein IE7 spuckt mir beim Aufruf eines Topics einen internen Serverfehler (HTTP 500) aus.

Ne Idee?
Gruß,
Stephan

P.S. Schnell umgesetzt, nicht wahr :D :D
Mein Board ist nicht online!
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

HTTP 500 ist nun aber sehr suspekt. Denn der kann von meinem Code eigentlich nicht herrühren. Fehlerhafter Code würde höchstens eine PHP Fehlermeldung zum Vorschein bringen.

Beisst sich meine Modifikation vielleicht mit anderen, die Du bereits installiert hast? Achja, diesen Zusatz darfst Du in der if vom posting.php nicht hinzu fügen.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“