- PHP Галерия с картинки без база данни
12
WT форуми -> Всичко за phpBB -> PHP Галерия с картинки без база данни
Създайте нова тема Напишете отговор 
Автор Съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 26/03/2009 2:28 am     PHP Галерия с картинки без база данни Отговорете с цитат


Здравейте, имах малко свободно време и реших да спретна една галерийка Smile
Самата галерия не използва база данни, а зарежда снимките направо от директориите.
Системата се състои от 1 php файл.

Нека преди да дам кода да кажа няколко думи и за самата система.
Значи като за начало си правите папка "pics". В нея ще бъдат слагани самите картинки.
Галерията разполага с категории. Тези категории са различните папки в папката "pics".
С прости думи. Ако в папката pics направите друга папка примерно "Животни", вече си имате категория Животни.
Ако направите още една папка "Коли" вече си имате категория с коли Smile
Ако вътре в папката Животни направите папка "Котки" вече си имате под категория на категорията Животни.
И така може да си правите колкото поискате категории и под категории Smile

Забравих също да спомена, че кода си има и странициране Smile

Ето го кода:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>PHP Галерия</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>

<?php

// КОНФИГУРАЦИЯ //

$pics_folder = "pics"; // в коя папка са картинките и категориите
$max_width = 150; // максимална широчина
$max_height = 150; // максимална височина
$pics_per_page = 25; // по колко картинки на страница
$pics_ex = array('jpg','jpeg','gif','png'); // кои файлове да зачита като картинки

// КРАЙ НА КОНФИГУРАЦИЯТА //

function resize($pic)
{
    global $max_width, $max_height;
    $max_width_pic = $max_width;
    $max_height_pic = $max_height;
    list($width,$height) = getimagesize($pic);
    $ratio = $width / $height;
   
    if ($width > $max_width_pic || $height > $max_height_pic)
    {
        if ($width > $height)
        {
            $width = $max_width_pic;
            $height = $width / $ratio;
        }
        elseif ($width < $height)
        {
            $height = $max_height_pic;
            $width = $height * $ratio;
        }
        elseif ($width == $height)
        {
            $width = $max_width_pic;
            $height = $max_height_pic;
        }
    }
    $width = intval($width);
    $height = intval($height);
    return array("width" => $width, "height" => $height);
}

$pics_folder = preg_replace('/[\/]+/', '/', $pics_folder.'/');

function all_images()
{
    global $pics_folder, $pics_ex;
    $folders = array($pics_folder);
    $checked = array($pics_folder);
    $out_files = array();
    while (count($folders))
    {
        foreach ($folders as $folder)
        {
            array_shift($folders);
            $dir = opendir($folder);
            while ($file = readdir($dir))
            {
                if ($file != '.' && $file != '..')
                {
                    if (is_file($folder.$file) && in_array(strtolower(end(explode(".", $file))), $pics_ex))
                    {
                        $out_files[] = $folder.$file;
                    }
                    elseif (is_dir($folder.$file) && !in_array($folder.$file.'/', $checked))
                    {
                        $folders[] = $folder.$file.'/';
                        $checked[] = $folder.$file.'/';
                    }
                }
            }
        }
    }
    return $out_files;
}

$all_images = all_images();

$category = false;
if (preg_match('/^[a-zа-я]+((->)[a-zа-я]+)*$/i', $_GET['kat']))
{
    $category = (is_dir($pics_folder.str_replace('->', '/', $_GET['kat']))) ? str_replace('->', '\/', $_GET['kat']) : false;
}

$out_images = array();
foreach ($all_images as $image)
{
    $raz = explode("/", $image);
    array_shift($raz);
    array_pop($raz);
   
    if ($category && !preg_match("/^$category/", implode("/", $raz))) continue;
    $out_images[] = $image;
}

$masiv = @array_chunk($out_images, $pics_per_page, true);

$stranici = floor(count($out_images) / $pics_per_page);
if ((count($out_images) % $pics_per_page) > 0) { $stranici++; }

if (is_numeric($_GET['page']) && $_GET['page'] <= $stranici) {
    $page = $_GET['page'];
} else {
    $page = 1;
}

$red = 1;
echo "<table border=\"0\">
<tr>\n";
foreach ($masiv[($page - 1)] as $pic)
{
    $resize = resize($pic);
    $razp = explode("/", $pic);
    array_shift($razp);
    array_pop($razp);
   
    $kat = array();
    for ($i=0;$i<count($razp);$i++)
    {
        $url = array();
        for($i2=0;$i2<=$i;$i2++)
        {
            $url[] = $razp[$i2];
        }
        $kat[] = '<a href="?kat='.implode("->", $url).'">'.$razp[$i].'</a>';
    }
   
    echo "<td><a href=\"{$pic}\" target=\"_blank\"><img src=\"{$pic}\" width=\"".$resize['width']."\" height=\"".$resize['height']."\" border=\"0\"></a><br />Категория:<br />".((count($kat)) ? implode(" -> ", $kat) : "Няма")."</td>\n";
    if ($red == floor(sqrt($pics_per_page))) { $red = 1; echo "</tr><tr>\n"; } else { $red++; }
}
echo "</tr>
</table>";

echo "<br><br><br />Страници: ";
for ($i=1;$i<=$stranici;$i++) {
    if ($page != $i) {
        echo "<a href=\"?page=$i".(($category) ? '&kat='.$_GET['kat'] : '')."\">$i</a> ";
    } else {
        echo "$i ";
    }
}
?>

</body>
</html>


Автора на кода съм аз и ще помоля ако го разпространявате да споменавате източник - Web-Tourist и автор - аз Very Happy

Чудех се дали да го пусна като урок, но сигурно ще го направя утре, че вече ми се спи, а и е късно Very Happy

Хайде, надявам се да има доволни от кодчето Razz


EDIT: Еми така е толкова ми се спи, че даже не съм видял, че пускам темата в PHPBB категорията Embarassed
Ще помоля някой модератор да я премести в PHP и MySQL кодове Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Doris
Редовен
Редовен

Регистриран на: 06/07/2006 8:17 pm

Support: 47
Bonus: 185
Мнения: 1102
Мнение 26/03/2009 2:47 pm      Отговорете с цитат


Работи галерията,но малко седи недовършено, ето моето ДЕМО:
http://momenti.info/hGallery

Може би с нещо от сорта на Lightwindow или отделен фрейм за уголемената картинка..
Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 26/03/2009 5:52 pm      Отговорете с цитат


Doris написа:
Работи галерията,но малко седи недовършено, ето моето ДЕМО:
http://momenti.info/hGallery

Може би с нещо от сорта на Lightwindow или отделен фрейм за уголемената картинка..
Smile

Да, сега това ще правя с jquery Smile
След малко ще пусна новия код, с малко подобрения и предполагам ще бъде завършения вид на кода Smile

ЕДИТ: Няма да е зле някой да премести темата в PHP кодове Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 26/03/2009 6:15 pm      Отговорете с цитат


Ето го и окончателния скрипт Smile
СВАЛИ
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Doris
Редовен
Редовен

Регистриран на: 06/07/2006 8:17 pm

Support: 47
Bonus: 185
Мнения: 1102
Мнение 27/03/2009 11:54 am      Отговорете с цитат


Категориите са дадени като линкове, пък като кликнеш на тях нищо не става? Rolling Eyes
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 27/03/2009 2:53 pm      Отговорете с цитат


Doris написа:
Категориите са дадени като линкове, пък като кликнеш на тях нищо не става? Rolling Eyes

Ахам, да забелязах.
Както винаги бях объркал Smile
Качил съм нов архив с нови файлове.
Вече категориите ги показва като цъкнеш на самата картинка Razz

Download: LINK
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Doris
Редовен
Редовен

Регистриран на: 06/07/2006 8:17 pm

Support: 47
Bonus: 185
Мнения: 1102
Мнение 27/03/2009 4:54 pm      Отговорете с цитат


Показват се заедно с таговете.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 27/03/2009 11:14 pm      Отговорете с цитат


Doris написа:
Показват се заедно с таговете.

Я дай скрийн, защото не те разбрах.
Как така се показват с таговете ?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Doris
Редовен
Редовен

Регистриран на: 06/07/2006 8:17 pm

Support: 47
Bonus: 185
Мнения: 1102
Мнение 28/03/2009 12:38 am      Отговорете с цитат


Това, като посочиш с мишката:
PHP Галерия с картинки без база дан

Сигурно лесно ще го оправиш. Smile

Галерията би могла да има добри приложения:
Като си подредиш снимките и им намалиш размера с някоя програма за обща обработка на снимки, качваш ги всички накуп и готово.
През лятото за да изтрия излишните картинки от един сайт трябваше да свалям цялата директория за да ги разгледам на компютъра, а с нея могат направо да се откриват.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 28/03/2009 2:08 am      Отговорете с цитат


Еми то това е сложено като title, защото ако го няма като цъкнеш на картинката няма да ти се покаже категорията.
Пък и не мисля, че е голям проблем ако това си е така.
Ако някой разбира повече от jquery може да го редактира Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
beta16
Нов
Нов

Регистриран на: 06/04/2009 12:16 am

Support: 0
Bonus: 0
Мнения: 79
Мнение 13/04/2009 1:24 am      Отговорете с цитат


може ли дами кажеш как да махна категориите и да сложа повече снимки на ред
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HunteR
Tourist Defender

Регистриран на: 28/05/2006 5:26 pm

Support: 352
Bonus: 695
Мнения: 3998
Мнение 13/04/2009 9:59 pm      Отговорете с цитат


beta16 написа:
може ли дами кажеш как да махна категориите и да сложа повече снимки на ред

Доста модване ще е докато магнеш напълно категориите.
А за снимките направи да са 49 на страница. Скрипта автоматично ще ги сложи по 7 на ред Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> Всичко за phpBB Часовете са според зоната GMT + 2 Часа
12
Страница 1 от 2


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети