Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Фото галерея

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ТЭГИ!
ZeiZ
Отправлено: 23 Июня, 2010 - 01:38:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




Добрый день!
Надо сделать фото галерею.
Галерея должна содержать: название фото, свойства (опционально), alt для тэга <img> и ТЭГИ.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ЗАЧЁРКИВАЕМ ВСЁ!!!!


Мой вариант структуры таблицы БД:
1) table - gal
id
name
... (createtime, onoff, author, etc...)

2) table - gal_pics
id
gal_id
name
path (тут ВОПРОС: лучше сделать три поля с ссылками на тумбнейл, большой, оригинальный размеры фото, или же достаточно сделать путь к папке, а там 3 папки: orig, thumb, full?? по ид создавать паку не хочеться, хотя??? почему бы и нет???)
size, h_size, v_size, type (свойства изображения. ВОПРОС: лучше при загрузки добавлять свойства, или на лету брать инфу из файла-изображения?)
tag (сдесь вообще не знаю как лучше? писать через разделитель (запятая+пробел или как-то иначе?)
.... (updatetime, author, onoff, etc....)

Соответственно 2 вопроса по структкре и вопрос по тэгам:
Как тэги записывать ЛУЧШЕ в БД и потом работать с ними???

Ниразу не работал с ТЭГАМИ.... Однако


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ЗАЧЁРКИВАЕМ ВСЁ!!!!


Коллективным умом решили делать в 4 таблицы:

1) g_name:
id
name
path
...

2) g_pic:
id
g_nid (на таблицу g_name)
name
alt
...

3) g_pic_taging
id
g_pid (на таблицу g_pic)
g_tag

4) g_tag
id
tag
==========

т.е.: 1) создаётся галерея (g_name),
генерируется случайная папка (path).
2) Заполяются ей (галереи UP) картинки (g_pic),
приписываются к каждой тэги из готовых (g_tag) или из новых (+g_tag)
3) ....

ВОПРОС: Всё равно криво будет с добавлением тэгов! это отдельная таблица, регулярой я выну тэги из инпут-пост-формы, по одному занесу в таблицу g_tag, в таблицу (g_pic_taging) пропишу id'шники, но если вдруг, что ручками править, это будет не айс.
Как же галереи делаются?

З.Ы. Сделаю, унифицирую, выложу.... Спасибо

(Отредактировано автором: 23 Июня, 2010 - 03:13:45)

 
 Top
Uchkuma
Отправлено: 23 Июня, 2010 - 09:26:22
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Бррр.. как-то все сложно. Зачем привязывать теги по id? Чтобы редактировать существующие теги и они менялись в картинках? Но зачем???
Я бы сделал проще. 3 таблицы:
1. галереи
2. картинки (с полем "тэги")
3. тэги (таблица с тегами нужна, чтобы в дальнейшем выбирать из существующих, иначе и она нафиг...)
При добавлении новой картинки с тэгами, бьем их по запятой (explode(',', $_POST['tags']));
if(3. тэги) заносим в таблицу с тэгами;
Приводим тэги картинки к нужному виду с помощью implode() и заносим получившуюся строку в поле "тэги".
Потом, для поиска картинок по тэгам используем LIKE в mySQL запрсе.

У меня подобные вещи реализованы следующим образом.
Сохранение:
PHP:
скопировать код в буфер обмена
  1. $tags_string = '';
  2. if(!empty($_POST['tags'])){
  3. $tags = $_POST['tags'];
  4. $tags_array = explode(',', $tags);
  5. $sep = '|';
  6. foreach($tags_array as $tag){
  7. $tag = trim($tag);
  8. if($tag=='') continue;
  9. $tags_string .= $sep.$tag.'|';
  10. $sep = '';
  11. }
  12. }
  13. // $tags_string будет иметь вид |тэг1|тэг2|тэг3|
далее $tags_string заносим в нужное поле

Выборка из базы:
PHP:
скопировать код в буфер обмена
  1. $tag = trim($_GET['tag']);
  2. $res = mysql_query('SELECT * FROM images WHERE tags LIKE "%|'.$tag.'|%"');


А по поводу путей к картинке - путь, конечно же, должен быть один! А скрипт выводящий тумбочки должен сам определять, где их искать.
У меня сделано так:
/files/images - папка с картинками
/files/images/thumb - папка с тумбочками
причем в папке thumb у меня лежат тумбочки разных размеров, например:
/files/images/image.jpg - оригинальный файл
/files/images/thumbs/image.jpg.m ini - уменьшенная копия
/files/images/thumbs/image.jpg.t mb - тумбочка
(хм.. чудо парсер вставил пробелы в mini и tmb.)

Все тумбочки создаются скриптом на лету и кешируются в thumbs. В последствии, если соответствующий файл тумбочки будет найден в этой папке, то он будет выводиться в браузер напрямую. Если же нет - то сгенерируется тумбочка и сохранится в папке thumbs.

(Отредактировано автором: 23 Июня, 2010 - 09:55:48)

 
 Top
ZeiZ
Отправлено: 23 Июня, 2010 - 09:43:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




Uchkuma Всё супер, но вот LIKE в мускуле очень затратная конструкция...
Поэтоиу и думая создать связующую таблицу, а не поле, которое потом експлодить (,+пробел)

И спрашиваю Вас, не как реализовать, а как сделать наименее ресурсоёмко...
скажем, как сделано в вконтакте (там конечно не тэги а мапа стоит на изображениях), но суть ведь одна. Вряд ли они к каждой фотке, просмотренной, цепляют несколько десятков линков на LIKE запросы)
 
 Top
Uchkuma
Отправлено: 23 Июня, 2010 - 09:52:41
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




ZeiZ пишет:
скажем, как сделано в вконтакте

Количество изображений в базе сравнимо с контактом? :)
 
 Top
ZeiZ
Отправлено: 23 Июня, 2010 - 12:52:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




нет, Радость
просто не хочу быдлокодить.
Лёгкий и универсальный вариант.
 
 Top
JustUserR
Отправлено: 23 Июня, 2010 - 14:05:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
Uchkuma Всё супер, но вот LIKE в мускуле очень затратная конструкция...
Поэтоиу и думая создать связующую таблицу, а не поле, которое потом експлодить (,+пробел)
Самыми затратными являюется не конструкции выолняемые внутри одного SQL-запроса - а те при которых происходит определенный SQL-запрос который передается в PHP-скрипт для дальшейшей обработки - и на основе которого строится очередной следущий SQL-запрос В таком случае недостаток заключается в излишней передаче данных между сервером приложений и БД


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ZeiZ
Отправлено: 23 Июня, 2010 - 14:15:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




всё, пишу в 2 таблицы (имя галереи и собственно картинки), и выбирать буду LIKE .

Спасибо. Если будет тормозить, переделаю. Ниндзя

А стоит в базу заносить размеры и вес картинки, или лучше налету getimagesize'ом????

(Отредактировано автором: 23 Июня, 2010 - 14:22:00)

 
 Top
JustUserR
Отправлено: 23 Июня, 2010 - 14:18:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
Всё, пишу в 2 таблицы, и выбирать буду LIKE .
Спасибо. Если будет тормозить, переделаю
Вы главное формируйте условия в SQL-запросе таким образом чтобы в начале оператора короткого замыкания использоваться самый быстрый оператор сравнения - то есть сначала вы проверяете какой-то из индексированных ключей и если он не прошел то LIKE уже проверяться не будет


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ZeiZ
Отправлено: 24 Июня, 2010 - 15:38:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




JustUserR важное замечание, спасибо.
 
 Top
JustUserR
Отправлено: 24 Июня, 2010 - 16:28:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ZeiZ пишет:
JustUserR важное замечание, спасибо.
Пожалуйста! Такой подход часто используется при решении ресурсоемких задач - к примеру если определенный поиск в любом случае будет составлять определенную сложность - то вариантом решения вялется сокращение зоны поиска В общем случае это похоже на редукцию NP-полный задач


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB