php галерия

eddy

Registered
Намерих един код за php галерия със странициране и под категори.
Кода работи по следния начин:

- Имам папак /pics/ , от тази папка кода взима снимки.
- Под категория във /pics/ създавам папка /cat/ примерно.Кода автоматично без да му добавям редове почва да възприема /cat/ като категория и е извежда.

ОБАЧЕ,мойте категори съм ги направил на български вместо /cat/ е /кат/
и от там се чудя - Сега на мен не ми прави грешка ама ако го кача на хост и при потребителите почне да дава грешка.

За това търся начин категориите да ги задавам през кода като

<a href="pic/latinichar>Категория</a>

и от тук на татък кода вече сам да си избира снимките и така.

PHP:
<?php
error_reporting(E_ALL^E_NOTICE);
$pics_folder = "pics"; 
$max_width = 180;
$max_height = 180;
$pics_per_page = 9;
$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('/[\/]+/', '/', preg_replace('/^[\/]+/', '', $pics_folder).'/');

function all_images()
{
    global $pics_folder, $pics_ex;
    $folders = 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 != '..')
                {
                    $ext = explode(".", $file);
$ext = strtolower(end($ext));
if (is_file($folder.$file) && in_array($ext, $pics_ex))
                    {
                        $out_files[] = $folder.$file;
                    }
                    elseif (is_dir($folder.$file))
                    {
                        $folders[] = $folder.$file.'/';
                    }
                }
            }
        }
    }
    return $out_files;
}

$all_images = all_images();

$category = false;
if (preg_match('/^[^\/\\\:\*\?\"\<\>\|]+((->)[^\/\\\:\*\?\"\<\>\|]+)*$/i', $_GET['kat']))
{
    $category = (is_dir($pics_folder.str_replace('->', '/', $_GET['kat']))) ? str_replace('->', '\/', $_GET['kat']) : false;
}
    
$out_images = array();
$out_images1 = array();
foreach ($all_images as $image)
{
    $raz = explode("/", $image);
    for ($n=1;$n<=(substr_count($pics_folder, "/"));$n++) array_shift($raz);
    array_pop($raz);
    $out_images1[] = $image;    
    if ($category && !preg_match("/^$category/", implode("/", $raz))) continue;
    $out_images[] = $image;
	 
}



echo"<table  border='0' cellpadding='20px' cellspacing='0'><tr><td>";

$title=Array();
$k=0;
$br=count($out_images1);
$masiv = @array_chunk($out_images1, $br, true);
foreach ($masiv[0] as $pic)
{
    $razp = explode("/", $pic);
    for ($n=1;$n<=(substr_count($pics_folder, "/"));$n++) array_shift($razp);
    array_pop($razp);

    $kat = array();
    $kat[] = '<a href="?" class="f"></a>';
    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>';
    }
    
$title[$k]="<div id='k'><br >".implode($kat)."</div>";

$k++;
	}
echo "<h3></h3><br><b>".$title[0];	
for ($k=1;$k<count($title);$k++){
$savp=0;
for ($m=0;$m<$k;$m++){
if($title[$m]==$title[$k]){
$savp=1;
}
}
if($savp==0){echo  $title[$k];}
}

echo"</b></td><td>";
if($_GET['kat']){
echo "<h3 class='m'>".$_GET['kat']."</h3>";
}
else{echo "<h3 class='m'></h3>";}
$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 "<span id=\"gallery\"><table border=\"0\">
<tr>\n";
foreach ($masiv[($page - 1)] as $pic)
{
    $resize = resize($pic);
    $razp = explode("/", $pic);
    for ($n=1;$n<=(substr_count($pics_folder, "/"));$n++) array_shift($razp);
    array_pop($razp);
 
    $kat = array();
    $kat[] = '<a href="?"></a>';
    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 align='center'><div id='picviewb' style='height: ".$resize['height']."; width: ".$resize['width'].";'><a href=\"{$pic}\" title=\"{$pic}\"><img src=\"{$pic}\" width=\"".$resize['width']."\" height=\"".$resize['height']."\" border=\"0\" id=\"picview1b\"></a></div></td>\n";
    if ($red == floor(sqrt($pics_per_page))) { $red = 1; echo "</tr><tr>\n"; } else { $red++; }
}
echo "</tr>
</table></span>";

echo "<div id='n'>";
for ($i=1;$i<=$stranici;$i++) {
    if ($page != $i) {
        echo "<a href=\"?page=$i".(($category) ? '&kat='.$_GET['kat'] : '')."\">$i</a> ";
    } else {
        echo "<span class='f'>$i </span>";
    }
}
echo"</div>";


echo"</td>";
echo"</tr></table>";
?>
 
Добре да ви улесня става дума за тези редове:

PHP:
$url = array();
        for($i2=0;$i2<=$i;$i2++)
        {
            $url[] = $razp[$i2];
        }
        $kat[] = '<a href="?kat='.implode("->", $url).'">'.$razp[$i].'</a>';
    }
    
$title[$k]="<div id='k'><br >".implode($kat)."</div>";

Тука трябва да се направи да не ползва името на папката за категория.
 

Back
Горе