[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужен совет и подсказка в выборке файлов
acerrusm
Привет!

Скажу сразу, я новичок и речь пойдет не о вопросе касающегося работы самой WordPress, но для целостности картины ее упомянуть придется.

Собственно решил воспользоваться CMS WordPress для подключения своего сверстанного шаблона с той целью, что бы не писать самому скрипт загрузки фотографий на хостинг, а воспользоваться встроенным в саму CMS.

Однако при загрузки фоток, создаются 2 версии одной фотографии: 1 это миниатюра и 2 это оригинал. Обе версии попадают в одну и ту же папку 'uploads'.

Например если я загружаю фото с названием picture.jpg, то в папке загрузок появятся 2 файла:
1: picture-302x201.jpg
2: picture.jpg

Где ‘-302x201’ означает миниатюру оригинальной фотографии.

Дальше, при загрузке главной страницы, нужно что бы создавалось 2 массива:
В 1-ом массиве будут присутствовать названия только миниатюр которые присутствуют в загрузочной папке.
Во 2-ом массиве, соответственно должны быть названия тольно оригинальных фоток.

1-ый массив нужен для того, что бы выводить миниатюры в галлерею на главной страницы, а 2-й для вывода оригинальной фотографии при нажатии на миниатюру.

Например:
Массив с миниатюрами:
Array
(
[
0] => picture_one-200-302x201.jpg
[1] => picture_two-206-302x201.jpg
)


Массив с оригиналами:
Array
(
[
0] => picture_one.jpg
[1] => picture_two.jpg
)


Для первого массива который выводит только миниатюры я использую вот это:
$path = "wp-content/uploads/*302x201.{jpg,gif,png}";
$miniature_array = glob($path,GLOB_BRACE);


Однако со вторым массивом произошла заминка - не получается выбрать только оригиналы.
Вчера весь вечер искал решение на разных форумах, в том числе и зарубежных, но все равно ничего толкового найти не смог.

Вопросы:
1: Правильно ли использовать glob() с точки зрения быстродействия? А то в инете видел, что люди пишут про opendir().

2: Что нужно добавить в строку $path = "wp-content/uploads/*302x201.{jpg,gif,png}”; для того что бы произвести выборку только оригинальных фотографий (т.е. фотографий в названии которых отсутствует '302x201')?
FatCat
Цитата (acerrusm @ 22.11.2014 - 16:31)
Правильно ли использовать glob() с точки зрения быстродействия? А то в инете видел, что люди пишут про opendir().

Сравнивал быстродействие на больших объемах - примерно 50 К файлов в 10 К вложенных поддиректориях - у меня glob() оказался самым быстрым: http://phpforum.su/index.php?showtopic=82415


Цитата (acerrusm @ 22.11.2014 - 16:31)
Что нужно добавить в строку

А может наоборот? Собрали массив всего что есть, и дальше в цикле по массиву выбрали нужное.

_____________
Бесплатному сыру в дырки не заглядывают...
acerrusm
Цитата
Сравнивал быстродействие на больших объемах - примерно 50 К файлов в 10 К вложенных поддиректориях - у меня glob() оказался самым быстрым: http://phpforum.su/index.php?showtopic=82415


О как! Значит я на правильном пути :)

Цитата
А может наоборот? Собрали массив всего что есть, и дальше в цикле по массиву выбрали нужное.


Действительно, что же я раньше так не сделал. :unsure:

В итоге получилось вот что:

<?php  
$test_path = "wp-content/uploads/*.{jpg,gif,png}";
// $test_dir = scandir($test_path);
$test_dir = glob($test_path,GLOB_BRACE);
$cnt = 0;
$count_pictures = count($test_dir)/2;
for ($i=0; $i < $count_pictures; $i++) {
?>
<div class="galleryItem">
<
a class="swipebox" href="<?= $test_dir[$cnt+1]; ?>">
<
img src="<?= $test_dir[$cnt]; ?>" alt="image">
</
a>
</
div>
<?php
$cnt = $cnt + 2;
}
?>



Спасибо большое за подсказку и инфу!
mvg
Цитата (acerrusm @ 22.11.2014 - 16:31)
2: Что нужно добавить в строку $path = "wp-content/uploads/*302x201.{jpg,gif,png}”; для того что бы произвести выборку только оригинальных фотографий (т.е. фотографий в названии которых отсутствует '302x201')?

Нужно убрать 302х201 и использовать регулярное выражение (например такое "/^[A-zА-яЁё]+\.(jpg|gif|png)+$/" ).

А вообще лучше хорошо подумать и составить правильное регулярное выражение потому что файл может оказаться с название *350х271 или еще какие другие цифры. Таким образом составив 2 регулярки одну выборка без цифр, вторую выборку только с цифрами получится то, что надо.

glob вполне воспримет регулярки.


Да! Можно еще топорным образом сделать папку в которую складывать уменьшенные картинки и потом просто выборка по всей папке и все, но это так... топорно и почти правильно!
Guest
Цитата (mvg @ 22.11.2014 - 19:17)
Цитата (acerrusm @ 22.11.2014 - 16:31)
2: Что нужно добавить в строку $path = "wp-content/uploads/*302x201.{jpg,gif,png}”; для того что бы произвести выборку только оригинальных фотографий (т.е. фотографий в названии которых отсутствует '302x201')?

Нужно убрать 302х201 и использовать регулярное выражение (например такое "/^[A-zА-яЁё]+\.(jpg|gif|png)+$/" ).

А вообще лучше хорошо подумать и составить правильное регулярное выражение потому что файл может оказаться с название *350х271 или еще какие другие цифры. Таким образом составив 2 регулярки одну выборка без цифр, вторую выборку только с цифрами получится то, что надо.

glob вполне воспримет регулярки.


Да! Можно еще топорным образом сделать папку в которую складывать уменьшенные картинки и потом просто выборка по всей папке и все, но это так... топорно и почти правильно!

Да, с регулярными выражениями надо получше ознакомиться. А то в книгах по php их не сильно затрагивают, если вообще пропускают. Спасибо за совет!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.