Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  13 2067
God når det gjelder
Carmex's Avatar
Hei, jeg lurer på hva slags språk man bruker og hvordan man kan lage et script/kode som kan vise mest leste artikler på en nettside jeg driver.

Anyone?
(ノಠ益ಠ)ノ彡┻━┻
Alphanio's Avatar
Om siden din ligger på en Apache server kan du bruke mod_status.

Da går du inn på www.websidendin.sidendin/server-status

Da ser du hvor på siden du har hits.
Jeg ville brukt php og mysql og så logget dette. Da er det veldig enkelt å hente ut artikler basert på antall treff.
Sitat av Carmex Vis innlegg
Hei, jeg lurer på hva slags språk man bruker og hvordan man kan lage et script/kode som kan vise mest leste artikler på en nettside jeg driver.

Anyone?
Vis hele sitatet...
Tror det er lettere å hjelpe deg med å finne en løsning hvis du forklarer hvilket språk du bruker, eventuelt viser nettsiden det er snakk om.
▼ ... over en uke senere ... ▼
Hvis du bruker PHP, så lager du et felt i databasen som heter f.eks "visninger"
På hver load av artikler kan du øke tallet med en.

Så kjører du følgende SQL for å hente ut mest leste artikkel. LIMIT kan byttes ut med et høyere tall hvis du skal ha 5 mest leste f.eks.

Kode

SELECT * FROM artikler ORDER BY visninger DESC LIMIT 1
.

Denne koden tar ikke høyde for unike visninger, bare kjapt vist...
▼ ... over en måned senere ... ▼
for hver gang nyheten vises: update nyheter set visninger=visninger+1;
▼ ... noen uker senere ... ▼
Den delen av koden som viser frem den bestemte artikkel etter at du har klikken på Les Mer... ellns kan du legge inn den koden jeg har vist under.

Eksempel:

Kode

<?php
	$lest++;
	$query = "UPDATE Nyheter SET Lest='$lest' WHERE NyhetsID='$nyhetsID'";
	mysql_query($query) or die(mysql_error());
?>
Dette gjør så at et felt i SQL som heter i dette tilfellet lest øker med 1 hver gang hele artikkelen leses. For å finne ut hvem som er mest lest er det bare å legge inn et script som sier:

Kode

<?php
	$query = "SELECT * FROM Nyheter ORDER BY Lest DESC Limit 1"
	mysql_query($query) or die(mysql_error());
?>
Men dette kan gjøres på en bedre måte. Dette var en kjapp løsning!
Sist endret av OOPHP; 25. juli 2012 kl. 17:23.
Om du bruker Wordpress, så er dette ihvertfall svært enkelt å fikse.
Anbefaler PÅ DET STERKESTE at du unngår WordPress!!!

Om du er 100% nødt til å gå inn i koden tar det nok 3 uker før du finner koden du leter etter. WordPress er et rot! Ingen over, ingen ved siden av. Lag det selv eller bruk Objekt Orienterte systemer!
Sitat av OOPHP Vis innlegg

Kode

<?php
	$lest++;
	$query = "UPDATE Nyheter SET Lest='$lest' WHERE NyhetsID='$nyhetsID'";
	mysql_query($query) or die(mysql_error());
?>
Vis hele sitatet...
Jeg ville heller gjort hele opperasjonen i SQL, så du ikke får problemer hvis flere laster websiden samtidig.

Kode

if ($mysqli->query("UPDATE `nyheter` SET `lest` = `lest` +1 WHERE `id` = '$id' LIMIT 1") === false) {
	printf("Warning: %s\n", $mysqli->error)
}
edit: Men den aller beste måten å gjøre det på hadde vært ved å bare logge forskjellige PCer eller forskjellige IPer, slik at det er mindre sjanse for at samme person som leser artikkelen flere ganger, eller reloader siden el. påvirker.
Sist endret av khh; 26. juli 2012 kl. 00:21.
Sant det, men her har du jo en del av scriptet som registrerer alle besøk på artikkelen. Akuratt som populatiry funksjonen i Spotify, men du har jo også forsåvidt rett i det du skriver også.
Sitat av khh Vis innlegg
edit: Men den aller beste måten å gjøre det på hadde vært ved å bare logge forskjellige PCer eller forskjellige IPer, slik at det er mindre sjanse for at samme person som leser artikkelen flere ganger, eller reloader siden el. påvirker.
Vis hele sitatet...
Denne koden burde, gitt en id for artikkelen i $id og en database i $mysqli, sette en kode hos leseren som gjør at samme PC ikke vil oppdatere telleren før det er gått 30 dager siden han/hun leste en artikkel. P.g.a setcookie() må den settes inn før noe innhold er blitt sent til brukeren.

Kode

<?php
// Check if article has been read
if (isset($_COOKIE['tracking-articles-read')) {
	$ids = explode(',', $_COOKIE['tracking-articles-read']);
	$update_read_counter = !in_array("$id", $ids);
} else {
	$update_read_counter = true;
}

// Update read count of aricle
if ($update_read_counter) {
	$q = "UPDATE `nyheter` SET `lest` = `lest` +1 WHERE `id` = '$id' LIMIT 1";
	if ($mysqli->query($q)) {
		if (isset($ids)) {
			$ids[] = "$id";
			setcookie('tracking-articles-read', implode(',', $ids), time()+60*60*24*30)
		} else {
			setcookie('tracking-articles-read', "$ids", time()+60*60*24*30)
		}
	} else {
		printf("Warning: %s\n", $mysqli->error);
	}
}
?>
En cookie støtter bare 4 kb data, så med ID-er på 5 tegn kan den lagre ca. 680 forskjellige artikler. Hvis dette er for lite kan man bruke kompresjon (gzdeflate/gzinflate) og/eller kode for å fjerne gamle ID-er fra cookien.

Kode

<?php
// Check if article has been read
$update_read_counter = true;
if (isset($_COOKIE['tracking-articles-read')) {
	$ids = gzinflate($_COOKIE['tracking-articles-read']);
	if ($ids) {
		$tmp_ids = explode(',', $ids);
		$time = time();
		// Remove article reads that have expired
		$ids = array();
		foreach ($tmp_ids as $value) {
			$value = explode('=', $value);
			if (count($value > 1)) {
				$tmp_id = $value[0];
				$expire = intval($value[1]);
			} else {
				$expire = 0;
			}
			if ($expire < $time){
				$ids[$tmp_id] = $expire;
			}
		}
		unset($tmp_ids, $tmp_id, $value, $time, $expire);
		$update_read_counter = !isset($ids[strval($id)]);
	} else {
		unset($ids);
	}
}

// Update read count of aricle
if ($update_read_counter) {
	$q = "UPDATE `nyheter` SET `lest` = `lest` +1 WHERE `id` = '$id' LIMIT 1";
	if ($mysqli->query($q)) {
		$expire_time = time()+60*60*24*30;
		if (isset($ids)) {
			$value = "";
			foreach ($ids as $ids_id => $ids_expire) {
				$value .= sprintf("%s=%s,", $ids_id, $ids_expire);
			}
			$value .= sprintf("%s=%s", $id, $expire_time);
		} else {
			$value = sprintf("%s=%s", $id, $expire_time);
		}
		setcookie('tracking-articles-read', gzdeflate($value), $expire_time)
	} else {
		printf("Warning: %s\n", $mysqli->error);
	}
}
?>
Denne koden ville kunne tracke ca. 240 artikler individuelt om den ikke brukte kompresjon, siden den bruker kompresjon burde denne verdien mellom 2 og 5 ganger høyere. Jeg ville nok brukt dette siste eksempelet, men merk at jeg ikke har testen koden, så det kan være noen små bugs.

(beklager dobbeltpost, var for sent å redigere)
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av OOPHP Vis innlegg
Om du er 100% nødt til å gå inn i koden tar det nok 3 uker før du finner koden du leter etter. WordPress er et rot! Ingen over, ingen ved siden av. Lag det selv eller bruk Objekt Orienterte systemer!
Vis hele sitatet...
Tjeh, det er litt rotete, men ikkje umulig å finne ut av. Det er rimelig kjapt, for det er greit dokumentert sjølv om det er rotete.

Tok meg to timer å skrive wordpress om til http digest auth fra apache, og det funka gull.
Sitat av OOPHP Vis innlegg
Anbefaler PÅ DET STERKESTE at du unngår WordPress!!!

Om du er 100% nødt til å gå inn i koden tar det nok 3 uker før du finner koden du leter etter. WordPress er et rot! Ingen over, ingen ved siden av. Lag det selv eller bruk Objekt Orienterte systemer!
Vis hele sitatet...
Men hvis han bruker WordPress kan han bare installere et plug-in som "WordPress Popular Posts" som gjør dette helt uten å måtte styre med noe koding i det hele tatt.
Jeg har forøvrig aldri hatt noe problem med å finne frem i WordPress-kodene.