Как появился этот блог - Разработчик Павел Скляр

@pavelsklyar | 28 июн 2020 в 13:29

Как появился этот блог

Года два назад у меня была идея сделать собственный блог. Создать его не такая уж и большая проблема. Вопрос только в том, что туда писать?

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

В этом семестре на инженерное проектирование нужно было сделать интернет-портал с разделением ролей и всеми этими прелестями. Я подумал, что можно совместить приятное с полезным и начал делать свой блог.

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

Разработка

Разрабатывать сайт я начал на своём фреймворке. Это было интересно и помогало найти разные ошибки и слабые места.

После написания основного функционала начались трудности. Они были связаны с загрузкой изображений, тегами, рейтингом и закладками. Разберём всё по-порядку.

code

Загрузка изображений

Начнём с картинок. В чём была проблема? Размер картинок должен быть минимальным. Во-первых, никто не любит, когда картинки грузятся очень долго. А когда она весит 15 мегабайт (я же всё-таки фотограф, у меня не бывает лёгких снимков), это нехорошо. Во-вторых, место на хостинге не бесконечно и забивается оно именно загружаемыми файлами. Для этого их нужно сжимать так, чтобы размер был минимальным, и при этом сама картинка была читаемой.

Когда я проходил курсы в GeekBrains, нам давали интересный скрипт для изменения размера изображений. Тогда я его доработал и получилось хорошее решение, которое можно использовать. Так вот, этот скрипт я так и не нашёл. Пришлось искать другие решения и делать их под себя.

С горем пополам я нашёл код, который будет работать согласно задумке, и стал использовать его. Сам код можно посмотреть тут.

У этого решения был один серьёзный недочёт. Основной его принцип: уменьшая качество, уменьшается и размер. Но чем хуже качество, тем больше пикселей ты видишь вместо картинки. Со временем я обнаружил, что некоторые картинки загружаются битыми. Половина фотографии нормальная, а вторая половина как будто у вас в принтере закончилась краска.

Решил я эту проблему позже, найдя очень интересный скрипт. Меня в нём привлекло то, что он сжимает 15 мегабайт до 300 килобайт и при этом на картинку всё ещё можно смотреть. И достигается это благодаря совершенно иному подходу. О нём я расскажу в отдельной статье.

Теги

Перейдём к тегам. Здесь проблема заключалась в том, чтобы связать несколько тегов с одной статьёй. Казалось бы, просто делаешь поле для тегов, пишешь их туда через запятую и профит. На деле же этот подход не стыковался с моими потребностями. У меня реализован поиск по тегам и я не хотел делать его просто поиском статей, где tags LIKE '%tag%'.

Почему мне это не подошло? Представим, что в статье мы указали теги таким образом: blog, programming, develop. В другой статье мы указали теги blog, program. Что произойдёт, если я буду искать по тегу program? В SQL % обозначают любое количество символов. То есть в поиске по тегу %program% мне выйдет результат с первой статьёй, где есть тег programming. А так быть не должно.

Следующее, что приходит на ум - сделать отдельную таблицу в базе данных, где будут храниться ID блога и ID тега (из таблицы tags). Работающее решение. При добавлении мы делим теги по запятой, вносим их в таблицу tags и дальше вносим их ID в связующую таблицу. Теперь при поиске по тегу мы будем искать тег в таблице tags, брать его ID и в связующей таблице находить все публикации, связанные с этим тегом.

Но дальше возник вопрос, как сделать редактирование записи? Лишний раз делать запрос к базе данных не хотелось, поэтому я совместил оба решения. Я оставил поле для тегов, они хранятся там через запятую. При редактировании вместе с остальной информацией я получаю и их. При этом работа с тегами реализована вторым способом. Хранение тегов в блоге сделано просто для удобства.

Рейтинг и закладки

Последней крупной проблемой были рейтинг и закладки. Сложностью для меня стал JavaScript. Нужно было обрабатывать нажатия на кнопки и менять код отображения кнопок.

С закладками всё просто. После отправки Ajax-запроса я просто меняю картинку закладки на активную или неактивную, в зависимости от действия. Далее при просмотре этой страницы я проверяю, есть ли у пользователя эта запись в закладках и вывожу нужную картинку.

С рейтингом получилось сложнее. Проголосовать за публикацию можно только один раз: либо нравится, либо не нравится, третьего не дано. Простым изменением картинок тут не обойтись, потому что кнопки всё равно остаются активными и можно изменить своё мнение. Для этого мне нужно убрать несколько строк кода. Я не нашёл ничего лучше, кроме как просто перезагружать страницу после успешного выставления рейтинга. Возможно, это костыль. Если вы знаете, как это сделать по-человечески, пожалуйста, напишите мне.

Почему проект увидел свет раньше времени

По дисциплине «Веб-аналитика» нам нужно было сделать простенький сайт на Wordpress, подключить туда Яндекс.Метрику и Google Аналитику. Я подумал, что не хочу иметь дело с Wordpress и решил выложить свой сайт на хостинг и работать с ним. Единственное, я не афишировал его, потому что многое нужно было доделать.

Что будет дальше?

Сейчас я полностью перевёл сайт со своего движка на Laravel и добавил некоторый функционал. На этом работа не закончена, ещё многое предстоит сделать. В ближайшем будущем я всё же наполню страницы «Обо мне» и «Контакты», доработаю профиль с настройками и будет хорошо. Ну, а пока я запускаю сам блог и буду публиковать интересные на мой взгляд статьи обо мне, о программировании, фотографии. В общем, всё то, что я хотел.

Теги: blog , programming , development

91