Добро пожаловать

+1

Добавлена возможность загрузки файлов

Теперь к статье можно прикрепить файлы любых допустимых расширений
Список можно изменить в настройках
Прикрепленные файлы показываются внизу статьи при полном просмотре

Исправлен баг когда нельзя было повторно загрузить тот же файл
0
167
0

Добавлена удобная вставка тегов

Добавлена новая вставка тегов, при вставке выводится подсказка похожих тегов, которые можно вставить кликом
Пока в коде реализовано не очень красиво, планируется добавить отдельную таблицу для тегов, но текущая реализация ORM не поддерживает связь многие ко многим
image
0
181
0

Добавлены методы для пагинации

Добавлены методы appends и withPath для класса пагинации
Метод appends добавляет в путь произвольные параметры
Метод withPath позволяет указать конкретный путь к странице

Story::query()
    ->where('text', 'like', $search)
    ->orderByDesc('created_at')
    ->paginate($perPage)
    ->appends(['search' => $search])
    ->withPath('/custom-path');
0
177
+1

Добавлена нестрогая проверка логина и email

При регистрации добавлена нестрогая проверка, логин и email нечувствителен к регистру
В ORM для этого добавлено сравнение lax
// Строгое сравнение
$userExists = User::query()->where('login', $login)->first();

// Нестрогое сравнение
$userExists = User::query()->where('login', 'lax', $login)->first();

Добавлена новая функция escape аналогичная функции htmlspecialchars
В отличие от htmlspecialchars на вход может принимать любой тип данных включая null
$login = escape($_GET['login']);
1
203
0

Изменил приведение типов в ORM

Ранее поля автоматически приводились к типам
К примеру если значение поля было числовым, то данное поле приводилось к числу
Иногда это приводило к неожиданным результатам
Поэтому теперь автоматическое приведение к типам отключено, вместо этого к типа можно приводить в ручную
Для этого в модели необходимо указать какие поля нужно привести к другому типу (По умолчанию все записи это строки)
/**
* The attributes that should be cast.
*/
protected array $casts = [
    'rating'  => 'int',
    'price'   => 'float',
    'locked'  => 'bool',
];

Некоторые поля которые кончаются на _id или поле первичного ключа автоматически приводятся к числу, поэтому...
0
215
0

Избранные статьи

Добавлена возможность для авторизованных пользователей добавлять статьи в избранное
image
Также отображается общее количество пользователей которые добавили статью в избранное

Добавление и удаление статьи происходит без перезагрузки страницы

Страница со списком избранный статей будет сделана позже
1
208
+4

MotorCMS

Под капотом очень удобная ORM на файлах, есть связи и жадные загрузки, сложные запросы, обновления, удаления, сортировки, пагинация
Все на итераторах
Код https://github.com/visavi/motor-orm/blob/master/src/Builder.php
Есть миграции
Код https://github.com/visavi/motor-orm/blob/master/src/Migration.php
Коллекции
https://github.com/visavi/motor-orm/blob/master/src/Collection.php
Очень удобный валидатор данных
https://github.com/visavi/motor/blob/master/app/Services/Validator.php
Требования PHP 8.0 (Базы данных не требуются)
Минимум зависимостей у композера
Все данные хранятся в csv файлах, можно править даже руками или через excel к примеру
php, cms
3
334
Активность
0
В будущем возможно сделаю, пока не получается время выделить 08.09.2023 18:50
0
Вот ещё бы модерацию к комментариям к статьям 02.09.2023 19:39
0
crew, это всего лишь один из способов, чтобы не разрывать цепочку запросов
Можно делать как ты и написал, кому как нравится 23.06.2023 16:49
0
Спорное решение.
Без нее конструкция кажется более читаема (точно всем будет точно понятна), да и причины реализации не ясны - не кажется что без нее написать были какие-то трудности.
...
23.06.2023 12:03
0
Хорошая новость! 20.06.2023 17:28
+1
Самый лучший web-мотор сразу прямо после wap-мотора :respekt 29.08.2022 06:27
+1
Вот это уже совсем другое дело :klass 06.09.2022 10:14
+1
Со временем постараюсь сделать админские настройки 28.12.2022 02:26
+1
Иногда я спрашиваю себя - когда же я освою php, ответ приходит сам собой:

Наверно! В следующей жизни! Когда я стану кошкой, на - на, на на 04.01.2023 03:28
+1
Сейчас хочу сделать чтобы можно было прокинуть роуты в контроллеры, чтобы можно было указывать не ссылки типа /stories имя роута, чтобы легко можно было поменять главную на список статей
Остальное... 07.03.2023 01:42