ai.. 'Spameru izcelšana :)' 

sestdien, 30.10.2004 @7:03 pm | wasted

bez steigas un prātīgi. [info]x_f Saitefunkcija par vislielākā ierakstu skaita īpašniekiem draugu lapā, pabeigta un pārredzamāka par tiem manis publicētajiem variantiem iepriekš.



##########
#wizard'ā maināmie uzstādījumi
##########

property int top {
	des = "Rakstītāju tops";
	note = "Draugu lapā tiek izvadīts (ja tas ir norādīts) saraksts ar vislielākā ierakstu skaita īpašniekiem dilstošā secībā, šeit nosaki šī saraksta limitu - top 3, top 5 utml. Negatīvi skaitļi nav iespējami, minimālais ir 1";
	min = 1;
}

property bool printeet_topu {
	des = "Rakstītāju topa rādīšana";
	note = "Vai vēlies savā draugu lapā vispār ieraudzīt iepriekšminēto sarakstu?";
	values = "true|Protams!|false|Priekš kam?";
}
set top = 3;
set printeet_topu = true;

#########
#pati funkcija
#########

function tops(Entry[] entries) "Spamertopiņš" {

#galvenais masīvs, kurā glabāsies visi draugu lapā redzamo ierakstu autori

	var string{} rakstnieki;

#pirms jebkā veikšanas masīvs tiek aizpildīts ar autoriem no katra ieraksta.
#šī te lietiņa aizstāj to, kas nedarbojās (es gan nesapratu, kāpēc) x-f iepostotajā funkcijā,
#tajā masīvs praktiski netika aizpildīts ar neko. autora vārds kalpo kā atslēgvārds
#ierakstu skaitam, šeit visiem norādīts ierakstu skaits 0.

	foreach var Entry ieraksts ($entries) {
		var string autors = $ieraksts.poster.username;
		$rakstnieki{$autors} = "0";
	}

#katrs ieraksts tiek pārbaudīts. ja autors sakrīt ar kādu autoru no masīva,
#attiecīgais masīva elements tiek palielināts par vienu vienību.

	foreach var Entry ieraksts($entries) {
		var string autors = $ieraksts.poster.username;
		var int raksti;

		foreach var string parbaude ($rakstnieki) {
			if ($parbaude == $autors){
				$raksti = int($rakstnieki{$parbaude});
				$raksti++;
				$rakstnieki{$parbaude} = string($raksti);
			}
		}
	}

#sakārtošana dilstošā secībā. vispirms tiek atrasts vislielāka ierakstu skaita
#īpašnieks, respektīvi, no masīva atlasīts atslēgvārds ar vislielāko elementa vērtību.

	var int max = 0;
	var string lideris;

	foreach var string rakstija ($rakstnieki) {
		if (int($rakstnieki{$rakstija}) > $max) {
			$lideris = $rakstija;
			$max = int($rakstnieki{$rakstija});
		}
	}

	"<ul id='top_list'>";
	print "<li>$lideris (" + $rakstnieki{$lideris} + ")</li>";

#atrasts 'uzvarētājs'. $*top pats par sevi man bija vajadzīgs, lai radītu
#parastu (laikam regulārs saucas) masīvu $cycle ar elementu skaitu, kas vienāds ar $*top.
#masīva elementi nav svarīgi, svarīgs ir skaits. ja $*top ir lielāks par autoru skaitu
#$rakstnieki masīvā, regulārā masīva elementu skaits tiek samazināts līdz $rakstnieki
#elementu skaitam.

	var int count = 1;
	var int[] cycle = 1 .. $*top;
	if (size $rakstnieki < size $cycle) {
		$cycle = 1 .. size $rakstnieki;
	}

	foreach var int top ($cycle) {
		if ($count == size $cycle) {
		}
		else {

			foreach var Entry ieraksts ($entries) {
				var string autors = $ieraksts.poster.username;

#visi ieraksti tiek pārbaudīti. ja ieraksta autors jau ir 'uzvarētājs',
#attiecīgais $rakstnieki elements tiek padarīts par 'neko', tam nav vērtības,
#un to vairs neiekļauj nākamā uzvarētāja meklēšanā.

				if ($lideris == $autors) {
					$rakstnieki{$autors} = "";
				}
			}

			$max = 0;

			foreach var string rakstija ($rakstnieki) {
				if (int($rakstnieki{$rakstija}) > $max) {
					$lideris = $rakstija;
					$max = int($rakstnieki{$rakstija});
				}
			}

			print "<li>$lideris (" + $rakstnieki{$lideris} + ")</li>";
			$count++;
		}
	}
	"</ul>";

}

function FriendsPage::print_body {
	if ($*printeet_topu == true) {
		tops($.entries);
	}

# tālāk visa pārējā "FriendsPage::print_body" funkcija..

	foreach var Entry e ($.entries) {

# ..
		$this->print_entry($e);
# ..
	}
}

(Ņem vērā, ka parasti neviens neizvēlas atbildēt uz pilnīgi anonīmiem komentāriem!)

No:
Lietotājvārds:
Parole:
Ievadi te 'qws' (liidzeklis pret spambotiem):
Temats:
Tematā HTML ir aizliegts
  
Ziņa:

Gandrīz jau aizmirsu pateikt – šis lietotājs ir ieslēdzis IP adrešu noglabāšanu. Operatore Nr. 65.