Intellect Board — cистема управления сайтом

Построение сайта на основе форума

Intellect Board — cистема управления сайтом »   Народные рецепты »   Фотогалерея
RSS

Фотогалерея

Текущий рейтинг темы: Нет
Выводить сообщения
Правила раздела

<<Назад  Вперед>>Страницы: 1 2
Модераторы: aerograf, wsx
Печать
 
Gram
Администратор

Gram
Откуда: Нижний Новгород
Всего сообщений: 1011
Рейтинг пользователя: 38


Ссылка


Дата регистрации на форуме:
23 июля 2003
Я еще давным давно озаботился тем фактом, что в фотогалереи нет автоматического ресайза большой картинки по высоте, а есть только по ширине. Как оказалось на практике этого недостаточно и в фотоглалереи оказывались фотки, которые не умещались на экран монитора полностьи, приходилось в ручную масштабировать страницу в браузере. В итоге я добавил авторесайз и по высоте.

Выкладываю хак!

Открываем файл photos.php (в корне форума) и находим блок начиная со 189 строчки:


if ($GLOBALS['opt_photo_size_x'] && $sizex>$GLOBALS['opt_photo_size_x']) {
    $photo=imagecreatetruecolor($GLOBALS['opt_photo_size_x'],floor($GLOBALS['opt_photo_size_x']/$coeff));
    if ($GLOBALS['opt_GD2']) imagecopyresampled($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x'],floor($GLOBALS['opt_photo_size_x']/$coeff),$sizex,$sizey);
    else imagecopyresized($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x'],$GLOBALS['opt_photo_size_x']/$coeff,$sizex,$sizey);
    $tmpname=$GLOBALS['opt_dir']."/photos/$tid.jpg";
    imagejpeg($photo,$tmpname,$GLOBALS['opt_photo_qlty']);
  }


И заменяем его на блок


if ($GLOBALS['opt_photo_size_x'] && $sizex >= $sizey && $sizex>$GLOBALS['opt_photo_size_x']) {
    $photo=imagecreatetruecolor($GLOBALS['opt_photo_size_x'],floor($GLOBALS['opt_photo_size_x']/$coeff));
    if ($GLOBALS['opt_GD2']) imagecopyresampled($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x'],floor($GLOBALS['opt_photo_size_x']/$coeff),$sizex,$sizey);
    else imagecopyresized($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x'],$GLOBALS['opt_photo_size_x']/$coeff,$sizex,$sizey);
    $tmpname=$GLOBALS['opt_dir']."/photos/$tid.jpg";
    imagejpeg($photo,$tmpname,$GLOBALS['opt_photo_qlty']);
  } elseif ($GLOBALS['opt_photo_size_x'] && $sizey >= $sizex && $sizey>$GLOBALS['opt_photo_size_x']) {
    $photo=imagecreatetruecolor(floor($GLOBALS['opt_photo_size_x']*$coeff),$GLOBALS['opt_photo_size_x']);
    if ($GLOBALS['opt_GD2']) imagecopyresampled($photo,$fullimg,0,0,0,0,floor($GLOBALS['opt_photo_size_x']*$coeff),$GLOBALS['opt_photo_size_x'],$sizex,$sizey);
    else imagecopyresized($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x']*$coeff,$GLOBALS['opt_photo_size_x'],$sizex,$sizey);
    $tmpname=$GLOBALS['opt_dir']."/photos/$tid.jpg";
    imagejpeg($photo,$tmpname,$GLOBALS['opt_photo_qlty']);
  }


Дальше находим функцию do_edit() (строки 236-287) и заменяем её на такую:


function do_edit() {
  if ($GLOBALS['inuserlevel']<$GLOBALS['inforum']['f_lmoderate'] && $GLOBALS['intopic']['t_author']!=$GLOBALS['inuserid'] && $GLOBALS['inuserlevel']<$GLOBALS['inforum']['f_ledit']) error(MSG_e_t_norights);

  $forum=$GLOBALS['forum'];
  $tid=$GLOBALS['topic'];
  global $link;

  check_hurl();
  $sqldata = build_sql("t_");
  $sql = "UPDATE ".$GLOBALS['DBprefix']."Topic SET $sqldata WHERE t_id=".$GLOBALS['topic'];
  $res =&db_query($sql,$link);

  if (!$GLOBALS['opt_photos_line']) $GLOBALS['opt_photos_line']=5;
  if (!$GLOBALS['opt_photo_thumb_y']) $GLOBALS['opt_photo_thumb_y']=100;
  if (!$GLOBALS['opt_thumb_qlty']) $GLOBALS['opt_thumb_qlty']=70;
  if (!$GLOBALS['opt_photo_qlty']) $GLOBALS['opt_photo_qlty']=70;
  
  if (is_uploaded_file($_FILES['photo']['tmp_name'])) {
    if (!$GLOBALS['opt_photo_maxsize']) $GLOBALS['opt_photo_maxsize']=$GLOBALS['opt_maxfileattach'];
    if ($_FILES['photo']['size']>$GLOBALS['opt_photo_maxsize']) error(MSG_e_ph_toolarge);
    $fh=fopen($_FILES['photo']['tmp_name'],"rb");
    $buffer=fread($fh,$_FILES['photo']['size']);
    fclose($fh);

    $fullimg=imagecreatefromstring($buffer);
    if (!$fullimg) error(MSG_e_ph_badfile);
    $sizey=imagesy($fullimg);
    $sizex=imagesx($fullimg);
    $coeff=$sizex/$sizey;
  
    if (!$GLOBALS['opt_photo_maxsize']) $GLOBALS['opt_photo_maxsize']=$GLOBALS['opt_maxfileattach'];
    if ($_FILES['photo']['size']>$GLOBALS['opt_photo_maxsize']) error(MSG_e_ph_toolarge);
    $thumb=imagecreatetruecolor(floor($GLOBALS['opt_photo_thumb_y']*$coeff),$GLOBALS['opt_photo_thumb_y']);
    if ($GLOBALS['opt_GD2']) imagecopyresampled($thumb,$fullimg,0,0,0,0,$GLOBALS['opt_photo_thumb_y']*$coeff,$GLOBALS['opt_photo_thumb_y'],$sizex,$sizey);
    else imagecopyresized($thumb,$fullimg,0,0,0,0,floor($GLOBALS['opt_photo_thumb_y']*$coeff),$GLOBALS['opt_photo_thumb_y'],$sizex,$sizey);
    $tmpname=$GLOBALS['opt_dir']."/photos/previews/$tid.jpg";
    if (file_exists($tmpname)) unlink($tmpname);
    imagejpeg($thumb,$tmpname,$GLOBALS['opt_thumb_qlty']);

    if ($GLOBALS['opt_photo_size_x'] && $sizex >= $sizey && $sizex>$GLOBALS['opt_photo_size_x']) {
      $photo=imagecreatetruecolor($GLOBALS['opt_photo_size_x'],floor($GLOBALS['opt_photo_size_x']/$coeff));
      if ($GLOBALS['opt_GD2']) imagecopyresampled($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x'],floor($GLOBALS['opt_photo_size_x']/$coeff),$sizex,$sizey);
      else imagecopyresized($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x'],$GLOBALS['opt_photo_size_x']/$coeff,$sizex,$sizey);
      $tmpname=$GLOBALS['opt_dir']."/photos/$tid.jpg";
      if (file_exists($tmpname)) unlink($tmpname);
      imagejpeg($photo,$tmpname,$GLOBALS['opt_photo_qlty']);
    } elseif ($GLOBALS['opt_photo_size_x'] && $sizey >= $sizex && $sizey>$GLOBALS['opt_photo_size_x']) {
      $photo=imagecreatetruecolor(floor($GLOBALS['opt_photo_size_x']*$coeff),$GLOBALS['opt_photo_size_x']);
      if ($GLOBALS['opt_GD2']) imagecopyresampled($photo,$fullimg,0,0,0,0,floor($GLOBALS['opt_photo_size_x']*$coeff),$GLOBALS['opt_photo_size_x'],$sizex,$sizey);
      else imagecopyresized($photo,$fullimg,0,0,0,0,$GLOBALS['opt_photo_size_x']*$coeff,$GLOBALS['opt_photo_size_x'],$sizex,$sizey);
      $tmpname=$GLOBALS['opt_dir']."/photos/$tid.jpg";
      if (file_exists($tmpname)) unlink($tmpname);
      imagejpeg($photo,$tmpname,$GLOBALS['opt_photo_qlty']);
    }
    else move_uploaded_file($_FILES['photo']['tmp_name'],$GLOBALS['opt_dir']."/photos/$tid.jpg");
  
    imagedestroy($fullimg);
    if ($GLOBALS['opt_photo_size_x'] && $sizex>$GLOBALS['opt_photo_size_x']) imagedestroy($photo);
    imagedestroy($thumb);
  }

  $sql = "SELECT MIN(p_id) FROM ".$GLOBALS['DBprefix']."Post WHERE p_tid=".$GLOBALS['topic'];
  $res =&db_query($sql,$link);
  list($pid)=db_fetch_row($res);

  $sqldata = build_sql("p_");
  $sqldata.= check_post_params();
  $sql = "UPDATE ".$GLOBALS['DBprefix']."Post SET $sqldata WHERE p_id=\"$pid\" AND p_tid=".$GLOBALS['topic'];
  $res =&db_query($sql,$link);

  topic_message(MSG_ph_saved,1);
}


Внимание! В данный хак входит устранение ошибки с невозможностью замены фото (в дальнейшем исправление этой ошибки будет включено в дистрибутив)

Для тех, кто не хочет возиться с хаками, приложил файлик photos.php (класть в корень).

Ну и для порядка можно сменить языковую константу в файле langs\ru\admin.php

define('MSG_opt_photo_size_x','Максимальный линейный размер фотографии при ее просмотре');

Конечно, можно было предусмотреть отдельную величину и для высоты, но я посчитал, что хватит одной величины как для максимальной ширины, так и для максимальной высоты.

Прикрепленный файл (photos.php, 16705 байт, скачан: 646 раз)
Uri
Долгожитель форума

Uri
Всего сообщений: 571
Рейтинг пользователя: 4


Ссылка


Дата регистрации на форуме:
25 окт. 2005

Gram написал:
[q]
...Для тех, кто не хочет возиться ... photos.php....
[/q]
Т.е. не для самых квалифицированных пользователей. А для таких неплохо бы указать куда класть этот самый photos.php. Почему-то весьма часто при выкладывании патчей "забывают" указывать куда класть файлы.
Gram
Администратор

Gram
Откуда: Нижний Новгород
Всего сообщений: 1011
Рейтинг пользователя: 38


Ссылка


Дата регистрации на форуме:
23 июля 2003

Uri написал:
[q]
А для таких неплохо бы указать куда класть этот самый photos.php. Почему-то весьма часто при выкладывании патчей "забывают" указывать куда класть файлы.
[/q]

Прошу прощения. Посчитал, что, если в начале поста речь шла о файле корня, то уж в конце местополжение файла всяко не изменится \":)\" Исправился.
Gram
Администратор

Gram
Откуда: Нижний Новгород
Всего сообщений: 1011
Рейтинг пользователя: 38


Ссылка


Дата регистрации на форуме:
23 июля 2003
А заодно и обновил файл и хак — в ходе промышленной эксплуатации выявились небольшие особенности работы, которые я поспешил исправить. Just do it :)
Gram
Администратор

Gram
Откуда: Нижний Новгород
Всего сообщений: 1011
Рейтинг пользователя: 38


Ссылка


Дата регистрации на форуме:
23 июля 2003
Да, если кто не хочет ставить хак, а правка фотографии крайне важна, вот вам правильная функция do_edit (её нужно заменить в оригинальном файле photos.php):

http://gram.nnov.ru/php/do_edit.txt
gedeon
Почетный участник


Всего сообщений: 119
Рейтинг пользователя: 2


Ссылка


Дата регистрации на форуме:
18 фев. 2007
Вопрос: а если я хочу добавить в фотогалерею фотографии, которые уже есть в других разделах?
Повторно загружать на сервер, теперь уже с компьютера?

Попробовал использовать панель для редактирования - там же есть вставка изображения, думал щас укажу URL и фотка тупо встанет, ан нет - выдает ошибку и ругается, что нет фотографии.

Может предусмотреть загрузку внешних изображений ( фотографий ) из других разделов, предусмотрев возможность прописать путь к ним?
gedeon
Почетный участник


Всего сообщений: 119
Рейтинг пользователя: 2


Ссылка


Дата регистрации на форуме:
18 фев. 2007
Повторяю свою просьбу - можно ли добавлять в фотогалерею фотографии с других ресурсов, просто указывая URL картинки?

Подскажите, что в коде поправить. Ведь это же явно не трудно сделать - просто предусмотреть возможность отключить функцию nophoto ( извините, если неправильно что-то называю), чтобы она не блокировала загрузку через URL.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Нет, это сделать несколько сложнее, чем может показаться на первый взгляд — там с привязкой таблиц есть сложности, да и с preview как быть?

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
Gram
Администратор

Gram
Откуда: Нижний Новгород
Всего сообщений: 1011
Рейтинг пользователя: 38


Ссылка


Дата регистрации на форуме:
23 июля 2003

XXXX Pro написал:
[q]
Нет, это сделать несколько сложнее, чем может показаться на первый взгляд — там с привязкой таблиц есть сложности, да и с preview как быть?
[/q]

Да всё абсолютно так же. Удаленная картинка сохраняется на сервак с форумом и аналогично делается превьюшка. На многих порталах так и сделано - загрузить картинку на сервер можно двумя поутями - либо со своего компьютера либо с URL'a - и второй вариант иногда оказывается удобным...
Yuras
Долгожитель форума


Всего сообщений: 382
Рейтинг пользователя: 11


Ссылка


Дата регистрации на форуме:
15 мар. 2007
а у меня возникла необходимость одно фото соотнести к двум разделам фотогалереи. Возможно ли такое, чтобы при загрузке фото можно было указать к каким разделам фотогалереи относится?

То же самое про статьи и новости. можно ли один материал чтобы позиционировался в разных разделах?
<<Назад  Вперед>>Страницы: 1 2
Модераторы: aerograf, wsx
Печать
Intellect Board — cистема управления сайтом »   Народные рецепты »   Фотогалерея
RSS

1 посетитель просмотрел эту тему за последние 10 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
Ограничение доступа
не отображаются разделы
Архив версий
Установка стиля на Intellect Board 2.22
Завершилась работа над новой версией 3.00

Самые активные 5 тем RSS


Время выполнения скрипта: 0.0960. Количество выполненных запросов: 17, время выполнения запросов 0.0000
Creative Commons License Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru Valid HTML 4.01 Transitional Valid CSS!