Kombination mit Admin Unread Time Addon nicht möglich.

Neue Projekte und Anfragen, Teamarbeiten und Alpha/Beta Scripte jeder Art.
KEINE Supportanfragen zu bestehenden MODs!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Kombination mit Admin Unread Time Addon nicht möglich.

Beitrag von Simpson »

Ich habe noch einen etwas festgestellt Oxpus und zwar, wenn man aus dem "UPItoDB 1.0.6 Fix" die Stelle in der index.php

Code: Alles auswählen

#
#-----[ OPEN ]------------------------------------------
#
index.php

#
#-----[ FIND ]------------------------------------------
#
//
// End session management
//

#
#-----[ AFTER, ADD ]------------------------------------------
# // If you have installed a "Number of Posts Since Last Visit" mod, deinstall it to avoid errors
if( $userdata['session_logged_in'] )
{
	$sql = "SELECT * FROM ". FORUMS_TABLE;
	if (!$result = $db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
	}
	$forum_data = array();
	while( $row = $db->sql_fetchrow($result) )
	{
		$forum_data[] = $row;
	}

	$is_auth_ary = array();
	$is_auth_ary = auth(AUTH_ALL, AUTH_LIST_ALL, $userdata, $forum_data);
	for ($i = 0; $i < count($forum_data); $i++)
	{
		if (($is_auth_ary[$forum_data[$i]['forum_id']]['auth_read']) or ($is_auth_ary[$forum_data[$i]['forum_id']]['auth_view']))
		{
			if ($auth_forum_id == '')
			{
				$auth_forum_id = $forum_data[$i]['forum_id'];
			}
			else
			{
				$auth_forum_id .= ',' . $forum_data[$i]['forum_id'];
			}
		}
	}

   $p=0;
   $jetzt_vor_einem_monat = time() - 2592000;
   $sql = "SELECT count(p.post_id)
   	  FROM " . POSTS_TABLE . " AS p LEFT OUTER JOIN " . TOPIC_READ_TABLE . " AS r
      ON ( p.topic_id = r.topic_id AND r.user_id = " . $userdata['user_id'] . ")
      WHERE ( (r.user_id = " . $userdata['user_id'] . " OR r.user_id IS NULL)
         AND p.post_time > " . $jetzt_vor_einem_monat . "
         AND (p.post_time > r.visit_time OR p.post_edit_time > r.visit_time OR r.topic_id IS NULL) )
         AND p.forum_id IN (" . $auth_forum_id . ")
      ORDER BY p.topic_id DESC, p.post_id DESC";
   if ( $result = $db->sql_query($sql) )
   {
		$p = $db->sql_fetchrow($result);
   }
   $countposts = ( $p[0] == 1 ) ? $lang['Post'] : $lang['Posts'];
   $lang['Search_new'] = ( $p[0] == 0 ) ? $lang['Search_new'] : $lang['New_for_user'] . " " . $p[0] . " " . $countposts;

}
mit dem Admin Unread Time Addon kombiniert, sprich 2592000 gegen $board_config['unread_time']; ersetzt, funktioniert die Anzeige wieviele Beiträge ungelesen sind nicht mehr.

Haste dafür noch ne Lösung?
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Die Änderungen an der Datenbank gemäß meinem Mod hast Du aber schon durchgeführt, oder?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ja die habe ich durchgeführt. Interssanterweise geht das suchen von 2592000 und ersetze durch $board_config['unread_time']; an allen anderen Stellen ohne Probleme, nur an dieser Stelle wo der Teil von dir für das berechnen von ungelesenen Beiträgen auftritt, dort geht es einfach nicht, er zeigt dann die anzahl der ungelesenen Beiträge einfach nicht mehr an.

So sieht die Zeile dann aus:

Code: Alles auswählen

$jetzt_vor_einem_monat = time() - $board_config['unread_time'];
Zuletzt geändert von Simpson am So 29.Feb, 2004 20:17, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ist schon seltsam, denn Du bist der Erste, der damit Probleme hat.
Oder hast Du den Categories Hierarchy Mod eingebaut? Dafür sind ja die Parts 2, bzw. 3 gedacht.
Und kurioserweise wird ja an dem Mod an sich nichts verändert, sonsern auch nur die Zahl durch eine Board-Variable ersetzt.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ich kann ja noch mal die index.php ja noch mal von Anfang an moden - ist übrigens ein sauberes phpBB 2.06c ohne weitere Mods und ich verstehe es auch nicht, wäre auch der Meinung das man das einfach austauschen können müsste und trotzdem geht es genau an dieser einen Stelle die die Beiträge zählen soll nicht.

Aber ich versuchs noch mal und gebe erneut Rückmeldung.
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ich habs jetzt glaube ich. Einen Mod habe ich doch installiert, aber ich hielt ihn nicht für nötig zu erwähnen, weil er bei allen anderen Stellen wo ich die fixe Zahl gegen eine Variable ausgetauscht habe, auch nicht stört.

Es ist der "Last Edited by Mod" und ich fange langsam an einiges zu kappieren.

Der "Last Edited by Mod" scheint eine Rutine für den UPItoDB Mod zu ändern, welche an bestimmten Stellen zu eigenartigen Reaktionen führt.


Der "Last Edited by Mod" führt anscheinend, wenn man ihn so installiert das auch der letzte Beitrag bei Editierung in einem Thread das "Last edited by" enthält dazu, das folgende Nebeneffekte mit dem UPItoDB auftreten:

1. alle editerten werden als neue Beiträge vom UPItoDB angesehen
2. die Zeitvariable $board_config['unread_time']; funktioniert überall, bis auf in deinem Teil wo die Anzahl der ungelsenen Beiträge berechnent werden, aus einem unerfindlichen Grund muss die Zahl Fix sein und kann dann nicht mehr über die Datenbank geholt werden
3. klickt man auf "Suche nach ungelesenen Beiträgen" oder "Suche Beiträge seit letztem Besuch" werden alle editierten Beiträge als neu aufgelistet, jedoch erscheint das Icon statt gelb weiss und es fehlt das JumpToNewestPostIcon, was komischerweise in der index.php und viewforum.php nicht fehlt und dort werden editierten Beiträge auch mit einem gelben Icon versehen.


Kurzum die Änderungen die folgende Änderung, welche durch den "Last edited by" Mod durchgeführt wird, stiftet Unruhe im UPItoDB Mod:

Code: Alles auswählen


Öffne includes\functions_post.php und folge den Anweisungen...


***************************************************** - 1 - ********************************************************************
suche für phpBB 2.01 / 2.02 / 2.03 / 2.04:
********************************************************************************************************************************


	$edited_sql = ( $mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post'] ) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";


********************************************************************************************************************************
ersetze mit:
******************************************************************************************************************************** 
 
	$usr_id = $userdata['user_id']; 
	$edited_sql = ( $mode == 'editpost' ) ? ", post_edit_user = $usr_id, post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : ""; 


***************************************************** - 1 - ********************************************************************
suche für phpBB 2.05 / 2.06:
********************************************************************************************************************************

	$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";

********************************************************************************************************************************
ersetze mit:
********************************************************************************************************************************


	$usr_id = $userdata['user_id']; 
	$edited_sql = ( $mode == 'editpost' ) ? ", post_edit_user = $usr_id, post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : ""; 

Die Nebeneffekt das editerte Beiträge als neu erscheinen ansich wäre wohl auch gar nicht schlimm, nur weder du noch BigRib (der Author des UPItoDB Mod) haben mit dem "Last Edited by Mod" gerechnet und somit nicht geahnt das dieser Nebenwirkungen mit dem UPItoDB hat, kurzum alles was mit dem UPItoDB Mod in Kombination mit dem "Last edited by Mod" passiert ist Zufall und unberechnet.

Shit das versteh ich jetzt erst, das ist ja blöd ^w ausgerechnet jetzt wo BigRib offline gegangen ist, man, man, man warum ist mir das nicht schon vor 1 Jahr eingeleuchtet, so lange steht die 1.06 doch jetzt schon mindestens.
Zuletzt geändert von Simpson am So 29.Feb, 2004 23:53, insgesamt 3-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Den Last edited by Mod habe ich hier installiert und es funktioniert ja auch mit Deinem Mod inkl. meiner Ergänzungen.
Ich habe aber leider momentan weniger Zeit, da intensiver reinzuschauen :( Andere Mods und Request nehmen mich schon voll in Anspruch. Wenn ich zwischendurch mal Luft habe, helfe ich sofort. Versprochen!

Eine Idee: Warum die $board_config['unread_time'] nicht vorher abfragen, in eine beliebige Variable packen und dann an der besagten Stelle einstellen, damit auch dieser Part per ACP verwaltbar bleibt?
Also in der index.php vielleicht direkt nach dem User-Management in eine Variable, z.b. $unread_time, stecken und diese hier einfügen:

Code: Alles auswählen

$jetzt_vor_einem_monat = time() - $unread_time;
Vielleicht klappt das...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ich verstehs nich warum es bei dir läuft und ich es in ein saubers 2.06 nicht so zum laufen kriege - vielleicht ist dein eh ja schon gemodetes Forum vielleicht an irgeiner Stelle durch irgendetwas schon so, das man nichts weiter ändern musste.

Ich versuchs vielleicht nachher noch ein letztes mal - ich ziehe mir erneut genau die Version die online sind von phpBB, dem UPItoDB und deinem UPItoDB Fix und Dr. Loves anweisungen.

Obwohl ich das Gefühl habe das schon mindestens 3 mal getan zu haben, aber ich weis es nicht mehr sicher - ich dreh durch ^1 :D
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ganz ruhig ^e
Wenn Du das alles in aller Ruhe eingebaut hast, dann schick mir mal die Dateien. Ich vergleiche dann diese mit meinen, es kann ja auch sein, daß ich etwas vergessen habe zu beschreiben ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ich glaube ich habe es, scheint jetzt sauber zu laufen. Habe mir das phpBB 2.06 Revision D gezogen und damit geht es anstandslos.

1x phpBB 2.06D
1x UPItoDB 1.06 (an zwei Stellen für 2.06 angepasst in viewtopic_body.tpl und functions_post.php)
1x deine Zeitvariable via CP Fix
1x dein Fix (nur der Teil der index.php, modcp.php und in der functions_post.php nur die letzte suche / finde Anweisung für das korrekte Löschen von Posts, da die Anweisungen davor alles put machen)
1x Dr. Love Mod (bis auf den index.php Teil)
1x PostEdit 2.06 (der neuste von Shannando)


In 2.06C hatte ich den Fehler das editierte Beiträge entweder unter "Ungelesen Beiträge" nicht erschien oder die Anzahl der Beiträge nicht mit auf der Indexseite aufgelistet wurden. Will nicht sagen das 2.06c daran schuld ist, allerdings so oft wie ich jetzt schon ein 2.06c gemodet habe und immer wieder Fehler aufgetreten sind, kommt es mir schon sehr eigenartig vor, entweder bin ich da wirklich überarbeitet oder da stimmt was nicht mit.

Was ich übrigens noch festgestellt habe ist, das man die Unreadzeitvariable nicht zu niederig einstellen sollte (habs mit 120 Sekunden probiert), sonst spinnt die Anzeige bei editierten Beiträgen an einigen Stellen im Forum - ich werde daher empfehlen mindestens einen Wert von 86400 entspricht 1 Tag zu setzen, da läuft auf jeden Fall alles anständig.

Was mir noch auffiel war das man umbedingt beim ändern des festen Wertes auf die Zeitvariable in der index.php darauf achten muss das man an der einen Stelle auch die Anführungsstriche ersetzt (so wie es in deiner Anleitung auch steht)...

Code: Alles auswählen

#
#-----[ FIND ]------------------------------------------
#
  $zeit_vor_monat = $zeit_jetzt - "2592000";

#
#-----[ REPLACE WITH ]------------------------------------------
#
  $zeit_vor_monat = $zeit_jetzt - $board_config['unread_time'];
...macht man das nämlich nicht und belässt die Anführungsstriche, führt das mit jedem Post zu einem Forum voller ungelesener Beiträge :D
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Danke Simpson. Das sind ja mal gute Nachrichten.
Wobei: Die phpbb 2.0.6d wird nur an einer Stelle geändert, die mit diesen Mods eigentlich nichts zu tun hat. Aber egal. Hauptsache es funktioniert.
Und wenn doch mindestens ein Tag eingestellt werden sollten, wäre es das beste, dieses gleich im ACP abzufangen und bei einer geringeren Zeitangabe mindestens 86400 Sekunden einzutragen.
Und naja, die Anführungszeichen sollten nach Änderung gemäß meiner Beschreibungen auch ersetzt werden ;)
Okay. Ich werde dazu aber meine beiden Add-Ons ausdrücklich für die Version 1.0.6 des UPItoDB deklarieren, nicht daß dann noch jemand auf die Idee kommt, diese bei der neuen Version zu installieren ^1

Frage noch zum Schluss: Machst Du eine Updateanleitung von 1.0.6 auf 1.0.7? Das würde auch mir helfen, da die 1.0.6 bereits schwer genug war zu installieren :(
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ja ich wollt auch noch ne Updateanleitung von 1.0.6 auf 1.0.7 machen, jetzt werde ich allerdings erst noch ein letztes mal meine Anleitungen von der Vollversion kontrollieren, sprich nochmal durchgehen für 2.06, ich will ganz sicher sein das alles so korrekt ist und dann teste ich den Spass noch mit 2.01 / 2.02 / 2.03 / 2.04 / 2.05 um dabei auch gleich die fertigen Dateien für den Mod fertig zu haben.

Das ist diesmal irgendwie ein ganz schöner Akt, ich weis nicht warum, aber mir ist es bisher noch nie so schwer gefallen eine neue Version rauszugeben, irgendwie mag ich phpBB nicht mehr, wahrscheinlich weil ich so lange nichts mehr daran gemacht habe :D
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Oder weil der Mod zu schwer ist :p

Hier noch ein kleines Schmanckerl für Dich
Nachdem ich festgestellt hatte, das meine zahlreich installierten Mods in der Topic-Ansicht über 220 Queries gegen die Datenbank fahren und ich mich nach einigen Tagen wieder gefangen hatte (kein Scherz!), begann ich man zu analysieren, wodurch das kommt.

Ergebnis:
In der Schleife der einzelnen Posts waren eine Menge wiederkehrende Abfragen pro User/Post enthalten!

Also was tun? Ganz einfach:
Die Abfragen ausserhalb der Post-Schleife, beginnend mit dem Folgenden, gelegt und die Werte per Schleife/Array abgefragt

Code: Alles auswählen

for($i = 0; $i < $total_posts; $i++)
{
und siehe da, es waren nun insgesamt anstelle über 220 Queries nur noch ca. 100 übrig!

Ein Wahnsinnserfolg, muss die Datenbank doch nun weniger leiden.

Dabei habe ich auch gleich die Abfrage des Mini-Post-Images (gelb = ungelesen, weiß = gelesen) mit umgesetzt und hierzu das folgende dazu gemacht:

Code: Alles auswählen

#
#-----[ OPEN ]-----
#
viewtopic.php

#
#-----[ FIND ]-----
#
for($i = 0; $i < $total_posts; $i++)
{

#
#-----[ BEFORE, ADD ]-----
#
if ( $user_id != ANONYMOUS )
{
	$mini_img = array();

	// Get mini icon data for viewed/new posts
	$sql = "SELECT max(visit_time) as vtime, topic_id FROM " . TOPIC_READ_TABLE . "
		WHERE user_id = ".$userdata['user_id']."
		AND topic_id = $topic_id
		GROUP BY topic_id
		ORDER BY topic_id";
	if( $result = $db->sql_query($sql) )
	{
		while ( $row = $db->sql_fetchrow($result) )
		{
			$mini_img[$row['topic_id']] = $row['vtime'];
		}
	}
}

#
#-----[ FIND ]-----
#
	$poster_id = $postrow[$i]['user_id'];

#
#-----[ AFTER, ADD ]-----
#
	// Define the mini-image for each post
	if ( ($mini_img[$postrow[$i]['topic_id']] < $postrow[$i]['post_time']) && $poster_id != $userdata['user_id'] )
	{
		$mini_post_img = $images['icon_minipost_new'];
		$mini_post_alt = $lang['New_post'];
	}
	else
	{
		$mini_post_img = $images['icon_minipost'];
		$mini_post_alt = $lang['Post'];
	}

#
#-----[ FIND ]-----
#
	//
	// Define the little post icon
	//
	if ( $userdata['session_logged_in'] )
	{
		$sql = "SELECT visit_time FROM " . TOPIC_READ_TABLE . "
			WHERE post_id = $post_id
			AND user_id = $userdata[user_id]";
		if( !$result = $db->sql_query($sql) )
		{
				$mini_post_img = $images['icon_minipost_new'];
				$mini_post_alt = $lang['New_post'];
		}
		else
		{
				$mini_post_img = $images['icon_minipost'];
				$mini_post_alt = $lang['Post'];
		}
	}

#
#-----[REPLACE WITH ]-----
#
	//
	// Define the little post icon
	//
//	if ( $userdata['session_logged_in'] )
//	{
//		$sql = "SELECT visit_time FROM " . TOPIC_READ_TABLE . "
//			WHERE post_id = $post_id
//			AND user_id = $userdata[user_id]";
//		if( !$result = $db->sql_query($sql) )
//		{
//				$mini_post_img = $images['icon_minipost_new'];
//				$mini_post_alt = $lang['New_post'];
//		}
//		else
//		{
//				$mini_post_img = $images['icon_minipost'];
//				$mini_post_alt = $lang['Post'];
//		}
//	}

#
#-----[ SAVE/CLOSE ALL FILES ]-----
#
# EoM
Na, was sagst Du nun? Da ich nicht mehr weiß, wieviele Queries der UNItoDB-Mod auf einem nicht weiter gemoddetes frisches Board an Queries verursacht, dürfte es zumindest Posts x User je Topic weniger Queries sein (Okay + 1 Query, da ja einmal abgefragt wird ;) ).
Doch mal eine echte Optimierung, auch der Performance wegen...
Im schlimmsten Fall muss man ja Topics/Seite * Posts=verschiedene User, also im Standard 25, Querys rechnen. Das habe ich halt auf nur 1 Query reduziert. Denmach ein Gewinn von 24 Querys weniger :cool:

Teste das mal mit Deiner neuen Version durch, ggf. musst Du da noch das ein oder andere etwas anpassen, aber im Grunde sollte hiermit ein deutlicher Gewinn erzielt werden.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Das kann auch sein, obwohl inzwischen weis ich es besser :D es kommt daher weil ich jetzt das erstemal kleinere Fehler mit dem Last Edited by Mod feststelle die mir vorher nie aufgefallen sind, aber auch in älteren Versionen schon vorkamen und zwar habe ich eben auch schon wieder gedacht
Shit jetzt will das "Ungelesene Beiträge anzeigen" und die Anzeige auf der Indexseite wieviele Beiträge editiert/neu sind nicht mehr richtig anzeigen
Doch denkste, ich habe jetzt rausgefunden warum es passieret das Beiträge nicht gezählt werden und das sie nicht auftauschen wenn man "Ungelesene Beiträge anzeigen" anklickt und zwar passiert das dann, wenn man einen Beitrag editiert der nicht der letzte im Thread ist, solche Beiträge erscheinen nur im Forum als neu und natürlich in der Forenübersicht, jedoch nicht in der Suche und sie werden auch nicht mitgezählt in der Anzahl wieviele Beiträge neu sind auf der Indexsseite.

Naja und wenn der letzte Beitrag in einem Thread editert wird erscheint dieser zar auch unter "Ungelesene Beiträge anzeigen" und auch bei der Anzahl ungelesener neuer/editerter Beiträge, jedoch wird in der Suche Beitrag nicht mit einem Neusymbol erkannt und das JumpToNewestPostIcon fehlt, aber das habe ich schon mal berichtet.

Kurzum der Mod funktioniert irgendwie nur so halbherzig mit dem ShowEditedBy, eigentlich müsste was umprogrammiert werden - ich habe inzwischen noch mal ne Mail an die zweite Emailadresse des Authors geschrieben, ich hoffe mal der antwortet noch (habe allerdings wenig Hoffunung), sonst müssen diese Fehler leider in der 1.07 drin bleiben.
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ach jetzt hab ich dein vorheriges Post überlesen - ich checks glatt mal ;)
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Das funktioniert auch mit den von dir oben angebenen Änderungen in meiner neuen Version :) nur den folgenden Teil von dir...

Code: Alles auswählen

# 
#-----[ FIND ]----- 
# 
   // 
   // Define the little post icon 
   // 
   if ( $userdata['session_logged_in'] ) 
   { 
      $sql = "SELECT visit_time FROM " . TOPIC_READ_TABLE . " 
         WHERE post_id = $post_id 
         AND user_id = $userdata[user_id]"; 
      if( !$result = $db->sql_query($sql) ) 
      { 
            $mini_post_img = $images['icon_minipost_new']; 
            $mini_post_alt = $lang['New_post']; 
      } 
      else 
      { 
            $mini_post_img = $images['icon_minipost']; 
            $mini_post_alt = $lang['Post']; 
      } 
   } 
...den habe ich so abgeändert das am Ende nur eine Klammer statt 2 Klammern gesucht werden, sprich so...

Code: Alles auswählen

# 
#-----[ FIND ]----- 
# 
   // 
   // Define the little post icon 
   // 
   if ( $userdata['session_logged_in'] ) 
   { 
      $sql = "SELECT visit_time FROM " . TOPIC_READ_TABLE . " 
         WHERE post_id = $post_id 
         AND user_id = $userdata[user_id]"; 
      if( !$result = $db->sql_query($sql) ) 
      { 
            $mini_post_img = $images['icon_minipost_new']; 
            $mini_post_alt = $lang['New_post']; 
      } 
      else 
      { 
            $mini_post_img = $images['icon_minipost']; 
            $mini_post_alt = $lang['Post']; 
      } 
...weil der Bereich sieht bei mir in der viewtopic vor der Veränderung so aus:

Code: Alles auswählen

	//
	// Define the little post icon
	//
	if ( $userdata['session_logged_in'] && $postrow[$i]['post_time'] > $userdata['user_lastvisit'] && $postrow[$i]['post_time'] > $topic_last_read )
	{
		$mini_post_img = $images['icon_minipost_new'];
		$mini_post_alt = $lang['New_post'];
	}
	else
	{
		$mini_post_img = $images['icon_minipost'];
		$mini_post_alt = $lang['Post'];
	}

	$mini_post_url = append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $postrow[$i]['post_id']) . '#' . $postrow[$i]['post_id'];

	//
	// Generate ranks, set them to empty string initially.
	//

Danke dir auch dafür, ist ne gute Sache das :)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Kein Problem. Und Hauptsache es funktioniert.
Alles andere werden die User schon danken, wenn eben nur wenige anstatt viele Querys dazukommen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Ich hab doch noch nen Fehler in deiner Viewtopic Optimierung gefunden, kannst du auch in deinem Forum sehen. Wenn man als Gast das Forum anschaut sind überall die kleinen newposticons in den Beiträgen gelb statt weiss.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ah ja. Na dann werde ich ANONYMOUS mal mit gelesenen Beiträgen konfrontieren. THX für den Hinweis.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

So, hier die Lösung für die Gäste:

In viewtopic.php finde

Code: Alles auswählen

   if ( ($mini_img[$postrow[$i]['topic_id']] < $postrow[$i]['post_time']) && $poster_id != $userdata['user_id'] )
und ersetze diese Zeile mit

Code: Alles auswählen

   if ( ($mini_img[$postrow[$i]['topic_id']] < $postrow[$i]['post_time']) && $poster_id != $userdata['user_id'] && $userdata['user_id'] != ANONYMOUS )
Danach ist das Mini-Image für Gäste immer weiß!

Und zur Anzeige der Suchergebnisse:
Ich habe das schon auf dem Testforum geschrieben (danke für den Link und das Paket) und vermute, daß die Suche auf "post_time", die Anzeige der neuen Beiträge aber auf "post_edit_time" (oder so ähnlich) abfragt. Ich werde da mal in die search.php schauen und das Ganze syncronisieren, Code folgt dann in Kürze nach.
Dazu werde ich die "Ungelesenen Beiträge seit dem letzten Besuch" als solche stehen lassen und nur den Link für "x ungelesene Beiträge" in "x ungelesene und y geänderte Beiträge" ändern. Das sollte dann etwas eindeutiger sein.
Bei geänderten Beiträgen auch das gelbe Mini-Icon, ist dann nur noch ein kleinerer Bugfehler, den bügele ich dann schon aus.

Nur etwas Geduld, in den nächsten Tagen habe ich die Lösung! Wenn es glatt läuft, vielleicht heute schon die erste Version "aus dem Kopf raus".
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

So, was ich bisher geändert habe. Ist nicht getestet, da ich aktuell das Testforum nicht installieren kann. Ich werde das aber auf meinem Board wiederholen, denn die Funktion macht schon Sinn.

Code: Alles auswählen

#
#-----[ OPEN ]-----
#
index.php

#
#-----[ FIND ]-----
#
   $jetzt_vor_einem_monat = time() - $board_config['unread_time'];
   $sql = "SELECT count(p.post_id)
   	  FROM " . POSTS_TABLE . " AS p LEFT OUTER JOIN " . TOPIC_READ_TABLE . " AS r
      ON ( p.topic_id = r.topic_id AND r.user_id = " . $userdata['user_id'] . ")
      WHERE ( (r.user_id = " . $userdata['user_id'] . " OR r.user_id IS NULL)
         AND p.post_time > " . $jetzt_vor_einem_monat . "
         AND (p.post_time > r.visit_time OR r.topic_id IS NULL) )
         AND p.forum_id IN (" . $auth_forum_id . ")
      ORDER BY p.topic_id DESC, p.post_id DESC";
   if ( $result = $db->sql_query($sql) )
   {
		$p = $db->sql_fetchrow($result);
   }

#
#-----[ AFTER, ADD ]-----
#
   $jetzt_vor_einem_monat = time() - $board_config['unread_time'];
   $sql = "SELECT count(p.post_id)
   	  FROM " . POSTS_TABLE . " AS p LEFT OUTER JOIN " . TOPIC_READ_TABLE . " AS r
      ON ( p.topic_id = r.topic_id AND r.user_id = " . $userdata['user_id'] . ")
      WHERE ( (r.user_id = " . $userdata['user_id'] . " OR r.user_id IS NULL)
         AND p.post_edit_time > " . $jetzt_vor_einem_monat . "
         AND (p.post_edit_time > r.visit_time OR r.topic_id IS NULL) )
         AND p.forum_id IN (" . $auth_forum_id . ")
      ORDER BY p.topic_id DESC, p.post_id DESC";
   if ( $result = $db->sql_query($sql) )
   {
		$p2 = $db->sql_fetchrow($result);
   }

#
#-----[ FIND ]-----
#
   $countposts = ( $p[0] == 1 ) ? $lang['Unreaded_post'] : $lang['Unreaded_posts'];
   $lang['Search_unread'] = ( $p[0] == 0 ) ? $lang['Search_unread'] : $lang['New_for_user'] . " " . $p[0] . " " . $countposts;

#
#-----[ REPLACE WITH ]-----
#
   $countposts = ( $p[0] == 1 ) ? $lang['Unreaded_post'] : $lang['Unreaded_posts'];
   $countposts2 = ( $p2[0] == 1 ) ? $lang['New_edited_post'] : $lang['New_edited_posts'];
   $lang['Search_unread'] = ( $p[0] == 0 ) ? $lang['Search_unread'] : $lang['New_for_user'] . " " . $p[0] . " " . $countposts;
   $lang['Search_unread'] = ( $p2[0] == 0 ) ? $lang['Search_unread'] : $lang['Search_unread'] . " " . $p2[0] . " " . $countposts2;

#
#-----[ OPEN ]-----
#
search.php

#
#-----[ FIND ]-----
#
               $jetzt_vor_einem_monat = time() - $board_config['unread_time']; 
               $sql = "SELECT p.post_id
                  FROM " . POSTS_TABLE . " AS p LEFT OUTER JOIN " . TOPIC_READ_TABLE . " AS r 
                  ON ( p.topic_id = r.topic_id AND r.user_id = " . $userdata['user_id'] . ") 
                  WHERE (( r.user_id = " . $userdata['user_id'] . " OR r.user_id IS NULL) 
                     AND p.post_time > " . $jetzt_vor_einem_monat . " 
                     AND (p.post_time > r.visit_time OR p.post_edit_time > r.visit_time OR r.topic_id IS NULL) )"; 

#
#-----[ REPLACE WITH ]-----
#
               $jetzt_vor_einem_monat = time() - $board_config['unread_time']; 
               $sql = "SELECT p.post_id, p.topic_id, r.visit_time  
                  FROM " . POSTS_TABLE . " AS p LEFT OUTER JOIN " . TOPIC_READ_TABLE . " AS r 
                  ON ( p.topic_id = r.topic_id AND r.user_id = " . $userdata['user_id'] . ") 
                  WHERE ( (r.user_id = " . $userdata['user_id'] . " OR r.user_id IS NULL) 
                     AND (p.post_time > " . $jetzt_vor_einem_monat . " OR p.post_edit_time > " . $jetzt_vor_einem_monat . ")
                     AND (p.post_time > r.visit_time OR p.post_edit_time > r.visit_time OR r.topic_id IS NULL) )"; 

#
#-----[ FIND ]-----
#
				$search_ids[] = $row['post_id'];

#
#-----[ AFTER, ADD ]-----
#
				$search_ids_visit[$row['topic_id']] = $row['visit_time'];

#
#-----[ FIND ]-----
#
				if ( $userdata['session_logged_in'] && $searchset[$i]['post_time'] > $userdata['user_lastvisit'] )

#
#-----[ REPLACE WITH ]-----
#
				if ( $userdata['session_logged_in'] )

#
#-----[ FIND ]-----
#
					if ( $searchset[$i]['post_time'] > $topic_last_read )

#
#-----[ REPLACE WITH ]-----
#
					$topic_last_read = ( !empty($search_ids_visit[$topic_id]) ) ? max($search_ids_visit[$topic_id]) : $topic_last_read;

					if ( $searchset[$i]['post_time'] > $topic_last_read || $searchset[$i]['post_edit_time'] > $topic_last_read )

#
#-----[ FIND ]-----
#
								if ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all']) )
								{
									if ( $HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all'] > $searchset[$i]['post_time'] )
									{
										$unread_topics = false;
									}
								}

#
#-----[ AFTER, ADD ]-----
#
								if ( $post_time > $visit_time_forum || $post_edit_time > $visit_time_forum )
								{
									$unread_topics = true;
								}

#
#-----[ FIND ]-----
#
							else if ( $searchset[$i]['post_time'] > $visit_time_forum )

#
#-----[ REPLACE WITH ]-----
#
							else if ( $searchset[$i]['post_time'] > $visit_time_forum || $searchset[$i]['post_edit_time'] > $visit_time_forum )

#
#-----[ OPEN ]-----
#
language/lang_english/lang_main.php

#
#-----[ FIND ]-----
#
$lang['Unreaded_post'] = "unreaded post";
$lang['Unreaded_posts'] = "unreaded posts";

#
#-----[ AFTER, ADD ]-----
#
$lang['New_edited_post'] = 'edited post';
$lang['New_edited_posts'] = 'edited posts';

#
#-----[ OPEN ]-----
#
language/lang_german/lang_main.php

#
#-----[ FIND ]-----
#
$lang['Unreaded_post'] = 'ungelesener Beitrag';
$lang['Unreaded_posts'] = 'ungelesene Beiträge';

#
#-----[ AFTER, ADD ]-----
#
$lang['New_edited_post'] = 'geänderter Beitrag';
$lang['New_edited_posts'] = 'geänderte Beiträge';


#
#-----[ SAVE/CLOSE ALL FILES ]-----
#
# EoM
Soweit funktioniert es. Was nicht geht (da habe ich keine Idee bisher) ist das Forum-Icon bei Anzeige der Suchergebnisse als Beiträge. Das bleibt nach wie vor auf "gelesen", das beim Post stehende Icon ist aber schon einmal gelb. Vielleicht kann man ja mit diesem kleinen Schönheitsfehler leben ;)
Und wie schon mal gesagt: GGf. noch etwa anpassen. Dieser Code funktioniert in bei mir, im Standard-phpBB ist da das ein oder andere wieder anzupassen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Also das mit den weissen Icons für Anonymes funktioniert jetzt :)

Die Änderungen der search.php habe ich auch schon mal ausprobiert (habe alle entsprechenden Stellen finden und ersetzen können), jedoch bringen sie keinen ersichtlichen Unterschied, was bewirken diese Änderungen?
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

Achso und du kannst das Testforum nicht installieren - wieso das nicht?

Ich hab die Installrutine nicht ausprobiert, aber eigentlich sollte sie gehen. Ich probiers glaub ich auch gleich mal aus...
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Es sollten die weissen Icons durch gelbe ersetzt werden, wenn ein neuer Beitrag erstellt, bzw. ein bestehender editiert wurde. Das klappt allerdings nicht mit eigenen Beiträgen, die hatte ich gleich immer auf gelesen gesetzt (Siehe Add-On "Fix") ;)
Und installieren kann ich das Testforum schon, nur vorhin nicht, da ich an der Arbeit weder Datenbank noch Webserver hatte...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Simpson
Beiträge: 57
Registriert: So 29.Feb, 2004 14:16

Beitrag von Simpson »

[quote="oxpus";p="3744"]Es sollten die weissen Icons durch gelbe ersetzt werden, wenn ein neuer Beitrag erstellt, bzw. ein bestehender editiert wurde. [/quote]
Äm ja und nein, ich bin mir nicht mehr sicher ob wir nicht vielleicht aneinander vorbei geredet haben, kann sein das ich mich falsch ausgedrückt habe.

Ich meinte das so: Klickt man auf "Ungelesene Beiträge" werden einem ja Threads (ich habe immer Beiträge gesagt), in denen mindestens ein neuer Beitrag dazugekommen ist oder in denen mindestens ein Beitrag editiert wurde, als neu aufgelistet.

Das heisst einen Thread den ich schon mal gelesen habe und wo jetzt ein Beitrag editiert wurde, der erscheint mit in der Auflistung der "ungelesenen Beiträge/Threads". Vor einem solchen Thread wo nur drin editiert wurde gibt es aber kein gelbes sondern ein weisses Icon und es fehlt das Icon womit man zum neuesten Beitrag im Thread springen kann (das ist nur in der Suche so, im Index und in den einezenen Foren existiert das Problem nicht).


Wenn ich es jetzt richtig verstehe hast du durch die oberen Anweisungen gefixt das wenn man die Suche normal benutzt, sprich Suche auflisten nach Beiträgen (nicht nach Threads) das dann einzelne Beiträge richtig als neu angezeigt werden (wobei ich das noch nicht mal weis ob das bisher funktioniert hat oder nicht / noch nie ausprobiert :D ich könnte das ja eigentlich mal tun) - ist das richtig?
Das klappt allerdings nicht mit eigenen Beiträgen, die hatte ich gleich immer auf gelesen gesetzt (Siehe Add-On "Fix") ;)
Äm das bezieht sich auf den einen Teil in der functions_post.php den ich nicht verbaut habe. Dieser Teil ist nur sichtbar wenn man direkt in einem Beitrag drin ist, es handelt sich um die gelben Icon innerhalb eines Beitrages soweit ich mich erinnere und wenn meine vorherige Frage mit ja beantwortbar wird, gibt auch diese Aussage jetzt für mich auch einen Sinn :D
Gesperrt