PHP-скрипт для разбора каталога, отображения всех изображений и добавления class = "last" к последнему изображению в каталоге - PullRequest
2 голосов
/ 11 ноября 2009

Я могу разобрать каталог и вывести список всех изображений с любой из функций ниже. Мне просто нужно вставить атрибут class = "last" в тег img последнего элемента в цикле.

Кроме того, какая из этих функций лучше всего подходит для того, что я пытаюсь сделать?

Любая помощь высоко ценится!

function get_images1() {

$exts = 'jpg jpeg png gif';

$str = ''; $i = -1; // Initialize some variables
$folder = './wp-content/uploads';

$handle = opendir($folder);
$exts = explode(' ', $exts);
while (false !== ($file = readdir($handle))) {
    foreach($exts as $ext) { // for each extension check the extension
        if (preg_match('/\.'.$ext.'$/i', $file, $test)) { // faster than ereg, case insensitive
            //$str .= $file;
            $str .="<img src='wp-content/uploads/". $file ."' alt='" . $file . "' />";
            //if ($str) $str .= '|';
            ++$i;
        }
    }
}
echo $str;
closedir($handle); // Were not using it anymore
return $str;

}

function get_images2() {

//Open images directory
$dir = @ opendir("wp-content/uploads/");

//List files in uploads directory
while (($file = readdir($dir)) !== false)
{
if(ereg("(.*)\.(jpg|bmp|jpeg|png|gif)", $file))
    {
    echo '<img src="wp-content/uploads/'. $file .'" alt="" />';
    }
}
closedir($dir);
}

function get_images3() {

$dir = 'wp-content/uploads/';
$files = scandir($dir);
//print_r($files);
$num = count($files);
for($n=0; $n<$num; $n++) 
{
if(ereg("(.*)\.(jpg|bmp|jpeg|png|gif)", $files[$n]))
    {
    echo '<img src="wp-content/uploads/'. $files[$n] .'" alt="" />';
    }
}
}

function get_images()
{
$directory = 'wp-content/uploads/';
$directory_stream = @ opendir($directory);
// Display information about the directory stream
//  print_r ($directory_stream);
while ($entry = readdir ($directory_stream)) 
    {
    if (! is_file ("$directory/$entry"))
    continue;
    echo '<img src="wp-content/uploads/'. $entry .'" alt="" />';
    }
}

Ответы [ 2 ]

3 голосов
/ 11 ноября 2009

Я бы использовал DirectoryIterator, чтобы получить все файлы, отфильтруйте его, используя собственный FilterIterator, а затем CachingIterator, чтобы проверить последний элемент:

class ExtensionFilter extends FilterIterator {
    public function accept() {
        return $this->current()->isFile() && preg_match("/\.(bmp|jpe?g|gif|png)$/", $this->current()->getBasename());
    }
}

$it = new CachingIterator(new ExtensionFilter(new DirectoryIterator($dir)));
foreach ($it as $dir) {
    $filename = $dir->getFilename();
    echo '<img src="'.$filename.'" '.($it->hasMore() ? '' : ' class="last"').'>';
}
3 голосов
/ 11 ноября 2009

Если вы не отображаете или не объединяете <img> и не добавляете имя файла в массив, вы можете легко создать нужную разметку.

<?php
    $dir = 'wp-content/uploads/';
    $imgs = array();

    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (!is_dir($file) && preg_match("/\.(bmp|jpe?g|gif|png)$/", $file)) {
                array_push($imgs, $file);
            }
        }

        closedir($dh);
    } else {
        die('cannot open ' . $dir);
    }

    foreach ($imgs as $idx=>$img) {
        $class = ($idx == count($imgs) - 1 ? ' class="last"' : '');
        echo '<img src="' . $dir . $img . '" alt="' . 
             $img . '"' . $class . ' />' . "\n";
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...