Показать сообщение отдельно

Неьольшой совет для всех Cms креатеров
  #1  
Старый 19.05.2006, 09:21
Trinux
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
С нами: 11291306

Репутация: 569


По умолчанию Неьольшой совет для всех Cms креатеров

Многие из нас делают свои CMS системы или форумы или что-то в этом духе. У меня нет своей CMS и я не планирую ее написание. Я против двойников в сети, за уникальность. Но ресь сейчас не обо мне =)))

Хотел поделиться опытом отображения аватаров в комментах. Задача простая и на первый взгляд решается очень просто.
Начнем с того что НИКАКИХ НАХ БД для этого не нужно. Забудте. Писать адрес аватара пользователя и его наличие в БД, все равно что менять цвет текст на странице вот этим вот скриптом.
Проще кидать ее в диру, например, /img/avatars/ с id пользователя... например если зарегается чел с id=465 то его аватар будет по адресу /img/avatars/465.jpg к примеру.
При такой организации хранения аватаров мы не юзаем БД. Что дает нам большой плюс. Но столкнулся с другой проблемой...
Для проверки, есть ли аватар у пользователя, я раньше юзал file_exists(). Т.е. сначала проверяю, закачал ли пользователь аватар. Если нет - подставляю стандартный. file_exists() через какое-то время стало убивать файловую систему =) что и понятно =)) Тем более если аватаров очень много (рекомендуется разбивать диры на поддиры таким образом, чтобы в каждой дире было не более 5000 объектов). Нашел 2 решения, отказаться от file_exists().

1. Прописывать прямой путь до аватара пользователя, точнее путь, где он должен находится, если залит. nginx же, при отсутствии файла (мы вставляем тег <img> при отображении аватар, сооттветственно запрос идет на web сервер), подставляет стандартный. Делается это достаточно просто конфигом nginx`а.

2. Еще более простой и элегантный способ. Как и в прошлом - в <img src= прописывается путь до аватара, где он должен быть. В это же время CSS`ом задаем ледующие параметры к <img> с аватаром. Допустим, все аватары у нас идут с классом avatar (<img class='avatar'>)
PHP код:
.avatar{
width:100px;
height:100px;
display:block;
background:url('/img/noavatar.jpg'no-repeat;

Т.е. картинка с аватаром разширяется до размеров 100х100 и в бэк заливается картинка /img/noavatar.jpg. Если чел залил аватар - то поверх бэка появится его аватар, если же нет - аватар будет /img/noavatar.jpg

Вроде все =)
 
Ответить с цитированием