Seite 5 von 5

Re: [3.3] Eigenen Counter erstellen und einbinden.

Verfasst: 28.11.2021 14:50
von IMC
Probiere mal diese Änderung. So würde ich es machen wenn ich einen Zähler haben wollte. Man könnte noch über get_browser() weitere Crawler filtern. Das würde aber jetzt zu weit führen.
Diese Änderung in der common.php ist auch erforderlich. viewtopic.php?p=1414816#p1414816

Code: Alles auswählen

	public function add_page_header_links($event)
	{
		if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) || !isset($_SERVER['HTTP_USER_AGENT']))
			return(false);
		
		if (!empty($this->config['allow_visits_counter']))
		{
			$this->user->add_lang_ext('dmzx/counter', 'common');

			$sql = 'SELECT COUNT(uvc_ip) AS visits_counter
				FROM ' . $this->visits_counter_table . '
				WHERE ' . $this->db->sql_in_set('uvc_ip', $this->user->ip);
			$result = $this->db->sql_query($sql);
			$visits_counter = (int) $this->db->sql_fetchfield('visits_counter');
			$this->db->sql_freeresult($result);

			if ($visits_counter == 0)
			{
				$sql_ary = [
					'uvc_ip'		=> $this->user->ip,
					'uvc_timestamp'	=> time()
				];
				$sql = 'INSERT INTO ' . $this->visits_counter_table . ' ' . $this->db->sql_build_array('INSERT', $sql_ary);
				$this->db->sql_query($sql);

				$this->config->increment('visits_counter', 1, true);
			}
			else
			{
				$timestamp = time() - $this->config['visits_counter_gc'];
				$sql_ary = [$timestamp];
				$sql = 'DELETE FROM ' . $this->visits_counter_table . '
					WHERE uvc_timestamp < ' . (int) $timestamp;
				$this->db->sql_query($sql);
			}

			$sql = 'SELECT COUNT(uvc_ip) AS counter
				FROM ' . $this->visits_counter_table;
			$result = $this->db->sql_query($sql, 60);
			$counter = (int) $this->db->sql_fetchfield('counter');
			$this->db->sql_freeresult($result);

			$this->template->assign_vars([
				'UNIQUE_VISITS_COUNTER'			=> $this->user->lang('UNIQUE_VISITS_COUNTER', $counter, $this->config['visits_counter']),
				'UNIQUE_VISITS_COUNTER_HOUR'	=> $this->user->lang('UNIQUE_VISITS_COUNTER_HOUR', $this->config['visits_counter_gc'] / 3600, $this->config['visits_counter']),
			]);
		}
	}

Re: [3.3] Eigenen Counter erstellen und einbinden.

Verfasst: 28.11.2021 15:15
von MDuss
HI IMC.

Jetzt scheint es zu gehen, habe nochmals die od von Grund auf mit den Modifikationen hochgeladen. Scheinbar war das irgendwas in der common.php nicht mehr ganz korrekt.

Auf jeden Fall scheint es jetzt richtig angezeigt zu werden.

Ich werde jetzt noch deinen neuen Änderungsvorschlag auch mit einbauen und dann mal testen, wie sich das ganze nun verhält.

MfG
MDuss

Re: [3.3] Eigenen Counter erstellen und einbinden.

Verfasst: 28.11.2021 15:16
von MDuss
IMC hat geschrieben: 28.11.2021 14:50 Probiere mal diese Änderung. So würde ich es machen wenn ich einen Zähler haben wollte. Man könnte noch über get_browser() weitere Crawler filtern. Das würde aber jetzt zu weit führen.
Diese Änderung in der common.php ist auch erforderlich. viewtopic.php?p=1414816#p1414816

Code: Alles auswählen

	public function add_page_header_links($event)
	{
		if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) || !isset($_SERVER['HTTP_USER_AGENT']))
			return(false);
		
		if (!empty($this->config['allow_visits_counter']))
		{
			$this->user->add_lang_ext('dmzx/counter', 'common');

			$sql = 'SELECT COUNT(uvc_ip) AS visits_counter
				FROM ' . $this->visits_counter_table . '
				WHERE ' . $this->db->sql_in_set('uvc_ip', $this->user->ip);
			$result = $this->db->sql_query($sql);
			$visits_counter = (int) $this->db->sql_fetchfield('visits_counter');
			$this->db->sql_freeresult($result);

			if ($visits_counter == 0)
			{
				$sql_ary = [
					'uvc_ip'		=> $this->user->ip,
					'uvc_timestamp'	=> time()
				];
				$sql = 'INSERT INTO ' . $this->visits_counter_table . ' ' . $this->db->sql_build_array('INSERT', $sql_ary);
				$this->db->sql_query($sql);

				$this->config->increment('visits_counter', 1, true);
			}
			else
			{
				$timestamp = time() - $this->config['visits_counter_gc'];
				$sql_ary = [$timestamp];
				$sql = 'DELETE FROM ' . $this->visits_counter_table . '
					WHERE uvc_timestamp < ' . (int) $timestamp;
				$this->db->sql_query($sql);
			}

			$sql = 'SELECT COUNT(uvc_ip) AS counter
				FROM ' . $this->visits_counter_table;
			$result = $this->db->sql_query($sql, 60);
			$counter = (int) $this->db->sql_fetchfield('counter');
			$this->db->sql_freeresult($result);

			$this->template->assign_vars([
				'UNIQUE_VISITS_COUNTER'			=> $this->user->lang('UNIQUE_VISITS_COUNTER', $counter, $this->config['visits_counter']),
				'UNIQUE_VISITS_COUNTER_HOUR'	=> $this->user->lang('UNIQUE_VISITS_COUNTER_HOUR', $this->config['visits_counter_gc'] / 3600, $this->config['visits_counter']),
			]);
		}
	}
An welcher Stelle genau in der listener.php wird dieser Code eingefügt?

MfG
MDuss

Re: [3.3] Eigenen Counter erstellen und einbinden.

Verfasst: 28.11.2021 15:42
von IMC
Sorry, ich dachte dass wäre eindeutig.
Das ist die Funktion add_page_header_links. Einfach die originale Funktion durch meinen Vorschlag ersetzen.

Re: [3.3] Eigenen Counter erstellen und einbinden.

Verfasst: 28.11.2021 16:11
von MDuss
Danke.

Ich habe jetzt alle Änderungen gemacht, und es scheint jetzt zu funktionieren.
Werde das ganze mal im Testforum weiter testen und beobachten.

Wenn alles gut verläuft, übertrage ich die Extensions ins Hauptforum.

Endlich unabhängig von externen Webcounter Diensten, die dann einfach mal ne Woche außer Dienst sind, und der Counter somit nicht funktioniert.

MfG
MDuss

Re: [3.3] Eigenen Counter erstellen und einbinden.

Verfasst: 01.12.2021 19:13
von MDuss
Hi.

Wollte nur kurz Rückmeldung geben, wie es läuft.

Bisher läuft alles so wie erwartet. Der Counter läuft und zählt, wie er soll.
Ich werde den dann am Wochenende ins Hauptforum übernehmen.

Nochmals vielen Dank für eure Hilfe.

MfG
MDuss