Первый пост

наконец-то

post image

   2 года назад   0 500

Поделиться:

Первый пост

Итак, это мой первый пост в этот блог. А начнем с предыстории...

В общем, давно я уже хотел завести свой блог, но не хотелось всякие там вордпрессы, а хотелось что-нибудь самописного, в конце то концов, я программист или кто? И вот дабы продолжить свой нелегкий путь по изучению Yii2 решил наконец-то начать пилить движок для своего сайта. Трудностей было много. До этого я делал все на своем самописном фреймворке (R.O.D Framework). Там у меня уже было много наработок, которые не такто просто перенести в Yii, либо ж не хотелось делать велосипеды, т.к. тот же ckEditor существует в виде виджета Yii. 

Первая проблема - это загрузка изображений. Попробовал парочку виджетов для Yii - никуда не годится, кастомизация никакущая. И решил использовать проверенный временем dmUploader.

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

Теперь касаемо проблем бэкэнда. Для сохранения постов я решил отказаться от ActiveRecord по той причине, что городить кучу циклов с созданием экземпляра модели, заполнением данными и сохранением это не круто, плюс эктив рекорд тут не дает никаких удобств, разве что не надо париться с защитой от инъекций и пр. да и кол-во запросов неимоверно огромное. К примеру сохраняем блог с 5 тегами. Это на вскидку 11 запросов, 1 - сохранение блога, 5 - сохранение тегов, 5 - сохранение связей тег-блог, плюс служебные запросы AR. И тут возникает ризонный вопрос, а если часть тегов уже существует? Тут нужно городить еще кучу проверок. Нам такое не подходит. Я решил использовать чистый SQL. Блог сохраняем используя AR, а теги двумя незамысловатыми запросами INSERT IGNORE INTO `tags` (`name`) VALUES ('tag1'),('tag2'),('tag3') и INSERT INTO `blogs_tags` (`blog_id`,`tag_id`) SELECT <id блога> AS `blog_id`, `id_tag` AS `tag_id` FROM `tag` WHERE `name` IN ('tag1','tag2','tag3'). По-моему все выглядит просто и красиво. Аналогичто и с редактированием, только добавляем во второй запрос IGNORE чтоб игнорировать те связи которые уже есть в базе и добавляем еще запрос на удаление связей которых уже нет DELETE FROM `blogs_tags` WHERE `blog_id`=<id блога> AND `tag_id` NOT IN (SELECT `id_tag` FROM `tag` WHERE `name` IN ('tag1','tag2','tag3')).

Начало положено, далее буду мучиться с категориями, хочу их сделать с неограниченной вложенностью, в общем предстоит учиться работать с деревьями в Yii.


Теги:  программирование  первый пост  SQL

logo

Комментарии:

Оставьте комментарий первым :)

Нажимая отправить вы соглашаетесь с политикой конфиденциальности