[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Генерация ссылок по названию папки.
brainraider
в общем есть сайт такой : http://www.yaltarent.com/

Возьмем такую страничку для примера: http://www.yaltarent.com/houses.php?code=DYSOS1

на страничке есть такая вот ссылочка: Фотогалерея

А хотелось бы, что бы ссылка генерился автоматически - т.е. есть у мгу например папка, в которой 5 папок. скрипт лезет в корневик, находит эти 5 папок, забивает их в массив, потом через транслитор пропускает и клепает ссылки типа:
houses.php?code=DYSOS1&photo=photogalereya

В общем с транскриптором и созданием ссылок я справлюсь, прошу помощи в следующем:

Как создать массив, в который будут забиваться тока папки =)))

Вот что накидал...


$dir=opendir($url);
$dirrect=array();
while ($papka=readdir($dir))
if ($papka!="." && $papka!="..")
{
$rasshir = substr($file, strrpos($file, '.') + 1);
if ($rasshir=="")
$dirrect[]=$papka;
}


а дальше - ступор=)



Спустя 7 часов, 28 минут, 5 секунд (9.11.2009 - 10:50) stepan написал(а):
примерно вот так:
   $dir = opendir ( $url );
$dirrect = array ();
while ( $papka = readdir ( $dir ) )
{
if ( $papka != "." && $papka != ".." )
{
if ( is_file ( $papka ) )
{
$file = pathinfo ( $papka );
echo $file['extension']; //Выводит тебе расширение
}
if ( is_dir ( $papka ) )
$dirrect[] = $papka;
}
}

Спустя 17 минут, 57 секунд (9.11.2009 - 11:08) brainraider написал(а):
Хм, не выводит ничего.... ни расширение, ни содержимое массива...

сделал приписку, что б проверить:

foreach ($dirrect as $drct)
echo $drct;


Ничего =(

Спустя 19 минут, 30 секунд (9.11.2009 - 11:28) stepan написал(а):
вот так у меня работает
<?php
$path = $_SERVER['DOCUMENT_ROOT'].'/view/';
$dir = opendir ( $path );
$dirrect = array ();
while ( $papka = readdir ( $dir ) )
{
if ( is_file ( $path . $papka ) )
{
$file = pathinfo ( $papka );
echo $file['extension']; //Выводит тебе расширение
}
elseif ( is_dir ( $path . $papka ) )
if ( $papka != '.' && $papka != '..' )
$dirrect[] = $papka;

}
closedir ( $dir );
?>

Спустя 6 минут, 34 секунды (9.11.2009 - 11:34) brainraider написал(а):
Хм, что-то у мну не пашет.... Ладно, спасибки, буду пытаться ковырять...

Спустя 4 минуты, 21 секунда (9.11.2009 - 11:39) stepan написал(а):
Цитата (stepan @ 9.11.2009 - 08:28)
if ( $papka != '.' && $papka != '..' )

я не знаю почему у меня именно так работает но должно вообще вместо `и` стаять `или` ( || )

Спустя 1 минута, 9 секунд (9.11.2009 - 11:40) glock18 написал(а):
brainraider, я думаю, читает по урлу. тогда нужно разрешать это в настройках пыхи.

Спустя 37 секунд (9.11.2009 - 11:41) glock18 написал(а):
Цитата
я не знаю почему у меня именно так работает но должно вообще вместо `и` стаять `или` ( || )


не должно smile.gif так и должно

Спустя 2 минуты, 29 секунд (9.11.2009 - 11:43) brainraider написал(а):
хм, ну у мну нема доступа к инику хостинга=)))) по крайней мере, я не слышал, чтобы они предоставляли доступ...

щас попробую полную ссылку юзать...

Спустя 3 минуты, 16 секунд (9.11.2009 - 11:46) glock18 написал(а):
stepan
выкладывал код, который работает с физическим путем. если нужго то же самое, только по http/ftp, то нужно включить allow_url_fopen (кажысь так), чтобы это получилось. иначе боюсь никак.

Спустя 6 минут, 16 секунд (9.11.2009 - 11:53) brainraider написал(а):
Ха, а у меня включено

Спустя 3 часа, 26 минут, 21 секунда (9.11.2009 - 15:19) brainraider написал(а):
Все оказалось куда проще...

$url= "путь";
for($dir=scandir($url),$i=0;isset($dir[$i]);$i++)
{
if ($dir[$i][0]=='.') continue;
$full_path=$url.'/'.$dir[$i];
if (is_dir($full_path))
$result[]=$dir[$i];
}

юзаем пхп5 =))))

Спустя 2 дня, 15 часов, 59 минут, 26 секунд (12.11.2009 - 07:18) brainraider написал(а):
Итак, развиваем тему дальше...

Вот код который получился:

// забиваем папки в массив
$url= "apanel/photos/".$row[3];
for($dir=scandir($url),$i=0;isset($dir[$i]);$i++)
{
if ($dir[$i][0]=='.') continue; // если название папки не начинается с точки - прододжаем
$full_path=$url.'/'.$dir[$i];
if (is_dir($full_path))
$result[]=$dir[$i];
}
// генерим ссылки:
$n=0;
foreach ($result as $res)
{
$n++;
echo'<a href="?code='.$row[3].'&photos='.$res.'" class="o-r">Фотогалерея '.$n.'</a><br><br></td></tr>';
}

потом бла-бла-бла
а тут опять код smile.gif

elseif(!empty($_GET['code']) && $_GET['photos']==$res)

и сново бла-бла-бла

Так вот:) заинтересовали меня несколько вопросов:
1. как во второй код правильно вставить $res или $result (совсем не понимаю, понимаю что не $res, но больше ниче не понимаю:))
2. Там, где у нас идет генерация ссылок (foreach), первая ссылка генерится норм, а вот остальные генерятся до контента... оО
Подскажите как это исправить плиз.
Или подскажите другой путь генерации ссылок

Спустя 1 час, 49 минут, 57 секунд (12.11.2009 - 09:08) freshcoder написал(а):

foreach ($result as $res)
{
$n++;
echo'<a href="?code='.$row[3].'&photos='.$res.'" class="o-r">Фотогалерея '.$n.'</a><br><br></td></tr>';
}

заменить на

$mylinks = '';
foreach ($result as $res)
{
$n++;
$mylinks .= '<a href="?code='.$row[3].'&photos='.$res.'" class="o-r">Фотогалерея '.$n.'</a><br><br></td></tr>';
}


Дальше в шаблоне "эхаешь" эту переменную:
<div id="links"><?php echo $mylinks;?></div> ph34r.gif

Спустя 12 минут, 50 секунд (12.11.2009 - 09:21) brainraider написал(а):
Или я чета не понял или действительно в данном случае выводится только последний элемент массива...

все оказалось опять таки проще:

// генерим ссылки:
$n=0;
foreach ($result as $res)
{
$n++;
echo'<a href="?code='.$row[3].'&photos='.$res.'" class="o-r">Фотогалерея '.$n.'</a><br/><br/>';
}
echo '</td></tr>';[s]


терь главный вопрос, как передать в условие этот гребаный массив...

Спустя 2 часа, 14 минут, 18 секунд (12.11.2009 - 11:35) brainraider написал(а):
Ну неужели ни у кого никаких идей? Хоть че-нить напишите =)))

Спустя 3 часа, 9 минут, 11 секунд (12.11.2009 - 14:45) sergeiss написал(а):
Ты тут сам собой беседу ведешь. Так что даже непонятно, в чем же вопрос. Какое условие, зачем передавать туда этот массив...

Спустя 8 минут, 59 секунд (12.11.2009 - 14:54) brainraider написал(а):
Такс, начнем с начала...

Вот приблизительно так идет код:


if(empty($_GET['code']) && empty($_GET['photos']))

бла бла бла

elseif(!empty($_GET['code']) && empty($_GET['photos']))

бла бла бла

for($dir=scandir($url),$i=0;isset($dir[$i]);$i++)
{
if ($dir[$i][0]=='.') continue; // если название папки не начинается с точки - прододжаем
$full_path=$url.'/'.$dir[$i];
if (is_dir($full_path))
$result[]=$dir[$i];
}
// генерим ссылки:
$n=0;
foreach ($result as $res)
{
$n++;
echo'<a href="?code='.$row[3].'&photos='.$res.'" class="o-r">Фотогалерея '.$n.'</a><br/><br/>';
}
echo '</td></tr>';

бла бла бла

elseif(!empty($_GET['code']) && $_GET['photos']==????????????) <<-----<<<<< Тут нужно как то вставить, что бы генерилась страница, по папке (путь к папке забит в массив $result)... Это и есть то загадочное условие


Если опять чет неясно - грите что, я впринципе врядли смогу объяснить яснее, если мне не объяснить де неясно =)

Спустя 4 минуты, 48 секунд (12.11.2009 - 14:58) sergeiss написал(а):
Для начала "не повредит" где-то вверху объявить массив
$result=array()

и только потом использовать его.

Далее. Если тебе нужно условие на то, что в массиве что-то есть, то тогда проверяй количество элементов в нем:
if( .....всякая фигня.... and count($result) > 0 )


// И еще. В других местах надо проверять не 
if( !empty($_GET[....]) )

// а вот так - это будет более правильно
if( !isset( $_GET[...]) )

Спустя 5 минут, 46 секунд (12.11.2009 - 15:04) sergeiss написал(а):
Объявление массива нужно для того, что в настоящее время он у тебя создается только в момент создания элементов этого массива. А если элементы созданы не будут, то и массив будет неопределенный. Тогда count($result) выдаст ошибку. А если массив объявлен, то он может быть и нулевой длины.

Спустя 1 день, 13 часов, 27 минут, 38 секунд (14.11.2009 - 04:32) brainraider написал(а):
Большое спасибо за совет, но это немного не то...

Вот я тут кой чего наметал эа денек... =)
Но есть проблемы. Итак, по порядку:

Есть папка, в ней четыре папки, в этих 4х папках суммарно 60 файлов (30,10,10,10).
Вот код вывода фоток:

if(!empty($_GET['code']) && !empty($_GET['photos']))
{
$row=mysql_fetch_array(mysql_query('SELECT * FROM houses WHERE code = "'.$_GET['code'].'"'));
echo'<br><table width="100%"><tr><td class="bea_zag_red" align="center" width="500px">'.$row['title'].'</td><td class="bea_zag_red"><p align="center">Код '.$row['code'].'</td></tr></table>';
$folder=links_of_folders("apanel/photos/".$row[3]);
foreach ($folder as $res)
{
$images=img_for_objects("apanel/photos/".$row[3]."/".$res);
$img=conclusion_photogalery("apanel/photos/".$row[3]."/".$res,$images);
}


function img_for_objects($url)
{
$dir=opendir($url);
$images=array();
while (false!==($file=readdir($dir)))
if($file!="." && $file!="..")
{
$rasshir = substr($file, strrpos($file, '.') + 1);
if($rasshir=="jpg" || $rasshir=="JPG")
$images[]=$file;
}
closedir($dir);
return $images;
}

function conclusion_photogalery($url,$images)
{
foreach($images as $img)
{
global $row;
echo '
<div class="shadow left7 left3"><div class="corner_lb"><div class="corner_rt">
<img class="img_border" src="'
.$url.'/'.$img.'" alt="'.$row['title'].'" width="290" height="220">
</div></div></div>
'
;
}
return $img;
}

function links_of_folders($url)
{
for($dir=scandir($url),$i=0;isset($dir[$i]);$i++)
{
if ($dir[$i][0]=='.') continue; // если название папки не начинается с точки - прододжаем
$full_path=$url.'/'.$dir[$i];
if (is_dir($full_path))
$folder[]=$dir[$i];
}
return $folder;
}



Ссылки генерятся все:
?code=DO1&photos=1
?code=DO1&photos=2
?code=DO1&photos=3
?code=DO1&photos=4

Тут 1,2,3,4 - имена папок...

Но вот только на каждой из 4х страниц выводятся все 60 имагов... Я понимаю, что у меня сначала забиваются в массив папки, а патом из всех этих папок в массив забиваются имаги и выводятся...

Лучшего пока не достиг... Подскажите плиз, как должен выглядеть код, что б все работало правильно!!!

Заранее благодарен!!!

Спустя 11 часов, 46 минут, 12 секунд (14.11.2009 - 16:18) brainraider написал(а):
Неужели ни у кого никаких соображений?sad.gif

Спустя 9 часов, 10 минут, 11 секунд (15.11.2009 - 01:28) brainraider написал(а):
В общем все пашет=))))

Если кому-нить буит интересно - пишите в личку.

Хочу выразить ОГРРОМНУЮ БЛАГОДАРНОСТЬ(!!!!!) to SERGEISS, который находясь в месте удаленном от цивилизации, имея ЖПРС под рукой в качестве интернета, натолкнул мну на мысль!!!


_____________
Там где есть новички, есть и двигатель прогресса!!!
Ну, если не сказать больше=)
Быстрый ответ:

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