Прибавил к названию "Глава первая" так как, надеюсь, не последняя.
В ходе разработки продукта встречается много непонятных моментов, для решения которых используется Google или умные слова коллег, либо вчитывание в мануалы.
Хотелось бы помочь и сэкономить ваше время, если вдруг столкнётесь с такими же проблемами в будущем.
Задача: сделать "реверсивный" пагинатор для Yii
Что имеется в виду под "реверсивным"? На примере новостей - это когда необходимо, чтобы самая первая новость всегда оставалась на первой странице, а остальные добавляемые новости уже размещались на 2, 3 и так далее страницах.
Картинка для понимания:
Зачем это нужно? Структура сайта не подвергается глобальным изменениям. Мы может открыть 10-ую страницу (поставить закладку, человек придет с поисковика) и там будет то, что ему нужно. При "обычном" подходе при каждом добавлении новости все смещается. И если человек придет на эту же 10-ую страницу - то совершенно не факт, что он найдет нужную информацию на этой странице (сам очень часто натыкаюсь на такое на различных форумах).
Рассмотрим реализацию операций CRUD (Create, Read, Update и Delete) для записей и пользователей на примере входящей в дистрибутив yii демонстрации блога.
Забегая вперёд, скажу, что пост будет изобиловать иллюстрациями. Они помогут вам избежать моих мучений при изучении функционала yii.
Суть проблемы: создаем форму с каптчей. Вводим символы с картинки правильно, но валидация не проходит (либо каптча не показывается вообще).
Небольшое замечание: в данной статье не рассматриваю банальные вещи - AJAX-валидацию, отсутствие GD - об этом много написано.
Рассмотрим несколько более сложные причины такого поведения.
В ходе своей профессиональной деятельности многократно приходилось сталкиваться с различными проектами на самых различных фреймворках, в том числе и на "велосипедных cms" (это когда каждый разработчик пишет свою собственную структуру проекта и имеет свой подход к написанию кода и используемым библиотекам).
Каждый программист видит код по-своему и, как результат, брожение в голове вызывает брожение в коде. Это было бы хорошо, если бы программист всю жизнь вел бы свой проект. Но получается так, что проект доделывается "хоть как-то уже наконец" и клиент с этим проектом уходит в "свободное плавание". Часто бывает, что проект переходит к другому программисту, у которого совершенно другое видение того, как должен выглядеть код. Он начинает вносить свои правки. После 3-4 таких программистов код превращается в сплошную непонятную кашу.