 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
17.03.2005, 09:23
|
#1
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
Fehler beim sortieren !!!
Hallo zusammen,
versuche es nochmal um Hilfe zu bekommen.
Es sortiert nicht nach "Klicks", wenn nur bis 10 Bilder in der Log Textdatei drinnen sind.
Über 10 Bilder in der Log Datei gehts.
Habe das Sortierscript von Dennis The Menace bekommen. Ich kenne mich mit PHP nicht so gut aus um den Fehler zu finden.
Vieleicht gibt es ja eine andere Möglichkeit die Sortierung durchzuführen...
Hier mal die php Datei top10.php
PHP-Code:
$galerie = $_GET['galerie']; // Galerienamen wird übergeben
$image_url = "./$galerie/"; // Bilderpfad wird übergeben
$fp= "./log/$galerie.txt"; // Log Dateipfad wird übergeben
if (!file_exists($fp)) die ("<td class='contenthead'><br>Noch keine TOP 10 Fotos online!</td>");
$i=0;
$platz=1;
foreach(top10($fp, 10) as $line) // es wird die Funktion top10 aufgerufen um zu sortieren
{
list($bild, $wert, $datum1, $datum2, $stamp1, $stamp2) = $line;
echo "<td width=\"150\" class=\"topfoto\" align=\"center\"><font color=\"#E60000\"><b>$platz. Platz</b></font><br><a href=\"#\" onClick=\"MM_openBrWindow('windowtop.php?pic=$bild&galerie=$galerie','fenstername', 'scrollbars=0,toolbar=0,location=0,directories=0,s tatus=1,resizable=0,width=640,height=450,top=0')\"><img src=\"$image_url/$bild\" style=\"border:1px solid #666666\";></a><br>Aufrufe: $wert</td>";
if ($i==9) {break;}
$i++;
$platz++;
if ($i%5 ==0) { //wenn $i durch 5 teilbar ist,
?>
</tr><tr>
<?
}
}
?>
Function zum sortieren:
PHP-Code:
function top10( $string, $integer )
{
//Sollte die Datei nicht existieren
if( !is_readable( $string ) )
return false;
//Lese die Datei als Array aus
$file = file( $string );
$array = array();
$return = array();
//Erstellt ein mehrdimensionales Array
foreach( $file as $line )
array_push( $array, explode( ' - ', $line ) );
//Multisort von mehrdimensionalen arrays
function order_by($ar1, $ar2)
{
if ($ar1[1]<$ar2[1])
return -1;
else if ($ar1[1]>$ar2[1])
return 1;
if ($ar1[5]<$ar2[5])
return -1;
else if ($ar1[5]>$ar2[5])
return 1;
return 0;
}
// To sort now, we use:
usort($array,'order_by');
//Sonderfall (falls integer größer ist als count
if( count( $array ) <= $integer ) return $array;
//Gir mir mal die letzten $integer x Werte zurück
for( $i = count( $array ); $i > count( $array )-$integer; $i--)
array_push( $return, $array[$i-1]);
return $return;
}
Log Datei zum Sortieren: (Sortierreihenfolge: Aufrufe-Wert=(Feld2) - Timestamp-Stamp2(Feld5)
PHP-Code:
Foto0003.jpg - 1 - 2005-03-07 (23:08) - 2005-03-07 (23:08) - 1110233311 - 1110233311
Foto0002.jpg - 1 - 2005-03-07 (23:08) - 2005-03-07 (23:08) - 1110233326 - 1110233326
Foto0001.jpg - 1 - 2005-03-07 (23:08) - 2005-03-07 (23:08) - 1110233334 - 1110233334
Foto0014.jpg - 2 - 2005-03-07 (23:08) - 2005-03-07 (23:09) - 1110233336 - 1110233360
Grüße und danke für eure Hilfe
Dieter
|
|
|
17.03.2005, 09:53
|
#2
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
hi dieter,
is aber auch logisch oder? es heisst "top10". da muessen es auch 10 sein 
hat der liebe dennis (wo steckt der kerl eigentlich??) schon recht.
versuch mal folgendes
PHP-Code:
foreach(top10($fp, 5) as $line) // es wird die Funktion top10 aufgerufen um zu sortieren
aber dann sind es nur noch die top5
hardy
|
|
|
17.03.2005, 10:10
|
#3
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
Hi theo
dann ist ja das gleiche Probblem. Wenn da unter 5 Fotos in der Log Datei drinnen sind gehts auch nicht.
Kann man das nicht anders lösen? Also es müsste auch richtig anzeigen wenn nur 2 oder 3 Fotos angeklickt wurden.
Grüße
Dieter
|
|
|
17.03.2005, 10:20
|
#4
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Du musst ermitteln, wieviele Bilder drin sind.
PHP-Code:
$anzahl=0;
$dh = opendir($path);
while (false !== ($filename = readdir($dh)))
{
if ($filename != "." && $filename != ".." && !is_dir($fpath.$filename)) {
if(substr(strtoupper($filename),-4)==".JPG") $anzahl++;
}
}
$anzahl=($anzahl<10) ? $anzahl : 10;
dann kannst Du es so machen:
foreach(top10($fp, $anzahl) as $line)
Geändert von steffenk (17.03.2005 um 10:24 Uhr).
|
|
|
17.03.2005, 10:31
|
#5
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
@ St@eff.en
Danke, danke.
Es ist aber eine Datei TXT was mit
$fp= "./log/$galerie.txt"; //Pfad der Log Datei und Name
ermittelt wird und kein Verzeichniss.
Grüße
Dieter
|
|
|
17.03.2005, 10:34
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
dann ist es noch einfacher. Da ja nur die Bilder drinstehen, musst Du nur die Anzahl der Textzeilen ermitteln:
PHP-Code:
$a=file($logdatei);
$anzahl=(count($a)<10) ? $anzahl : 10;

|
|
|
17.03.2005, 14:11
|
#7
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
@St@eff.en
Habe mir das mal angesehen und probiert.
Wenn ich weniger als 10 Zeilen in der Logdatei habe, zeigt es überhaubt nichts an, also die Top10 Seite bleibt leer.
Grüße
Dieter
|
|
|
17.03.2005, 14:14
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
sorry, Tippfehler:
$anzahl=(count($a)<10) ? count($a) : 10;
... im Eifer des Gefechts ... 
|
|
|
17.03.2005, 14:21
|
#9
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
Hm,
PHP-Code:
foreach(top10($fp, 5) as $line) // es wird die Funktion top10 aufgerufen um zu sortieren
Du wirst um eine kleine vorab Abfrage nicht umhinkommen, ob da jetzt 5 oder zehn steht, musst du zuvor überprüfen, ersetze also die 5 oder 10 durch eine Variable, z.B. $max oder einen Funktionsaufruf, wenn Bilderzahl < 10, $max= count(file($logdatei)) usw.,
dann musst du deine Max Top - Zahl immer nach unten korrigieren,
so long,
skipperjan
__________________
Chenaski - Klamotten designed by Pete
USE - nicht immer nur mit Stars and Stripes rumlaufen!
Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....
|
|
|
17.03.2005, 19:14
|
#10
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
@St@eff.en
danke danke es funkte zuerst nicht. Habe aber in der Function folgende Zeile entfernt dann geht es auch mit der Sortierung
PHP-Code:
//Sonderfall (falls integer größer ist als count
if( count( $array ) <= $integer ) return $array;
Kommisch, eigentlich müsste das ja das gleiche machen als deine Function oder??
Grüße und danke
Dieter
|
|
|
18.03.2005, 17:07
|
#11
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
Hallo
ich möchte gerne das verstehen, könnte mir das einer bestätigen?
PHP-Code:
$anzahl=(count($a)<10) ? count($a) : 10;
wenn count($a) kleiner ist als 10 führe count(a$) :10 aus.
z.b. count=7 dann müsste 7:10=0,7 als $anzahl gespeicher werden
Dann müsste das aber auch gehen. Ich habs jetzt weggelöscht weil bis 10 Zeilen in der Log Datei nichts angezeigt wurde.
PHP-Code:
//Sonderfall (falls integer größer ist als count
if( count( $array ) <= $integer ) return $array;
Grüße
Dieter
|
|
|
18.03.2005, 18:45
|
#12
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
halt - das ist anders !
$anzahl=(count($a)<10) ? count($a) : 10;
Das ist nur die Kurzschreibweise für:
PHP-Code:
if(count($a)<10) {
$anzahl=count($a);
} else {
$anzahl=10;
}
count gibt nur an, wieviele Elemente in dem Array $a sind.
Beispiel: Es sind 3 Bilder (zeilen) in der logdatei.
Dann hat $a 3 Elemente, count($a) ist 3.
Daraus ergibt sich für $anzahl der Wert 3.
Sind 10 oder mehr Bilder da, ist $anzahl immer 10.
|
|
|
19.03.2005, 16:09
|
#13
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Auer - Südtirol - Italy
|
@St@eff.en
ach so Kurzschreibweise. Wieder etwas dazugelernt
Aber wieso musste ich das weglöschen damit geht???
PHP-Code:
//Sonderfall (falls integer größer ist als count
if( count( $array ) <= $integer ) return $array;
Grüße
Dieter
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr.
|
 |
 |
| |