Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подпись к фоткам из текстового файла. Как?
 
 автор: mmodem   (21.08.2009 в 23:31)   письмо автору
 
 

Здравствуйте!
Прошу помощи!
Есть фотогалерея с постраничной навигацией, как к фотографиям добавить комментарий? В каком месте и какой код вставить?
Файл с комментариями – base.txt:
001.jpg | Фото №1
002.jpg | Фото№2

И т.д.


<meta name="zagol" content="Примеры">
<?
$st 
$_GET ['st'];
include(
"./resizeconfig.php");
$cat "image";
$max=12;// количество на странице
$stro3// количество в ряд

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>&nbsp;';}
if(
$_p == $n) {echo '&nbsp;'.$n.'&nbsp;&nbsp;';}
}
?>
</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, не помогло...

  Ответить  
 
 автор: heed   (22.08.2009 в 04:50)   письмо автору
 
   для: 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()
, а сделать цикл по массиву из этого файла, убьётся сразу два зайца

  Ответить  
 
 автор: mmodem   (22.08.2009 в 11:26)   письмо автору
 
   для: heed   (22.08.2009 в 04:50)
 

Не могу сообразить как сравнить имя файла фото $images[$i] с его именем в base.txt и соответственно вывести описание.
Я так понимаю, что нужно 1) найти имя фото в base.txt, 2) определить номер строки, 3) отобразить колонку №2 данной строки.
Вроде так. Но не получается...

  Ответить  
 
 автор: sim5   (22.08.2009 в 12:35)   письмо автору
 
   для: mmodem   (22.08.2009 в 11:26)
 

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

  Ответить  
 
 автор: heed   (22.08.2009 в 16:25)   письмо автору
 
   для: 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(=> 'blue'=> 'red'=> 0x000000=> 'green'=> '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
кажется наговорил много лишнего ,)
бывает

  Ответить  
 
 автор: mmodem   (22.08.2009 в 22:11)   письмо автору
 
   для: heed   (22.08.2009 в 16:25)
 

Спасибо за совет(ы), постараюсь разобраться...

  Ответить  
 
 автор: heed   (23.08.2009 в 00:22)   письмо автору
 
   для: 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 .'&amp;image='$img .'"></a>' 
        
'сомментарий: '.  $cmt "<br/>\n";
         }

?>
можно запустить всё это как есть
, но файл base2.txt создастся только если есть право на запись в папку image

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования