Seite 1 von 2

Brauche Hilfe beim "Switch-Basteln"

Verfasst: 28.01.2008 14:48
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

Verfasst: 30.01.2008 01:15
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?

Verfasst: 30.01.2008 15:49
von kaiste
Hallo!

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

Gruß,
kaiste

Verfasst: 01.02.2008 02:31
von cYbercOsmOnauT
Ich schau mal, dass ich im Laufe des Tages etwas Zeit frei machen kann um Dir zu helfen. :)

Verfasst: 03.02.2008 02:26
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

Verfasst: 06.02.2008 08:49
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

funktioniert, Danke!

Verfasst: 24.03.2008 14:45
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

Verfasst: 24.03.2008 15:46
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

Probleme

Verfasst: 25.03.2008 10:04
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!

Verfasst: 26.03.2008 10:40
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.