[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Галерея на php
slavikx3m
Суть галереи проста. Скрипт просматривает содержимое директории с картинками, просчитывает их и собирает их имена в переменную, после чего при нажатии по кнопке next, переменная $number увеличивается на единицу а explode выискивает в списке под таким номером имя файла... Самое интересно что скрипт работает, НО ТОЛЬКО НА ДВУХ ФАЙЛАХ, а вот пролистать всю директорию не получается.

КТО МОЖЕТ СКАЗАТЬ ПОЧЕМУ БУДУ БЛАГОДАРЕН, ПРИСТРЕЛИТЕ ЛОШАДЬ, НЕ ДАЙТЕ ЕЙ МУЧАТСЯ ДАЛЬШЕ!!!



//задаём переменные
$number = '0';
$num = '0';
$dirfoledr = 'gal';


// считаем кол-во файлов в директории и формируем строку с их именами
$dir = opendir ("$dirfoledr");
$i = 0;
while (false !== ($file = readdir($dir))) {
if (strpos($file, '.jpg',1) ) {
$i++;
$we = $file;
$ww = "$we $ww";
}
}



echo "$ww";



if ($_POST["next"]){

if ($number<$i){
$num = $number + 1;
$number = $num;
}
elseif ($number=$i)
{echo "не сейчас";}


}




if ($_POST["pre"]){

if ($number>0){
$num = $number - 1;
$number = $num;
}
elseif ($number=0)
{echo "не сейчас";}


}



$pizza = "$ww";
$pieces = explode(" ", $pizza);
echo $pieces[0];
echo $pieces[1];
echo $pieces[2];
echo $pieces[3];
echo $pieces[4];
$asd = "$pieces[$number]";


$img = "<img SRC='gal/$asd' ALIGN=LEFT width='176' height='92'>";

?>

<form method="post">
<
td align="right"><input type="submit" value="вперед" name="next"></td>
</
form>


<
form method="post">
<
td align="right"><input type="submit" value="назад" name="pre"></td>
</
form>

<
td align="right"><?php echo "$img"; ?></td>


Ну а если кто знает пример такой галереи (с таким действием) и даст ссылку тоже будет СВЯТЫМ ЧЕЛОВЕКОМ!!!



Спустя 7 часов, 30 минут, 7 секунд (29.07.2010 - 19:05) Nord написал(а):
Эм, я не вижу, в каком месте вы сохраняете номер текущей картинки.

Как я понял, история такова:

В начале скрипта вы обнуляете переменную $number. Вам выводится первая картинка.
Вы нажимте кнопку "вперед", в блоке if ($_POST["next"]) $number увеличивается на один. Вам выводится вторая картинка
Но, когда вы еще раз нажимаете на кнопку "вперед", $number обнуляется и увеличивается на 1. Т.е. вам выводится та же самая страница

Насчет кода:

Вообще не понятно, зачем в цикле сцеплять имена файлов в одну строку, когда вы потом все равно делите эту строку explode'ом. Не проще ли сразу заносить из в массив $pieces? К тому же ваш вариат будет неправильно работать с файлами, у которых в имени есть пробел

Далее:

if (strpos($file, '.jpg',1) ) {
// Лучше заменить на:
if (substr($file, '.jpg', -4) ) {
// Это корректно обработает файлы типа: pic.jpg.exe

Кроме того, непонятен вот этот кусок кода:

if ($number<$i){
$num = $number + 1;
$number = $num;
} elseif ($number=$i) // Обратите внимание, здесь наверное опечатка: ($number == $i)
{echo "не сейчас";}

Перемнная $num в вашем скрипте вообще нигде далее не используется и не понятно, зачем она вообшще нужна. Не равен ли этот кусок вот этому:


if ($number < $i) $number++;
else echo "не сейчас";

А так, мне кажется, подобная галерея должна быть устроена по-другому: номер текущей картинки должен передаваться через $_GET параметр, тогда можно обойтись без формы, обойдясь чисто ссылками на след. страницы

Правка: синтаксис и орфография

Спустя 2 часа, 17 минут, 25 секунд (29.07.2010 - 21:23) slavikx3m написал(а):

if ($number<$i){
$num = $number + 1;
$number = $num;
} elseif ($number=$i) // Обратите внимание, здесь наверное опечатка: ($number == $i)
{echo "не сейчас";}


Возможно и опечатка, решать Вам. Объясню смысл этого куска. Кусок из события кнопки NEXT, то есть листать далее. Переменная $number позиция, номер рисунка, а переменная $i - это общее кол-во файлов, т.е. если позиция рисунка это последний рисунок, то кнопка NEXT бесполезна, чтобы не выводить файлы которых нет...

В том что можно было обойтись без $num, Вы правы, но даже если изменить на более рационально решение типа ....

$number = $number + 1;
//или
$number++;

...проблемы останутся прежними.

Про имена файлов с пробелами - это существенное замечание, я не учел, СПАСИБО, но в данном проекте заливка файлов на сервак ограничена мною, так что... НО всё равно спасибо.


Цитата
Не проще ли сразу заносить из в массив $pieces?

Наверное проще, я не знаю. Просто так было логичнее написать учитавая мои знания поэтому написал именно так как есть... Если Вам нетрудно написать кусок скрипта с подобной функцией (скорее всего это пару строк), то я буду Вам благодарен, потому как в тупике.

Цитата
номер текущей картинки должен передаваться через $_GET параметр


Тоже самое что и с предыдущей цитатой, все свалю на неопытность в php. Про передачу
значения переменных знаю не много. Если Вам не трудно киньте примерчик с работой такой "функции" .

Спустя 55 минут, 1 секунда (29.07.2010 - 22:18) SlavaFr написал(а):
потренеруйся с этим:

1) названия картинок в масиве
echo print_r(glob('gal/*.{jpg,gif}',GLOB_BRACE),true);


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

Спустя 29 минут, 16 секунд (29.07.2010 - 22:47) Nord написал(а):
Цитата

Тоже самое что и с предыдущей цитатой, все свалю на неопытность в php. Про передачу
значения переменных знаю не много. Если Вам не трудно киньте примерчик с работой такой "функции" .


Допустим, человеку скинули ссылку на фото с вашей галереи: gallery.php?number=4
В ней ему должны вывести картинка под номером 4 и две ссылки:
<a href="gallery.php?number=3">назад</a>
<a
href="gallery.php?number=5">вперед</a>

На сервере появление в адресе "?number=4" отражается появлением в массиве $_GET ключа 'number' ($_GET['number'] == 4)
По этому ваш скрипт будет выглядеть примерно так:

if (isset($_GET['number'])) $number = $_GET['number'] // 4 для ссылки gallery.php?number=4
else $number = 0; // если человек перешел по ссылке gallery.php, в массив $_GET не попал ключ 'number'
// Здесь какой-то код, выводящий картинку

[...]
// Выводим ссылки
if ($number > 0) echo '<a href="gallery.php?number=' . ($number - 1) . '">назад</a>'
if ($number < $i) echo '<a href="gallery.php?number=' . ($number + 1) . '">вперед</a>'


Спустя 12 часов, 14 минут, 35 секунд (30.07.2010 - 11:02) slavikx3m написал(а):
Цитата
Допустим, человеку скинули ссылку на фото с вашей галереи: gallery.php?number=4
В ней ему должны вывести картинка под номером 4 и две ссылки:

<a href="gallery.php?number=3">назад</a>
<
a href="gallery.php?number=5">вперед</a>

На сервере появление в адресе "?number=4" отражается появлением в массиве $_GET ключа 'number' ($_GET['number'] == 4)
По этому ваш скрипт будет выглядеть примерно так:

if (isset($_GET['number'])) $number = $_GET['number'] // 4 для ссылки gallery.php?number=4
else $number = 0; // если человек перешел по ссылке gallery.php, в массив $_GET не попал ключ 'number'
// Здесь какой-то код, выводящий картинку

[...]
// Выводим ссылки
if ($number > 0) echo '<a href="gallery.php?number=' . ($number - 1) .'">назад</a>'
if ($number < $i) echo '<a href="gallery.php?number=' . ($number + 1) .'">вперед</a>'



Ух ты СПАСИБО. Но что-то не вышло в первый раз (естественное синтаксис Ваш поправил на корректный), это было уже в час ночи, поэтому не стал с вариантами экспериментировать сегодня займусь. Почитаю про GET, наверное он не передаёт переменную, потому как всё равно number вечная единица)))) Буду читать. СПАСИБО Nord и SlavaFr!!!

Спустя 4 часа, 19 минут, 37 секунд (30.07.2010 - 15:21) slavikx3m написал(а):
Итак...



<?php
//Папка с изображениями
$url="gal";
//Количество на странице
$max=1;
$y=1;

//Проверяем, является ли директорией
if (is_dir($url)) {
//Проверяем, была ли открыта директория
if ($dir = opendir($url)) {
//Сканируем директорию
while ($file = readdir($dir)) {
//Убираем лишние элементы
if (strpos($file, '.jpg',1)) {
//Выводим спиоск в браузер
$images[]=$file;
}
}

//Закрываем директорию
closedir($dir);
}
}


//Получаем количество элементов в массиве
$amount=count($images);
//Делим на количество отображаемых на странице изображений
//и округляем в большую сторону

$pages = ceil($amount/$max);
//Принимаем входящую переменную, которая указывает номер страницы

if (isset($_GET['page'])) {

$_p= $_GET['page'];
}
else {
$_p = "2";
}



$_p= $_GET['page'];

//Создаем вспомогательные переменные для навигации
//Если переменная $_p не задана

if(!$_p OR $_p =='') {
//Нижний предел
$nmin = 0;
//Верхний предел
$nmax=$max-1;
}
else {
$nmin = ($_p*$max)-$max;
$nmax=($max*$_p)-1;
}

echo '<h1>Фотогалерея</h1>';
echo "$_p <br>";

if ($_p > 1) {
echo '<a href="index.php?page=' . ($_p - 1) . '">назад</a>';
}


for($i=$nmin;$i<=$nmax;$i++) {
if($images[$i]) {

echo '<a href="'.$url.'/'.$images[$i].'">';
echo '<img style="border:1px blue dashed;width:160px; height:120px;" src="'.$url.'/'.$images[$i].'"/>';
echo '</a>  ';
} }



if ($_p < $amount) {
echo '<a href="index.php?page=' . ($_p + 1) . '">вперед</a>';
}





?>




... готовая фото галерея. простенькая, но зато работает так как мне нужно... МОЖЕТ какому новичку, как я, пригодится скриптик...

ЕЩЁ РАЗ СПАСИБО Nord и SlavaFr!!!
Быстрый ответ:

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