Avatar billede 4b4 Nybegynder
02. marts 2005 - 14:43 Der er 1 kommentar og
1 løsning

Sorterer ikke efter mappenavn

Jeg har bikset dette lille php script sammen, eller rettere modificeret et jeg har fundet. MEN! jeg kan ikke få det til at sortere efter navnene på mapperne. Istedet sorterer den efter hvornår mapperne er oprettet.

En demo kan ses på: http://billeder.bergsorensen.dk

Php code:
// GALLERY SETTINGS

Define('DIR_CACHE', './tmp/'); // directory to store modified images (shoul have right to write files)
Define('THUMBNAIL_WIDTH', '100'); // thumbnails width
Define('THUMBNAIL_HEIGHT', '100'); // thumbnails height
Define('IMAGES_ROW', 4); // images on row
// ----------------------------------------------------------------------
$img=$_GET['img'];

if (!Is_Dir(DIR_CACHE)) {
mkdir(DIR_CACHE, 0777);
}

// IMAGE RESIZE AND SAVE TO FIT IN $new_width x $new_height
if ($img!='' && file_exists($img)) {

$w=$_GET['w'];
$h=$_GET['h'];

$thumb=strtolower(preg_replace('/\W/is', "_", "$img $w $h"));

  $changed=0;
  if (file_exists($img) && file_exists(DIR_CACHE.$thumb)) {
  $mtime1=filemtime(DIR_CACHE.$thumb);
  $mtime2=filemtime($img);
  if ($mtime2>$mtime1) $changed=1;
  } elseif (!file_exists(DIR_CACHE.$thumb)) {
  $changed=1;
  }

if ($changed) {

$filename=$img;
$new_width=(int)@$w;
$new_height=(int)@$h;
$lst=GetImageSize($filename);
$image_width=$lst[0];
$image_height=$lst[1];
$image_format=$lst[2];

if ($image_format==1) {
  Header("Content-Type:image/gif");
  readfile($filename);
  exit;
} elseif ($image_format==2) {
  $old_image=imagecreatefromjpeg($filename);
} elseif ($image_format==3) {
  $old_image=imagecreatefrompng($filename);
} else {
  exit;
}

if (($new_width!=0) && ($new_width<$image_width)) {
  $image_height=(int)($image_height*($new_width/$image_width));
  $image_width=$new_width;
//  $image_height=$new_height;
}

if (($new_height!=0) && ($new_height<$image_height)) {
  $image_width=(int)($image_width*($new_height/$image_height));
  $image_height=$new_height;
//  $image_width=$new_width;
}


//  $new_image=imageCreate($image_width, $image_height); // for old GDlib
$new_image=imageCreateTrueColor($image_width, $image_height);

$white = ImageColorAllocate($new_image, 255, 255, 255);
ImageFill($new_image, 0, 0, $white);

// imagecopyresampled
// imageCopyResized (for old GDlib)
imageCopyResampled( $new_image, $old_image, 0, 0, 0, 0, $image_width, $image_height, imageSX($old_image), imageSY($old_image));

imageJpeg($new_image, DIR_CACHE.$thumb);
}


Header("Content-type:image/jpeg");
readfile(DIR_CACHE.$thumb);
exit;
}

// ----------------------------------------------------------------------

  $init_dir="./";

  if (IsSet($HTTP_GET_VARS['dir'])) {
  $dir=$HTTP_GET_VARS['dir'];
  $dir=preg_replace("/\.+/", ".", $dir);
  }

  if (IsSet($dir) && ($dir!=$init_dir)) {
  $directory=$dir;
  $tmp=array_reverse(explode('/', $dir));
  array_shift($tmp);
  array_shift($tmp);
  $out['UP']=urlencode(implode('/', array_reverse($tmp))."/");
  } else {
  $directory=$init_dir;
  }

  $dir=opendir($directory);
  $k=0;
  $on_row=IMAGES_ROW;


  if (file_exists($directory."files.txt")) {
  $data=LoadFile($directory."files.txt");
  $lines=explode("\n", $data);
  for($i=0;$i<count($lines);$i++) {
    $ar=explode(' ', trim($lines[$i]));
    $tmp=array_shift($ar);
    $descriptions[$tmp]=implode(' ', $ar);
  }
  }

  while ($file=readdir($dir)) {
  if (Is_Dir($directory."/$file") && ($file!='tmp') && ($file!='.') && ($file!='..')) {
    $directories[]=array('FILENAME'=>$file, 'DIR'=>$directory, 'DESCRIPTION'=>$descriptions[$file], 'URL'=>urlencode($directory."$file/"));
  }

  if (!Is_file($directory."/$file")) continue;

  $ext=strtolower(substr($file, -3));

  if ($ext!='gif' && $ext!='jpg') continue;

  $rec=array();
  $rec["FILENAME"]=$file;

  $size=(int)(filesize($directory."/".$file)/1024);
  if ($size>1024) {
    $rec["SIZE"]=(((int)($size*100/1024))/100)." Mb";
  } else {
    $rec["SIZE"]=$size." Kb";
  }
  if (IsSet($descriptions[$file])) {
    $rec['DESCRIPTION']=$descriptions[$file];
  }
  $rec["DIR"]=$directory;
  if (($k+1)%$on_row==0) {
    $rec['NEXT_ROW']=1;
  }
  $k++;
  $files[]=$rec;
  }

  include('./template.php');

// ----------------------------------------------------------------------

function LoadFile($filename) {
// loading file
$f=fopen("$filename", "r");
$data="";
if ($f) {
  $data=fread($f, filesize($filename));
  fclose($f);
}
return $data;
}
?>

TEMPLATE FIL:
<?if (IsSet($out['UP'])) {?>
<a href="?dir=<?=$out['UP']?>">&lt;&lt;&lt; Up</a><br>
<?}?>

<?
if (is_Array($directories)) {
?>
<?
foreach ($directories as $v) {?>
  <big><b><img src="tmp/folder.jpg" width="16" height="14">&nbsp;<a href="?dir=<?=$v['URL'];?>"><?if ($v['DESCRIPTION']!='') echo $v['DESCRIPTION']; else echo $v['FILENAME'];?></a></big></b><br>
<?}?>
<?}?>
&nbsp;

<?
if (Is_Array($files)) {

?>
&nbsp;
<table border=0 align=left cellpadding=0>
<tr>
  <?foreach ($files as $f) {?>
  <td align=left valign=top>
  <font face="arial"><a href="<?=$f['DIR']?><?=$f['FILENAME']?>" target=_blank><img src="?img=<?=$f['DIR']?><?=$f['FILENAME']?>&w=<?=THUMBNAIL_WIDTH?>&h=<?=THUMBNAIL_HEIGHT?>" border=0 alt="<?echo $f['DESCRIPTION'];?>"></a>
  <?if ($f['DESCRIPTION']!='') echo "<br>".$f['DESCRIPTION'];?>
  </td>
  <?if ($f['NEXT_ROW']) echo "</tr><tr>";?>
  <?}?>
</tr>
</table>

<?
}
?>
Avatar billede Daniel.E Praktikant
02. marts 2005 - 15:27 #1
Du kan evt omsætte dit output til et array, og benytte sort funktionen fra PHP.

bool sort ( array &array [, int sort_flags] )

<?php

$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
  echo "fruits[" . $key . "] = " . $val . "\n";
}

?>
Avatar billede 4b4 Nybegynder
02. marts 2005 - 17:50 #2
fixed det med dette:
function sorter( $a, $b ){ if ($a[ "FILENAME" ] == $b[ "FILENAME" ] ) return 0; return ( $a[ "FILENAME" ] < $b[ "FILENAME" ] ) ? -1 : 1; }
if ( is_array( $directories ) ) usort( $directories, "sorter" );
if ( is_array( $files ) ) usort( $files, "sorter" );
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester