Человекопонятное имя файлов картинок в фотогалерее

+33
3K
чтобы имена файлов были
  1. images/photos/medium/krasivaya-kartinka-vd23sdf.jpg
вместо
  1. images/photos/medium/b666a879da9368dc1ac48a6bd686c389.jpg
что, говорят, хорошо для сео.

решение простое: в файле
/core/classes/upload_photo.class.php в функции
  1. public function uploadPhoto($old_file=''){
исправьте строку (в коде ниже она закомментирована):
  1.  
  2. //$this->filename = $this->filename ? $this->filename : md5(time().$realfile).'.'.$ext;
  3. $this->filename = $this->filename ? $this->filename : cmsCore::strToURL($realfile)."-".uniqid().'.'.$ext;
  4.  
+2
eoleg eoleg 11 лет назад #
+,нужно еще указать для какой версии.
0
Cruzka Cruzka 11 лет назад #
делал для 1.10
+5
Soul Soul 11 лет назад #
нужно еще указать для какой версии.
из поста в пост... smile eoleg, прям настроение поднял! плюсану в карму!
+2
eoleg eoleg 11 лет назад #
зато теперь Cruzka будет везде писать для какой версии smile
0
stavpit stavpit 11 лет назад #
А что будет с уже установленными картинками ? тоже сменятся или после установки все последующие только будут приобретать такой вид?
0
Cruzka Cruzka 11 лет назад #
это только для новых
0
stavpit stavpit 11 лет назад #
сделал но все по старому вот так мойсайт.ру/photos/photo286.html
0
Cruzka Cruzka 11 лет назад #
меняется только имя файла картинки, а не страницы с картинкой
0
artscripts artscripts 11 лет назад #
А можно все это сделать в виде плагина? Чтобы не менять файлы движка.
0
Cruzka Cruzka 11 лет назад #
я беспонятия как это делать =[
0
Димитриус Димитриус 11 лет назад #
нет, нельзя
+1
Странник Странник 9 лет назад #
вообще-то можно.
в том месте кода, где вызывается ядерный метод uploadPhoto() вставить хук (ловушку для передачи управления плагину) . Такие хуки надо вставить везде по движку, где загружаются картинки.
ну, а в плагине переписать способ именования файла, как нужно.

Я тоже обратил внимание на такие md5-имена файлов и была мысль такой плагин с человекопонятными именами файлов написать....но все руки не доходят)))
0
Слава Слава 11 лет назад #
Всё равно в конце названия стаится кусок кода.

bar-50ffcc9cde810.jpg
yemblema-bara-50ffc9be07e7b.jpg
0
Слава Слава 11 лет назад #
А может это и к лучшему. Если у нескольких фоток одинаковые названия.
0
Cruzka Cruzka 11 лет назад #
это для уникализации.
если не надо - исправьте нижнюю строку
Код PHP:
  1. $this->filename = $this->filename ? $this->filename : cmsCore::strToURL($realfile).'.'.$ext;
но тогда могут затереться старые картинки
0
lncuk lncuk 11 лет назад #
А для 1.9 не подойдет? вот бы 1.9
0
Cruzka Cruzka 11 лет назад #
проверьте в файле /core/classes/upload_photo.class.php функцию
Код PHP:
  1. public function uploadPhoto(
и есть ли там объявление filename как-то так
Код PHP:
  1. $this->filename
0
lncuk lncuk 11 лет назад #
на 1.9 все немножко не так
Код PHP:
  1. $filename = md5(time().$realfile).'.jpg';
ваш способ не подошел(
0
Cruzka Cruzka 11 лет назад #
что если
Код PHP:
  1. $filename = $filename ? $filename : cmsCore::strToURL($realfile)."-".uniqid().'.jpg';;
?
я не уверен, есть ли функция strToURL, если нет,- напишите, скажу альтернативное решение
0
lncuk lncuk 11 лет назад #
походу нет
0
lncuk lncuk 11 лет назад #
такое чувство что этот этот файл вообще не чего не делает, удаляю все содержимое и все равно добавляет с разными цифрами и буквами))) пробовал и содержимое заменить с 1.10.1 тоже не чего
0
Cruzka Cruzka 11 лет назад #
Значит, нужно копать, какой файл отвечает за именование файла..
0
oll oll 11 лет назад #
В чем становится более понятлиевее для человека функция h t t p://www.php.su/functions/?uniqid
Чем именование файла хешем MD5 лучше чем именование идентификатором с префиксом на основе текущего времени в микросекундах.Именования будет просто различаться длинной символов в имени файла.
Решение простое? Советуйте в чем есть смысл хоть.Для примера посмотрите цифры имени файла вашего решения.Такие решение не имеют смысла в сути.И этим решение будет пользоваться неподготовленный вебмастер, и будет задавать сумму вопросов.
PS/
Название темы -Меняем Шило на мыло.
Да без проблем готовых решений при именовании файлов хоть добавлением своего окончания, хоть в начале .
Что меняеться в этом решении 16 на 8?
0
oll oll 11 лет назад #
Попрака строки
Код PHP:
  1. Чем именование файла хешем MD5 лучше
На строку
Код PHP:
  1. Чем именование файла хешем MD5 хуже
0
lncuk lncuk 11 лет назад #
что то я вас не понял... буквы и цифры это и есть название?
0
oll oll 11 лет назад #
Было составлялся хеш из (md5(time().$realfile) и был уникальным b666a879da9368dc1ac48a6bd686c389.jpg
Стал функцией cmsCore::strToURL ,преобразования в транслит (также происходит формирование sео url)
Новое название (имя фото + текущее времмя в микросекундах) moe-foto-doma-c-tehei-pianim-v-nov-god-2013-5367287.jpg
И что из этого вытекает для seo? Чем фото становится лучше? Для понимания что за фото лежит на сервере , это кому-то и надо.ДЛя поиска,однозначно всеравно ,улучшений ноль будет.
+1
Cruzka Cruzka 11 лет назад #
oll:
(также происходит формирование sео url)
так же, но имя фото не обязательно совпадает с названием статьи
+1
Cruzka Cruzka 11 лет назад #
Со второй попытки смог вникнуть в Ваш комментарий.

написал же:

я:
чтобы имена файлов были

Код PHP:
  1. krasivaya-kartinka-vd23sdf.jpg
вместо

Код PHP:
  1. b666a879da9368dc1ac48a6bd686c389.jpg

чем лучше? поисковики умеют индексировать картинки не только по околокартиночному тексту, но и по имени картинки.
+1
Петр Петр 11 лет назад #
и это должно быть в дистрибутиве
0
Капитан Капитан 9 лет назад #
Доброго дня всем! У меня возникла потребность реализовать это в УК. Долго искал и нашел. В файле \components\catalog\frontend.php есть такой блок
Код PHP:
  1. if (isset($_FILES["imgfile"]["name"]) && @$_FILES["imgfile"]["name"]!=''){
  2. //generate image file
  3. $tmp_name = $_FILES["imgfile"]["tmp_name"];
  4. $file = $_FILES["imgfile"]["name"];
  5. $path_parts = pathinfo($file);
  6. $ext = $path_parts['extension'];
  7. if(mb_strstr($ext, 'php')) { $inCore->halt(); }
  8. if(mb_strstr($ext, 'htm')) { $inCore->halt(); }
  9. if(mb_strstr($ext, 'htaccess')) { $inCore->halt(); }
  10. $file = md5($file.time()).'.'.$ext;
  11. $item['file'] = $file;
если убрать строку:
Код PHP:
  1. $file = md5($file.time()).'.'.$ext;
то исходное имя файла не переименовывается. Но не позаписывается ли при этом что-то не хорошее в базу? Кто может подсказать?
Вопрос второй: тяжело ли сделать так чтобы имя файла бралось из названия страницы? Работа встала, подскажите кто нибудь пожалуйста. Спасибо!
+1
Cruzka Cruzka 9 лет назад #
1. название лучше заменить на вариант латиницей, через cmsCore::strToURL($file)."-".uniqid().'.'.$ext или как-то так
2. там же есть где-то переменная с названием страницы? обработайте её функцией из п.1 и всё
+1
Cruzka Cruzka 9 лет назад #
1. название лучше заменить на вариант латиницей, через cmsCore::strToURL($file)."-".uniqid().'.'.$ext или как-то так
2. там же есть где-то переменная с названием страницы? обработайте её функцией из п.1 и всё
0
Капитан Капитан 9 лет назад #
Спасибо Вам за ответ. Согласен. Вот начал делать и оно заработало, не не правильно.

Заменил в вышеприведенном коде, строку
Код PHP:
  1. $file = md5($file.time()).'.'.$ext;
на
Код PHP:
  1. $file = cmsCore::strToURL($file)."-".uniqid().'.'.$ext;
и все работает только не удаляет расширение и оно остается в виде лишнего -jpg посреди имени.

То есть, имя Вася.jpg перерабатывает вот в это vasja-jpg-54e529decb85e.jpg

В Вашем файле /core/classes/upload_photo.class.php все более менее понятно. Там над изменяемой строкой прямо написано:
Код PHP:
  1. // убираем расширение файла вместе с точкой
  2. $realfile = mb_substr($realfile, 0, mb_strrpos($realfile, '.'));
  3. if (!in_array($ext, array('jpg','jpeg','gif','png','bmp'))) { return false; }
  4. $this->filename = $this->filename ? $this->filename : md5(time().$realfile).'.'.$ext;
а вот в моем файле в УК такого нет, но ведь расширение же как-то убиралось, до того как я заменил ?
\components\catalog\frontend.php
Код PHP:
  1. $file = md5($file.time()).'.'.$ext;
на
Код PHP:
  1. $file = cmsCore::strToURL($file)."-".uniqid().'.'.$ext;
Вот под спойлером весь код, на всякий случай.

Спойлер

Еще от автора

Адаптируем стандартный диз 1.10.х под мобильные устройства
Для тех кто не в курсе, Гугл и Яндекс обещают понижать в выдаче сайты с неадаптивным дизайном (которые неудобно просматривать с телефона).
Добавленные статьи из админки не отображаются в ленте активности - фикс
При добавлении статей из админки, не создаются почему-то метки в ленте активности.
Чутка правим поиск по сайту
При поиске по сайту, если ничего не нашлось (а бывает что не находится то что точно есть), то Инстант предлагает поискать в яндексе.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.