|
|
|
| Здравствуйте!
Прошу помощи!
Есть фотогалерея с постраничной навигацией, как к фотографиям добавить комментарий? В каком месте и какой код вставить?
Файл с комментариями – base.txt:
001.jpg | Фото №1
002.jpg | Фото№2
|
И т.д.
<meta name="zagol" content="Примеры">
<?
$st = $_GET ['st'];
include("./resizeconfig.php");
$cat = "image";
$max=12;// количество на странице
$stro= 3; // количество в ряд
if (is_dir($cat)) //Проверяем, является ли директорией
{
if ($dir = opendir($cat)) //Проверяем, была ли открыта директория
{
while ($file = readdir($dir)) //Сканируем директорию
{
if ($file != "." && $file != ".." && preg_match("/.jpg/i", $file)) //Убираем лишние элементы
{
$images[]=$file; //Выводим спиоск в браузер
}
}
closedir($dir); //Закрываем директорию
rsort ($images);
}
}
$amount=count($images);
$pages = ceil($amount/$max); //И округляем в большую сторону
$_p= $_GET['page']; //Принимаем входящую переменную, которая указывает номер страницы
if (!$page) { $_p=1;}
//Создаем вспомогательные переменные для навигации
if(!$_p or $_p =='') { //Если переменная $_p не задана
$nmin = 0; //Нижний предел
$nmax=$max-1; //Верхний предел
}
else {
$nmin = ($_p*$max)-$max ;
$nmax=($max*$_p)-1;
}
?>
<table width="100%" align="center"><tr><td align="center" style="padding: 10px;" class=galer colspan="<?echo $stro;?>" valign=middle>
<?
for($n=1;$n<=$pages;$n++) {
if($_p != $n) {echo '<a href="?st='.$st.'&page='.$n.'">'.$n.'</a> ';}
if($_p == $n) {echo ' '.$n.' ';}
}
?>
</td></tr>
<?
//Информатор
for($i=$nmin;$i<=$nmax;$i++)
{
if($images[$i])
{
//if ($images[$i]==$file_name) { echo $photo_name; }
echo '<td valign=middle align=center><a href="'.$cat.'/'.$images[$i].'" rel="lightbox" >';
echo "<img alt=$alt style=\"margin: 5px;\" src=\"resizeimage.php?cat=$cat&image=$images[$i]\"></a>";
echo '</td>';
}
$counter ++; // счетчик проверки изображений в ряд
if($counter == $stro )
{
echo "</tr>";
$counter = 0;
}
}
?>
</table>
|
По форуму поискал то что нашел - http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=11256, не помогло... | |
|
|
|
|
|
|
|
для: mmodem
(21.08.2009 в 23:31)
| | > В каком месте и какой код вставить?
выводится картинка там где
echo "<img alt=$alt style=\"margin: 5px;\" src=\"resizeimage.php?cat=$cat&image=$images[$i]\"></a>";
echo '</td>';
какой код зависит от того как Вы до этого обработаете текст из base.txt
, который получите возможно так $massiv = file( 'base.txt');
или так $massiv = file($cat.'/base.txt');
, как найдёте комментарии из файла, которые относятся именно к именам из массива $images
пробуйте делать , проверяйте переменные ,
например так
echo '<pre>';
var_dump($images);
и спрашивайте что конкретно непонимаете или не можете найти
// если в файле абсолютно все имена картинок , можно совсем убрать цикл с readdir()
, а сделать цикл по массиву из этого файла, убьётся сразу два зайца | |
|
|
|
|
|
|
|
для: heed
(22.08.2009 в 04:50)
| | Не могу сообразить как сравнить имя файла фото $images[$i] с его именем в base.txt и соответственно вывести описание.
Я так понимаю, что нужно 1) найти имя фото в base.txt, 2) определить номер строки, 3) отобразить колонку №2 данной строки.
Вроде так. Но не получается... | |
|
|
|
|
|
|
|
для: mmodem
(22.08.2009 в 11:26)
| | Нужно в форме, загружающей фото на сервер, добавить поле для комментария к ней, и ложить это поле в туже таблицу, в которой хранится и имя загруженного фото, как связанное с ним, а не думать о проблемах созданных самим собой. | |
|
|
|
|
|
|
|
для: mmodem
(22.08.2009 в 11:26)
| | array_search -- Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в случае удачи
Описание
mixed array_search ( mixed needle, array haystack [, bool strict] )
Ищет в haystack значение needle и возвращает ключ, если таковое присутствует в массиве, FALSE в противном случае.
Замечание: Если needle является строкой, производится регистро-зависимое сравнение.
Если вы передадите значение TRUE в качестве необязательного третьего параметра strict, функция array_search() также проверит тип needle в массиве haystack.
Если needle присутствует в haystack более одного раза, будет возвращён первый найденный ключ. Для того, чтобы возвратить ключи для всех найденных значений, используйте функцию array_keys() с необязательным параметром search_value.
Пример 1. Пример использования array_search()
<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 0x000000, 3 => 'green', 4 => 'red');
$key = array_search('red', $array); // $key = 1;
?>
|
Один из вариантов
>как сравнить имя файла фото $images[$i] с его именем в base.txt
Всё содержимое base.txt уже должно быть не в файле , а в переменной (например массив, лучше два массива )
(См. пробуйте делать , проверяйте переменные из предидущего ответа)
Как Вам можно что-то обьяснять , если вы не знаете и не желаете знать даже элементарные вещи.
не читайте комментарии читайте содержимое переменных
Из вашего скрипта :
$images[]=$file; //Выводим спиоск в браузер
| Этой строчкой какраз ничего не выводится, а добавляется в массив $images имя файла.
А вы даже поленились посмотреть содержимое $images после цикла чтения имён файлов
( while () { .... } это цикл)
Вы хотите изучить php, или просто кто-нибудь Вам написал галерею ?, причём совсем другую галерею ,потомучто легче сделать всё с нуля , чем переписывать три четверти этого , чтобы сделать почти нормально.
Если первое , читайте например это http://softtime.ru/bookphp/ про массивы ,
, скачивайте документацию и/или пользуйтесь поиском, пробуйте и экспериментируйте
Если второе, найдите и скачайте готовый скрипт.
Вам предложили самый оптимальный вариант работы с этим файлом, держать все имена вместе с комментарием , в файле ,
и читать не дирректорию , а этот файл, лучше в таком формате
1.jpg|первая картинка
2.jpg|
3.jpg|третья картинка
| и дописывайте сюда строку при добавлении картинки,
например функциями fopen(..., 'a') fwrite()
и для всего этого понадобятся только file() explode() любой цикл (в случае работы с файлом в таком формате как вы привели понадобится trim() для удаления пробелов)
1.Выигрыш в скорости ,без необходимости читать дирректорию каждый раз,
2.простота сопоставления комментария имени картинки, без необходимости чтото искать и сравнивать
Что Вам и нужно
//upd
кажется наговорил много лишнего ,)
бывает | |
|
|
|
|
|
|
|
для: heed
(22.08.2009 в 16:25)
| | Спасибо за совет(ы), постараюсь разобраться... | |
|
|
|
|
|
|
|
для: mmodem
(22.08.2009 в 22:11)
| | может пригодится то чем можно перезаписать файл
, впринципе то-же самое с поиском
, но это ещё больше замедляет и так медленное чтение каталога
<?php
$cat = 'image'; #
$list = $cat .'/base.txt'; # файл
$outlist = $cat .'/base2.txt'; # новый файл
$temp = array(); # здесь будет текст нового файла
###################################################
##### таким можно записать новый файл из старого и все картинки из каталога
if (!is_file($list)) exit($list .' not found'."\n");
$content_old = file_get_contents($list); # старый файл со списком
# echo '<pre>'; var_dump($content_old); exit;
if (!is_dir($cat)) exit($cat .'is not directory'."\n");
// только существующая дирректория в $cat
if (!($dir = opendir($cat))) exit('could not open' ."\n"); //открыто
while ($file = readdir($dir)) //получение имён файлов в цикле
{
if ($file{0} == "." || !preg_match("/\.jpg$/i", $file))
continue;
// имя не начинается с точки, и .jpg
if( preg_match('#^'. $file .'\s*\|\s*(.*)#m', $content_old,$out))
$temp[] = $file .'|'. $out[1] ."\n";
else
$temp[] = $file .'|'. "\n";
}
closedir($dir); //Закрыто
sort($temp); // сортировка
# echo '<h4>на выходе массив</h4><pre>'; print_r($temp); exit;
file_put_contents($outlist, $temp); #запись в новый файл
################################################
################################################
### примерно так-же будут получаться картинки с комментариями
### в файле который получится вместо Вашего файла показываещего картинки
$images = file($outlist);// это вместо цикла с readdir()
rsort($images);
$amount=count($images);
# ... дальше всё из того кода
# только каждый елемент массива нужно разбивать по |
for($i=0;$i<3;$i++) {
list($img,$cmt) = explode('|', $images[$i]);# так например
echo '<a href="'.$cat.'/'.$img.'" rel="lightbox" >'
.'<img alt="XXXXXX" src="resizeimage.php?cat='
. $cat .'&image='. $img .'"></a>'
. 'сомментарий: '. $cmt . "<br/>\n";
}
?>
| можно запустить всё это как есть
, но файл base2.txt создастся только если есть право на запись в папку image | |
|
|
|
|