PHP Галерия с картинки без база данни

Проблеми, въпроси, модове и темплейти.
User avatar
HunteR
Tourist Defender
Tourist Defender
Posts: 3999
Joined: Sun May 28, 2006 3:26 pm
Answers: 352

PHP Галерия с картинки без база данни

Post by HunteR » Thu Mar 26, 2009 12:28 am

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

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

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

Ето го кода:

Code: Select all

<!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&#40;'jpg','jpeg','gif','png'&#41;; // кои файлове да зачита като картинки

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

function resize&#40;$pic&#41;
&#123;
    global $max_width, $max_height;
    $max_width_pic = $max_width;
    $max_height_pic = $max_height;
    list&#40;$width,$height&#41; = getimagesize&#40;$pic&#41;;
    $ratio = $width / $height;
    
    if &#40;$width > $max_width_pic || $height > $max_height_pic&#41;
    &#123;
        if &#40;$width > $height&#41;
        &#123;
            $width = $max_width_pic;
            $height = $width / $ratio;
        &#125;
        elseif &#40;$width < $height&#41;
        &#123;
            $height = $max_height_pic;
            $width = $height * $ratio;
        &#125;
        elseif &#40;$width == $height&#41;
        &#123;
            $width = $max_width_pic;
            $height = $max_height_pic;
        &#125;
    &#125;
    $width = intval&#40;$width&#41;;
    $height = intval&#40;$height&#41;;
    return array&#40;"width" => $width, "height" => $height&#41;;
&#125;

$pics_folder = preg_replace&#40;'/&#91;\/&#93;+/', '/', $pics_folder.'/'&#41;;

function all_images&#40;&#41;
&#123;
    global $pics_folder, $pics_ex;
    $folders = array&#40;$pics_folder&#41;;
    $checked = array&#40;$pics_folder&#41;;
    $out_files = array&#40;&#41;;
    while &#40;count&#40;$folders&#41;&#41;
    &#123;
        foreach &#40;$folders as $folder&#41;
        &#123;
            array_shift&#40;$folders&#41;;
            $dir = opendir&#40;$folder&#41;;
            while &#40;$file = readdir&#40;$dir&#41;&#41;
            &#123;
                if &#40;$file != '.' && $file != '..'&#41;
                &#123;
                    if &#40;is_file&#40;$folder.$file&#41; && in_array&#40;strtolower&#40;end&#40;explode&#40;".", $file&#41;&#41;&#41;, $pics_ex&#41;&#41;
                    &#123;
                        $out_files&#91;&#93; = $folder.$file;
                    &#125;
                    elseif &#40;is_dir&#40;$folder.$file&#41; && !in_array&#40;$folder.$file.'/', $checked&#41;&#41;
                    &#123;
                        $folders&#91;&#93; = $folder.$file.'/';
                        $checked&#91;&#93; = $folder.$file.'/';
                    &#125;
                &#125;
            &#125;
        &#125;
    &#125;
    return $out_files;
&#125;

$all_images = all_images&#40;&#41;;

$category = false;
if &#40;preg_match&#40;'/^&#91;a-zа-я&#93;+&#40;&#40;->&#41;&#91;a-zа-я&#93;+&#41;*$/i', $_GET&#91;'kat'&#93;&#41;&#41;
&#123;
    $category = &#40;is_dir&#40;$pics_folder.str_replace&#40;'->', '/', $_GET&#91;'kat'&#93;&#41;&#41;&#41; ? str_replace&#40;'->', '\/', $_GET&#91;'kat'&#93;&#41; &#58; false;
&#125;

$out_images = array&#40;&#41;;
foreach &#40;$all_images as $image&#41;
&#123;
    $raz = explode&#40;"/", $image&#41;;
    array_shift&#40;$raz&#41;;
    array_pop&#40;$raz&#41;;
    
    if &#40;$category && !preg_match&#40;"/^$category/", implode&#40;"/", $raz&#41;&#41;&#41; continue;
    $out_images&#91;&#93; = $image;
&#125;

$masiv = @array_chunk&#40;$out_images, $pics_per_page, true&#41;;

$stranici = floor&#40;count&#40;$out_images&#41; / $pics_per_page&#41;;
if &#40;&#40;count&#40;$out_images&#41; % $pics_per_page&#41; > 0&#41; &#123; $stranici++; &#125;

if &#40;is_numeric&#40;$_GET&#91;'page'&#93;&#41; && $_GET&#91;'page'&#93; <= $stranici&#41; &#123;
    $page = $_GET&#91;'page'&#93;;
&#125; else &#123;
    $page = 1;
&#125;

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

echo "<br><br><br />Страници&#58; ";
for &#40;$i=1;$i<=$stranici;$i++&#41; &#123;
    if &#40;$page != $i&#41; &#123;
        echo "<a href=\"?page=$i".&#40;&#40;$category&#41; ? '&kat='.$_GET&#91;'kat'&#93; &#58; ''&#41;."\">$i</a> ";
    &#125; else &#123;
        echo "$i ";
    &#125;
&#125;
?>

</body>
</html>
Автора на кода съм аз и ще помоля ако го разпространявате да споменавате източник - Web-Tourist и автор - аз :D

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

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


EDIT: Еми така е толкова ми се спи, че даже не съм видял, че пускам темата в PHPBB категорията :oops:
Ще помоля някой модератор да я премести в PHP и MySQL кодове :)

User avatar
Doris
Потребител
Потребител
Posts: 1102
Joined: Thu Jul 06, 2006 6:17 pm
Answers: 47

Post by Doris » Thu Mar 26, 2009 12:47 pm

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

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

User avatar
HunteR
Tourist Defender
Tourist Defender
Posts: 3999
Joined: Sun May 28, 2006 3:26 pm
Answers: 352

Post by HunteR » Thu Mar 26, 2009 3:52 pm

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

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

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

ЕДИТ: Няма да е зле някой да премести темата в PHP кодове :)

User avatar
HunteR
Tourist Defender
Tourist Defender
Posts: 3999
Joined: Sun May 28, 2006 3:26 pm
Answers: 352

Post by HunteR » Thu Mar 26, 2009 4:15 pm

Ето го и окончателния скрипт :)
СВАЛИ

User avatar
Doris
Потребител
Потребител
Posts: 1102
Joined: Thu Jul 06, 2006 6:17 pm
Answers: 47

Post by Doris » Fri Mar 27, 2009 9:54 am

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

User avatar
HunteR
Tourist Defender
Tourist Defender
Posts: 3999
Joined: Sun May 28, 2006 3:26 pm
Answers: 352

Post by HunteR » Fri Mar 27, 2009 12:53 pm

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

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

Download: LINK

User avatar
Doris
Потребител
Потребител
Posts: 1102
Joined: Thu Jul 06, 2006 6:17 pm
Answers: 47

Post by Doris » Fri Mar 27, 2009 2:54 pm

Показват се заедно с таговете.

User avatar
HunteR
Tourist Defender
Tourist Defender
Posts: 3999
Joined: Sun May 28, 2006 3:26 pm
Answers: 352

Post by HunteR » Fri Mar 27, 2009 9:14 pm

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

Я дай скрийн, защото не те разбрах.
Как така се показват с таговете ?

User avatar
Doris
Потребител
Потребител
Posts: 1102
Joined: Thu Jul 06, 2006 6:17 pm
Answers: 47

Post by Doris » Fri Mar 27, 2009 10:38 pm

Това, като посочиш с мишката:
Image

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

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

User avatar
HunteR
Tourist Defender
Tourist Defender
Posts: 3999
Joined: Sun May 28, 2006 3:26 pm
Answers: 352

Post by HunteR » Sat Mar 28, 2009 12:08 am

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

Post Reply