Учёт количества просмотров картинок на сайте
Предположим вам нужно учесть количество просмотров изображений.
И вот облом — в вашем движке нету такой функции.
Это довольно легко реализовать с помощью php и htaccess.
В целом движок не имеет значения.
На всякий случай напомню про сервис проверки preg_match и preg_match_all.
Итак логика проста:
Учитываем только те картинки — которые в папке uploads.
Когда кто-то обращается к картинке — переписываем его на скрипт.
У нас есть скрипт он называется imageview.php, на него мы как раз-таки и будем переписывать.
Вот собственно пример:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /uploads/ RewriteRule (.+\.(jpe?g|gif|png))$ ../imageview.php?fname=$1 [NC] </IfModule>
Как видите установил базовую директорию и тупо переписал все картинки.
Код в файле imageview.php:
$fname=$_GET['fname']; print_r($fname);
Дальше стандартный код — подключились к базе, создали запись если нету, увеличили счётчик просмотра.
Этот пример абсолютно рабочий.
Есть проблема, наша CMS автоматически создаёт превью изображения (маленькие картинки).
Зачем нам учитывать просмотры превью?
Конечно-же можно дальше менять imageview.php, в нём проверять по имени превью это или нет…
Есть способ проще.
Обычно превью имеют вид имяфайла-160×160.jpg.
В вордпрессе это именно так.
Нам нужно проверять конец имени файла на наличие -числоxчисло.
Меняем наш htaccess файл:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /uploads/ RewriteCond %{REQUEST_FILENAME} !^(.+)-\d+x\d+\.(jpe?g|gif|png) [NC] RewriteRule (.+\.(jpe?g|gif|png))$ ../imageview.php?fname=$1 [NC] </IfModule>
Пояснение изменения.
Дело в том что в регулярных выражениях нет чистого отрицания, нужного в данном случае нам.
Есть негативный просмотр вперёд, но из-за того что мы не знаем части имени файла — он нам не поможет.
Что остаётся сделать?
Правильно, инвертировать шаблон.
Так-как rewriteRule не поддерживает инверсию, поэтому мы делаем через rewriteCond, где символ «!» и есть инвертирование.
Итак если перевести на нормальный язык, то это звучит так: Если в имени файла не содержится наш шаблон — то собственно делаем rewriteRule.
Если не понимаете, то я могу решить эту проблему, скажем рублей этак за 500.