YourWBB


yourWBB » WoltLab Burning Board Generation 2 * » Alles von und für das WBB 2.3.x » [WBB 2.3.x] Ideen, Wünsche und Suche » Random Stylechange » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag 4.553 Views | | Thema zu Favoriten hinzufügen
Seiten (3): [1] 2 3 nächste »
Neues Thema erstellen Antwort erstellen

Dieses Thema wurde als erledigt markiert. Thread erledigt

Zum Ende der Seite springen Random Stylechange
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

 Random Stylechange Antworten Zitieren Editieren Melden       UP

Liebe Wbbler,

die User meines Forums sind mit einem neuen Wunsch aufgekommen: Wir haben viele Styles und viele können sich nicht entscheiden, welchen sie nehmen wollen. Sie wünschen sich deswegen eine Random Style - Funktion. Jedes mal, wenn sie neu online kommen, soll ein neuer Style ausgewählt werden.

Ich weiß nun nur nicht, wie ich das genau umsetzen soll.

Ich habe bereits das UserCP erfolgreich angepasst. Die User können die Funktion an- und abstellen, wenn sie möchten (neue Tabellenspalte stylechange in der Mitglieder Tabelle).

Jetzt müsste ich in der global eben noch einbauen wenn stylechange == 1 dann die random Geschichte machen, aber ich blicke in der global.php noch nicht ganz durch. Die Stelle, die sich um die Stylesache kümmert ist ja folgende:
php:
1:
2:
3:
4:
5:
6:
7:
8:
$style = array();
if (isset($board) && ($board['enforcestyle'] == || ($board['styleid'] != && $wbbuserdata['styleid'] == 0))) {
    $style $db->query_first("SELECT s.styleid, s.templatepackid, s.designpackid, tp.templatestructure FROM bb".$n."_styles s LEFT JOIN bb".$n."_templatepacks tp ON(tp.templatepackid=s.templatepackid) WHERE s.styleid = '".$board['styleid']."'");
    $wbbuserdata['designpackid'] = $style['designpackid'];
    $wbbuserdata['templatepackid'] = $style['templatepackid'];
    $wbbuserdata['styleid'] = $style['styleid'];
    $wbbuserdata['templatestructure'] = $style['templatestructure'];
}


Aber das ist ja nur für Gäste, oder? Wo wird denn abgefragt, welchen Style die registrierten User verwenden?

Schon mal vielen lieben Dank für eure Hilfe!

__________________

25.03.11 18:45 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Viktor Viktor ist männlich
Mitglied


images/avatars/avatar-462.gif

Dabei seit: 17.01.04
Beiträge: 102
Fähigkeiten: WBB2 Profi; WBB Lite 1 Profi
Forenversion: 3.0; 2.3

 RE: Random Stylechange Antworten Zitieren Editieren Melden       UP

Hallo,

wenn musst du das in der Datei "acp/lib/session.php" machen.

Wenn es nur für registrierte User sein soll musst du es unter dem Abschnitt machen.

code:
1:
2:
3:
4:
5:
6:
if (!isset($wbbuserdata)) {
	if (isset($wbb_userid) && $wbb_userid != 0) {
		/** read $wbbuserdata using the function getwbbuserdata() (@see functions.php) **/
		$wbbuserdata = getwbbuserdata($wbb_userid, "userid", 1);


Da musst du dann per Ramdon die neue Styleid ermitteln und dann den Code da einbauen.

code:
1:
2:
3:
4:
5:
6:
7:
   	$style = $db->query_first("SELECT s.styleid, s.templatepackid, s.designpackid, tp.templatestructure FROM bb".$n."_styles s LEFT JOIN bb".$n."_templatepacks tp ON(tp.templatepackid=s.templatepackid) WHERE s.styleid = '4'");
	$wbbuserdata['designpackid'] = $style['designpackid'];
	$wbbuserdata['templatepackid'] = $style['templatepackid'];
	$wbbuserdata['styleid'] = $style['styleid'];
	$wbbuserdata['templatestructure'] = $style['templatestructure'];


Da musst du die ermittelte Styleid übergeben und schon klappt es.

Gruß
Viktor großes Grinsen

__________________
Mein Supportboard

25.03.11 23:08 Viktor ist offline E-Mail WWW Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

Hallo Viktor! Vielen lieben Dank für deine Antwort smile Habe folgendes eingefügt:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
if ($wbbuserdata['randomstyle'] == 1) {

$style $db->query_first("SELECT s.styleid, s.templatepackid, s.designpackid, tp.templatestructure FROM bb".$n."_styles s LEFT JOIN bb".$n."_templatepacks tp ON(tp.templatepackid=s.templatepackid) WHERE s.hidestyle='0' ORDER BY RAND() LIMIT 1");
    $wbbuserdata['designpackid'] = $style['designpackid'];
    $wbbuserdata['templatepackid'] = $style['templatepackid'];
    $wbbuserdata['styleid'] = $style['styleid'];
    $wbbuserdata['templatestructure'] = $style['templatestructure'];

}


Nun habe ich aber das Problem, dass bei jedem Seitenaufruf ein neuer Style gewählt wird. Was muss ich tun, damit dies nur noch nach dem Ablauf einer Session passiert?

Also wenn ich online komme, dann wird ein neuer Style ausgesucht. Aber sobald ich dann etwas länger nicht mehr aktiv war und später wieder zurück komme, dann erst wird wieder ein neuer Style ausgesucht?

Ich dachte, dass ich den PHP Code vielleicht an eine andere Stelle in der Session.php packen muss, um das zu erreichen, aber ich seh nicht ganz durch :/

Danke schonmal für jeden weiteren Denkanstoß Freude

__________________

27.03.11 18:43 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

Hat hier wirklich Niemand eine Idee, wie ich das umsetzen könnte unglücklich

__________________

29.08.11 14:57 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

Bei deinem Code dürfte sowas fehlen:
php:
1:
$wbbuserdata['lastactivity'] >= '".(time() - 60 * $useronlinetimeout)."'

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Schrimm: 29.08.11 15:21.

29.08.11 15:12 Schrimm ist offline Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

Hallo Schrimm, danke für deine Antwort! Hät ich auch selber drauf kommen müssen, dass das lastactivity eine Rolle spielt auweia Leider erneuert er den Style immernoch nach jedem Klick, was ich nicht verstehe. Das lastactivity müsste ja nach jedem Klick kleiner sein als das '".(time() - 60 * $useronlinetimeout)."'

Und auf das $useronlinetimeout müsste er ja Zugriff haben :/

__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Epona: 30.08.11 15:08.

30.08.11 15:05 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

Hmm,

Eventuell "lastactivity" mal mit "lastvisit" tauschen? cool

edit:
Ne, nach jedem Klick ist es größer.
Das Problem liegt aber wohl an >=.
Da bei jedem Klick ja genau die "lastactivity" größer ist als die "aktuelle Zeit" minus dem useronlinetimeout oder eben gleich. Freude

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Schrimm: 30.08.11 15:13.

30.08.11 15:09 Schrimm ist offline Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

E: Also müsste das Zeichen eigentlich genau umgedreht sein, oder? Muss das erstmal kurz begreifen.

__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Epona: 30.08.11 15:15.

30.08.11 15:13 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

In diesem Falle ja.

Das Stichwort hierbei ist "timestamp"
Das funktioniert über die Sekunden die seit dem 1.1.1970 00:00 verstrichen sind.

"time()" gibt genau jene Sekunden zurück, die gerade verstrichen sind(timestamp).
Das lastacativity speichert eben genau die Sekunden der letzten Aktivität im Forum(timestamp).
Also das letzte Mal als Forum geklickt wurde.
Da die Sekunden aufaddiert werden, ist logischerweise bei jedem Klick "lastactivit" mindestens so groß wie "time()".
Da jedoch noch das "useronlinetimeout" abgezogen wird, ist es meist größer.

Dennoch sollte es in deinem Falle "lastvisit" heißen, da du ja den letzten Besuch im Forum haben willst, obwohl zwischen den beiden Daten nur ein minimaler Unterschied besteht.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Schrimm: 30.08.11 15:26.

30.08.11 15:23 Schrimm ist offline Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

Vielen lieben Dank für die schnelle Antwort. Hab das Zeichen jetzt ersetzt und bin am ausprobieren. Ich hoffe es funktioniert. Danke für den schnellen Support

Edit: Moment mal. Wird es dann jemals zur Änderung kommen, wenn ich das Zeichen umdrehe? Ich meine diese Abfrage wird ja immer durchgegangen, wenn der User aktiv ist. Also wird Lastvisit ja immer größer sein, oder? @.@

__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Epona: 30.08.11 15:35.

30.08.11 15:31 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

Wenn ich mich recht entsinne wird "lastvisit" nur beim Ausloggen aktualisiert bzw. beim Klick auf "Alle Foren als gelesen makieren".
Ergo isses beim Klick auf den "Logout"-Button gerade mal so groß wie "time()".
Beim nächsten Login jedoch kleiner als "time()" und da soll ja der Stylechange passieren?

Ob nun "lastactivity" oder "lastvisit" musst du selbst entscheiden.

edit:
Die "lastvisit"-Zeit wird dir Beispielsweise bei "Neue Beiträge, seit deinem letzten Besuch: xxxx" angezeigt smile

edit 2:
Meine Antwort oben zeigt wohl doch, dass "lastvisit" nicht geeignet ist, da es zu selten zur Änderung der Zeit kommt.
Sprich wäre es die Zeit kleiner als "time() - useronlinetimeout" würde es ständig einen Stylechange geben(oder auch keinen, hängt vom Vergleichsoperator ab) bis der User sich ausloggt und unmittelbar wieder einloggt.
Somit ist "lastactivity" wohl doch die bessere Wahl.

Dieser Beitrag wurde 7 mal editiert, zum letzten Mal von Schrimm: 30.08.11 19:27.

30.08.11 15:37 Schrimm ist offline Finden Als Freund hinzufügen
minette
HTML - Fanatiker


Dabei seit: 07.03.07
Beiträge: 235
Fähigkeiten: WBB3 Anfänger; WBB2 Profi
Herkunft: aus der bauch meine mutter
Forenversion: 3.1; 2.3

Antworten Zitieren Editieren Melden       UP

mach es doch einfach
session:user => abfrag
ist zu gross db bearbeitung
mach es dann für alle aber mit timestamp
3 oder 4 stil wie die uhr lauf
ist viel besser für dein db

__________________
isch bin es

30.08.11 23:15 minette ist offline E-Mail Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

Zitat:
Original von minette
mach es doch einfach
session:user => abfrag
ist zu gross db bearbeitung
mach es dann für alle aber mit timestamp
3 oder 4 stil wie die uhr lauf
ist viel besser für dein db

Und warum soll das besser sein? geschockt
31.08.11 00:00 Schrimm ist offline Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

Versuche es jetzt mit lastactivity. Bei visit hat sich gar nichts getan.

Edit. Tut sich leider auch nichts. Bin ich doof? unglücklich

Zitat:
if ($wbbuserdata['randomstyle'] == 1 && $wbbuserdata['lastactivity'] <= '".(time() - 60 * $useronlinetimeout)."') {

$style = $db->query_first("SELECT s.styleid, s.templatepackid, s.designpackid, tp.templatestructure FROM bb".$n."_styles s LEFT JOIN bb".$n."_templatepacks tp ON(tp.templatepackid=s.templatepackid) WHERE s.hidestyle='0' ORDER BY RAND() LIMIT 1");
$wbbuserdata['designpackid'] = $style['designpackid'];
$wbbuserdata['templatepackid'] = $style['templatepackid'];
$wbbuserdata['styleid'] = $style['styleid'];
$wbbuserdata['templatestructure'] = $style['templatestructure'];

}


__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Epona: 01.09.11 16:14.

31.08.11 19:27 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

Hallo,

Darf ich mal sehen wo genau du es in der session.php einfügst?

edit:
Eventuell ist der Platz von "Viktor" nicht gerade passend, da der dortige Code nur ausgeführt wird, wenn "$wbbuserdata" nicht belegt ist, was ja nicht der Fall sein muss.
Versuche mal diesen Platz(darunter einfügen):
php:
1:
if ($wbbuserdata['userid'] != 0) {


edit2:
Falls es noch immer nicht funktioniert, kannst du ja mal zu Testzwecken im ACP das "$useronlinetimeout"(ACP-->Einstellungen-->Globale Optionen) auf 0 stellen.
Dann sollte es immer zu einem Stylewechsel kommen, wenn ein Klick geschieht.

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von Schrimm: 01.09.11 17:52.

01.09.11 17:21 Schrimm ist offline Finden Als Freund hinzufügen
Epona Epona ist weiblich
Mitglied


Dabei seit: 15.01.07
Beiträge: 48
Fähigkeiten: WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten
Herkunft: Paris
Forenversion: 2.3; Lite 1.0

Themenstarter Thema begonnen von Epona
Antworten Zitieren Editieren Melden       UP

if ($wbbuserdata['lastactivity'] < time() - $sessiontimeout) {
if ($offline != 1 || $wbbuserdata['can_view_off_board'] != 0) {
$db->unbuffered_query("UPDATE bb".$n."_users SET lastvisit=lastactivity, lastactivity = '".time()."', langid='$wbbuserdata[langid]'".$pmpopup_reset." WHERE userid = '$wbbuserdata[userid]'", 1);
$wbbuserdata['lastvisit'] = $wbbuserdata['lastactivity'];
$wbbuserdata['lastactivity'] = time();
}
checkPosts4AI();
sessionupdate();
}
else {
$db->unbuffered_query("UPDATE bb".$n."_users SET lastactivity = '".time()."', langid='$wbbuserdata[langid]'".$pmpopup_reset." WHERE userid = '$wbbuserdata[userid]'", 1);
$wbbuserdata['lastactivity'] = time();
}


Die Stelle ist mir noch nie aufgefallen. Wäre es nich logischer den Stylechange dort einzubauen? Also wenn stylechange aktiviert ist dann ändere per random den Style während der das auch mit der lastactivity macht? .-.

__________________

01.09.11 18:08 Epona ist offline E-Mail WWW Finden Als Freund hinzufügen
Schrimm
Banned


Dabei seit: 21.08.11
Beiträge: 700

Antworten Zitieren Editieren Melden       UP

Im Prinzip ist es egal wo du es platzierst, so lange du es in den richtigen "If/Else"-Teil packst.
Die php-Datei wird stehts von oben nach unten durchlaufen.
Somit ist auch in gewisser hinsicht die Reihenfolge wichtig.

Da der Stylechange nur für "User", die registriert sind, passieren soll, musst du einen "If"-Teil mit "$wbbuserdata['userid']" finden, wo nach einer "Userid" ungleich "0" gefragt wird.

Da wir hier mit "<=" arbeiten und der Teil, den du meinst, nur mit "<" würde ich den Teil genau unter "meinen" vorgeschlagenen einfügen.

edit:
Einfach mal ausprobieren.
Mehr als nicht zu funktionieren, kann eh nicht passieren. cool

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Schrimm: 01.09.11 18:17.

01.09.11 18:13 Schrimm ist offline Finden Als Freund hinzufügen
Ghostmaster
Das Böse

images/avatars/avatar-4371.gif

Dabei seit: 17.01.04
Beiträge: 6.440
Fähigkeiten: WBB2 Profi
Forenversion: 2.3

Antworten Zitieren Editieren Melden       UP

Probier mal folgendes.

Öffne acp/lib/session.php suche:

code:
1:
2:
			if (isset($styleid)) $session['styleid'] = $styleid;
			else $session['styleid'] = $wbbuserdata['styleid'];


ersetzen mit:

code:
1:
2:
			$randstyles = $db->query_first("SELECT * FROM bb".$n."_styles ORDER BY RAND() LIMIT 1");
			$styleid = $randstyles['styleid'];


Öffne login.php suche:

code:
1:
		$db->unbuffered_query("DELETE FROM bb".$n."_sessions WHERE userid = '$result[userid]'", 1);


füge DANACH:

code:
1:
2:
3:
			$randstyles = $db->query_first("SELECT * FROM bb".$n."_styles ORDER BY RAND() LIMIT 1");
			$randstyleid = $randstyles['styleid'];


Suche weiter nach:

code:
1:
, styleid='".$result['styleid']."' WHERE sessionhash = '$sid'", 1); 


ersetze mit:

code:
1:
styleid='$randstyleid' WHERE sessionhash = '$sid'", 1); 
01.09.11 19:05 Ghostmaster ist offline E-Mail Finden Als Freund hinzufügen
minette
HTML - Fanatiker


Dabei seit: 07.03.07
Beiträge: 235
Fähigkeiten: WBB3 Anfänger; WBB2 Profi
Herkunft: aus der bauch meine mutter
Forenversion: 3.1; 2.3

Antworten Zitieren Editieren Melden       UP

was passiert wenn die session abgelaufen ist ?
da wird doch die table session "geleert" $ userid ?
von wo soll dann der random rechnen?

__________________
isch bin es

01.09.11 23:50 minette ist offline E-Mail Finden Als Freund hinzufügen
Ghostmaster
Das Böse

images/avatars/avatar-4371.gif

Dabei seit: 17.01.04
Beiträge: 6.440
Fähigkeiten: WBB2 Profi
Forenversion: 2.3

Antworten Zitieren Editieren Melden       UP

Der Style wird nur RANDOM genommen.
Wenn eine Session auf 0 ist, wird eine neue erstellt - somit auch eine neue styleID angefordert.
01.09.11 23:53 Ghostmaster ist offline E-Mail Finden Als Freund hinzufügen
Seiten (3): [1] 2 3 nächste » Baumstruktur | Brettstruktur
Gehe zu:

Neues Thema erstellen Antwort erstellen

yourWBB » WoltLab Burning Board Generation 2 * » Alles von und für das WBB 2.3.x » [WBB 2.3.x] Ideen, Wünsche und Suche » Random Stylechange