Seite 1 von 2

else/not in templates (BEGIN switch_...)

Verfasst: 26.02.2005 04:20
von [sychron]
Hi,

ich habe mit der Suche keinen passenden Thread gefunden, also muß ich selbst fragen ;-)

Also ... ich möchte in meinem Menü einen Button für private Nachrichten einbauen. Für diesen Button existieren drei Grafiken:
- Gelbe Schrift im Normalfall
- Grüne Schrift, falls der Benutzer neue Nachrichten hat.
- Rote Schrift, falls der Benutzer auf der Nachrichtenseite ist.

Wärend der zweite Fall recht einfach zu behandeln sein dürfte, macht mir der dritte Probleme. Gibt es eine Art if-then-else-Konstrukt, welches ich hier verwenden könnte?

Verfasst: 26.02.2005 11:35
von Blutgerinsel
Schau dir mal die /inlcudes/page_header.php an....

In meinem derzeitigen Style wird einer Template Var das zugewiesen:

Code: Alles auswählen

'PRIVMSG_IMG' => $icon_pm,
Und aus dem Konstrukt was neue PMS ermittelt und den Zustand festhält bekommt die Var ihren Inhalt:

Code: Alles auswählen

//
// Obtain number of new private messages
// if user is logged in
//
if ( ($userdata['session_logged_in']) && (empty($gen_simple_header)) )
{
	if ( $userdata['user_new_privmsg'] )
	{
		$l_message_new = ( $userdata['user_new_privmsg'] == 1 ) ? $lang['New_pm'] : $lang['New_pms'];
		$l_privmsgs_text = sprintf($l_message_new, $userdata['user_new_privmsg']);

		if ( $userdata['user_last_privmsg'] > $userdata['user_lastvisit'] )
		{
			$sql = "UPDATE " . USERS_TABLE . "
				SET user_last_privmsg = " . $userdata['user_lastvisit'] . "
				WHERE user_id = " . $userdata['user_id'];
			if ( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, 'Could not update private message new/read time for user', '', __LINE__, __FILE__, $sql);
			}

			$s_privmsg_new = 1;
			$icon_pm = $images['pm_new_msg'];
		}
		else
		{
			$s_privmsg_new = 0;
			$icon_pm = $images['pm_new_msg'];
		}
	}
	else
	{
		$l_privmsgs_text = $lang['No_new_pm'];

		$s_privmsg_new = 0;
		$icon_pm = $images['pm_no_new_msg'];
	}

	if ( $userdata['user_unread_privmsg'] )
	{
		$l_message_unread = ( $userdata['user_unread_privmsg'] == 1 ) ? $lang['Unread_pm'] : $lang['Unread_pms'];
		$l_privmsgs_text_unread = sprintf($l_message_unread, $userdata['user_unread_privmsg']);
	}
	else
	{
		$l_privmsgs_text_unread = $lang['No_unread_pm'];
	}
}
else
{
	$icon_pm = $images['pm_no_new_msg'];
	$l_privmsgs_text = $lang['Login_check_pm'];
	$l_privmsgs_text_unread = '';
	$s_privmsg_new = 0;
}
Und anstatt dieses Bildes im Image Array welches in der SubSilver.cfg im Standard erzeugt wird und bei all den Anderen. Könntest du einfach die Farbe mit dem <font color='ffff00'>gfdgdfg</font> übergeben.
Die Template Var scheint es im Standard noch nicht zu geben, daher anlegen.

Und auch das /template/subSilver/overall_header.tpl entsprechend für die neue Template Var umgestalten......

Verfasst: 26.02.2005 17:50
von [sychron]
Hmm ... wie gesagt, anzeigen, ob neue Mails da sind, kann ich schon, das funktioniert ähnlich Deinem Weg.

Die Buttons mit den verschiedenen Farben habe ich als Rollover-Bilder vorliegen, das funktioniert auch wunderbar.

Dein Ansazt hilft mir auch bei meinem eigentlichen Problem weiter, nur fehlt mir noch eine winzige Information: Wo kann ich auslesen, ob der Benutzer sich gerade PN's, Grupen, Mitglieder etc. anzeigen lässt?

Verfasst: 26.02.2005 18:09
von Blutgerinsel
Kannst du vielleicht etwas präziser den Bereich einschränken um den es geht ?

Weil mein gesagtes bezieht sich auf den PM Link welcher du im Forumskopf vorfindest und ich gewinne den Eindruck als ob du das PM Menü umbauen möchtest ?

Verfasst: 26.02.2005 22:07
von [sychron]
Das ist fast richtig. Der PN-Button war nur der schwierigste Punkte.

Ich möchte das komplette Forenmenü mit Buttons darstellen. Von diesen Buttons existieren zwei Versionen, a) Normal und B) Seite wird gerade angezeigt. Und dieses b) ist mein Problem.

Ich möchte das Buttonbild austauschen,
für den Mailbutton, wenn der Nutzer gerade im PN-Menü ist,
für den Gruppenbutton, wenn der Nutzer gerade in der Gruppenanzeige ist,
für den Mitgliederbutton, wenn der User gerade in der Mitgliederliste ist,
...

später auch
für den Antwortbutton, wenn der User gerade eine Antwort schreibt,
...

und so weiter
Deshalb muß ich in overall_header einen Weg finden, herauszufinden, welchen Button ich hervorheben muß, also: Auf welcher Seite ich gerade bin.

Verfasst: 26.02.2005 23:21
von Blutgerinsel
Du könntest das Array

$userdata im Header abfragen, darin gibt es ein Element session_page oder so ähnlich ggf. mit <pre> print_r </pre> ausgeben lassen.

und in der inludes/constants.php findest du Konstanten die aufzeigen wo der jeweilige User derzeit ist

Code: Alles auswählen

// Page numbers for session handling
define('PAGE_INDEX', 0);
define('PAGE_LOGIN', -1);
define('PAGE_SEARCH', -2);
define('PAGE_REGISTER', -3);
define('PAGE_PROFILE', -4);
define('PAGE_VIEWONLINE', -6);
define('PAGE_VIEWMEMBERS', -7);
define('PAGE_FAQ', -8);
define('PAGE_POSTING', -9);
define('PAGE_PRIVMSGS', -10);
define('PAGE_GROUPCP', -11);
define('PAGE_TOPIC_OFFSET', 5000);
Naja das VBB Board zeigt auch auf in wer in welchem Thread ist und ob er gerade Zitiert, Antworter etc.
Da ist PHPBB noch sehr grob

Könnte aber sein das die SQL Statments in niedriger Pirotät gesendet werden um Serverlast vorzubeugen, daher könnte es Verschiebungen geben sofern die Annahme bestätigt ist....

Oder aber du setzt Javascript ein...

Verfasst: 26.02.2005 23:28
von [sychron]
Ok ...

Jetzt noch die dumme Frage des Abends: Ich hatte gehofft, um das Lernen von PHP herumzukommen und das alles in den Templates hinzubekommen ;-(

Ich stelle mir das jetzt wie beim PN-Button vor. Da wird 'ne ´Variable gesetzt, die den entsprechenden Wert enthält, und diese Variable setze ich in meiner Seite ein. Nur: Das mach phpBB automatisch, und ich weis net, wo. Wenn ich an der Stelle, wo das geschieht, noch einen Satz weiterer Variablen, eine pro Button, setzen würde, wäre mein Problem gelöst ...

Kannst Du mir einen Tip geben, wo ich nach dieser Zuweisung suchen muß, um sie entsprechend zu verändern?
Kann ich überhaupt einfach so neue Variablen definieren?

Verfasst: 27.02.2005 11:32
von Blutgerinsel
Ich würde mal intuitiv meinen Fokus auf page_header.php setzen und auf overall_header.tpl

Im Template müsste man dafür sorgen das jeder Button eine Template Var besitzt.

Wenn man das hat sollte man $template->assign....
auch diese Vars in der Form:

Code: Alles auswählen

'IMG_PM'=>PAGE_SEARCH == $userdata['session_page'] ? 'imgactivepm' : 'imginactivepm';
Diese Images müssten eigentlich global verfügbar sein, wenn man diese in Subsilver.cfg oder in einem anderen Template definiert

Verfasst: 27.02.2005 19:36
von [sychron]
Danke, werde das gleich mal ausprobieren

Verfasst: 28.02.2005 02:55
von [sychron]
Exakt so klappt's nicht ... Die Konstanten werden nach ersten Erkenntnissen nur für die Online-Listen verwendet, nicht für die normale Userinfo.

ich mache das jetzt "brute force" und frage die Variable $page_header per String-Vergleich ab. Das ist zwar nicht sehr portabel, aber immerhin funktioniert es erstmal. Ich muß mich da wohl echt mal tiefer einlesen, um herauszufinden, wie man diese Konstanten genauer anwendet.