PHP (klasör) Alfabetik Sipariş Listeleme Dosya?

3 Cevap php

Ben bu olurdu ne kadar basit emin değilim, ama ben bunu yapmak zor olurdu, ancak ben alfabetik olarak görüntülenmesini onları istiyorum, belirli bir klasördeki dosyaları görüntüleyen bir komut dosyası kullanıyorum? İşte kullanıyorum kodu:

if ($handle = opendir($mainframe->getCfg( 'absolute_path' ) ."/images/store/")) {
    	while (false !== ($file = readdir($handle))) {
    		if ($file != "." && $file != "..")  {
    			if (($file != "index.html")&&($file != "index.php")&&($file != "Thumbs.db")) {
    			$strExt = end(explode(".", $file));
    				if ($strExt == 'jpg') {
    					$Link = 'index.php?option=com_shop&task=deleteFile&file[]='.$file;
    					$thelist .= '<tr class="row0"><td nowrap="nowrap"><a href="'.$Link.'">'.$file.'</a></td>'."\n";
    					$thelist .= '<td align="center" class="order"><a href="'.$Link.'" title="delete"><img src="/administrator/images/publish_x.png" width="16" height="16" alt="delete"></a></td></tr>'."\n";
    				}

    			}
    		}
    	}
    	closedir($handle); 
    }	
    echo $thelist;

:)

3 Cevap

Bunun yerine readdir sadece varsayılan alfabetik sıralar hangi (documentation) scandir kullanabilirsiniz kullanarak.

Dönüş değeri scandir yerine bir dize bir dizidir, bu nedenle kod nihai yerine null dönüş değeri için kontrol dizi üzerinde yineleme için, biraz ayarlanabilir olması gerekir. Ayrıca, scandir yerine girdi olarak bir dosya tanıtıcısı dizin yolu ile bir dize alır, yeni sürümü bu gibi bir şey olacaktır:

foreach(scandir($mainframe->getCfg( 'absolute_path' ) ."/images/store/") as $file) {
  // rest of the loop could remain unchanged
}

Bu kod oldukça dağınık görünüyor. Sen sunumu ile dizin şaryo mantığı ayırabilirsiniz. (Bence) Çok daha kısa versiyonu:

<?php

// Head of page
$it = new DirectoryIterator($mainframe->getCfg('absolute_path') . '/images/store/'));

foreach ($it as $file) {
    if (preg_match('#\.jpe?g$#', $file->getFilename()))
        $files[] = $file->getFilename();
}
sort($files);

// Further down
foreach ($files as $file)
    // display links to delete file.
?>

Hatta kolunu açarak veya kapatma konusunda endişelenmenize gerek yoktur ve normal bir ifade ile dosya kontrol ediyoruz çünkü, koşullu çek patlayabilir ya da herhangi bir ihtiyaç yok.

Eğer Joomla1.5 kullanıyorsanız eğer JPATH_BASE yerine tanımlanmış sabit kullanarak olmalıdır

$mainframe->getCfg( 'absolute_path' )

Bu size dağıtacak bir Joomla uzantısı ise sadece PHP5 olduğu gibi, scandir() kullanmayın.

Yapılacak en iyi şey, Joomla API kullanmaktır. Bu dizin ve farklı ağlar ve protokoller üzerinden bunu yapmak için katmanlı dosya erişimi için bir sınıfları var. Yani dosya sistemi, örneğin FTP üzerinden olabilir, ve sınıfları herhangi bir ağ / protokolü için uzatılabilir.

jimport( 'joomla.filesystem.folder' );
$files = JFolder::files(JPATH_BASE."/images/store/");
sort($files); 
foreach($files as $file) { 
   // do your filtering and other task
}

Ayrıca jFolder için ikinci parametre :: files () aldığınız dosyaları filtreler gibi bir düzenli ifadeyi iletebilirsiniz.

You also don't want to use URL literals like /administrator/ since they can be changed. use the JURI methods like:

JURI :: baz ();

Sizin için, tablolarda Joomla CSS sınıfları emin olmak istiyorsanız:

'<tr class="row0">'

kullanın:

'<tr class="row'.($i&1).'">'

burada $i yineleme sayısıdır. Bu size alternatif 0'lar ve 1'ler bir dizi verir.