Разработка JohnCMS 9.x (обсуждения, новости)

8.25K
.
Бывший человек
Добавлено: 03.12.2020 / 22:18
Simba, Что то вроде мини чата))) ну это конечно же опять только если Вы сочтёте нужным.

Добавлено: 03.12.2020 / 22:26
ББ-кода для вставки изображений так и не сделали
.
Кадило крутится, лавэха мутится
# cuHyc (03.12.2020 / 22:26)
ББ-кода для вставки изображений так и не сделали
forum/?type=topic&id=12200
.
# cuHyc (03.12.2020 / 21:15)
Насчёт редактора - Xenforo'вский можно как то портировать? И есчё - планируется ли технология которая позволяет отправлять сообщения без перезагрузки страницы? Ну и например функция бесконечной прокру
а как искать потом нужный пост ?.. Вертикальную пагинацию придется делать по логике... 
.
Бывший человек
# Fublin (03.12.2020 / 22:40)
а как искать потом нужный пост ?.. Вертикальную пагинацию придется делать по логике... 
Да понятно, что это мои хотелки, остальным это не нужно, ну например в том же ксене сообщение добавляется без перезагрузки страницы везде. И я не говорю, что обязательно сделать надо так, а разве что как функцию вкл\выкл.
.
Бывший человек
# Simba (03.12.2020 / 22:32)
forum/?type=topic&id=12200
не то, точнее то, но что то даже в примере я так и не обнаружил как вставить картинку в бб, может я слепой. 
Раз вы хотите новый редактор - почему бы не сделать по функционалу как на ксене - по моему там есть всё что нужно и даже больше, извините если бы я знал как - помог бы.
.
# cuHyc (03.12.2020 / 22:50)
Да понятно, что это мои хотелки, остальным это не нужно, ну например в том же ксене сообщение добавляется без перезагрузки страницы везде. И я не говорю, что обязательно сделать надо так, а разве что
с пк удобнее налево - направо как бы..на телефонах да, скорее удобнее вниз, ну или что бы само подгружалось.. 
Но опять же это чатик потрепатся если только, в жестоком споре надо точно знать где кто что написал, ссылку на пост апанента со всеми возможностями уничтожить ево как личность 
.
4 8 15 16 23 42
Не получается дать не кому должность на сайте
Должность на СайтеОбычный пользователь
Модератор Форума
Модератор Загрузок
Модератор Библиотеки
Супермодератор
Администратор
Супервайзор


Пока не заполню пользователю анкету
- имя
- дату рожденья.
Прикрепленные файлы:
.
kantry
Hey guys! Finally I'm gonna change status!?
ViROSS, Это Максу ишью надо написать, а пока заходи в пыхадмин и запросом меняй
update users set rights=9 where id=1 -- супервайзер
.
Simba
Кадило крутится, лавэха мутится
Давно новостей не было, но они всё же были, просто писать было лень

В общем просили контроллеры, теперь они есть. Ну правда в таком виде как я это вижу, возможно у кого-то есть что добавить))
Как раньше писался модуль?
Входная точка модуля выглядела обычно примерно так:
defined('_IN_JOHNCMS') || die('Error: restricted access');

/** @var Tools $tools */
$tools = di(Tools::class);

/** @var User $user */
$user = di(User::class);

/** @var Render $view */
$view = di(Render::class);

/** @var NavChain $nav_chain */
$nav_chain = di(NavChain::class);

/** @var Request $request */
$request = di(Request::class);

// Регистрируем Namespace для шаблонов модуля
$view->addFolder('reg', __DIR__ . '/templates/');

// Register the module languages domain and folder
/** @var Translator $translator */
$translator = di(Translator::class);
$translator->addTranslationDomain('registration', __DIR__ . '/locale');

$nav_chain->add(__('Registration'));

Неприлично много однотипного кода, да ещё и комментарии перед каждым получением зависимостей. Их конечно можно опустить, но тогда в IDE не будет работать автокомплит, а он хорошо экономит время и позволяет "изучать классы" без чтения документации. Так же в каждом модуле ещё надо самостоятельно указывать откуда брать шаблоны и переводы.
Дальше надо было писать какую-то логику определения страницы, которую нужно отдать пользователю. Из-за этого не всегда было очевидно какие страницы есть в модуле и где искать код, который отвечает за неё. Ну и так же нужно было самостоятельно получать параметры из маршрута.

Теперь с контроллерами всё стало несколько проще и избавляет нас от многого дублирующегося кода.
Давайте посмотрим на примере...
Есть маршрут:
$map->addRoute(['GET', 'POST'], '/news/add_vote/{article_id:\d+}/{type_vote:\d}/', [News\Controllers\VoteController::class, 'add']);

Этот маршрут отвечает за голосование за новость. Чтобы учесть голос нам нужен идентификатор новости и тип голоса (положительный или отрицательный).
Под этот маршрут будет попадать ссылка site.com/news/add_vote/100/1/ Если пользователь перейдет по такой ссылке он проголосует положительно за новость с идентификатором 100.
Из настроек маршрута сразу понятно что принимает он и какой класс и метод класса отвечает за обработку его. (А в IDE можно сразу перейти к классу через CTRL + click). Даже если у вас нет IDE, из пути всё равно понятно где искать класс. Класс расположен в модуле news в папке Controllers и называется VoteController.php

Посмотрим на метод и класс: VoteController.php
Этот класс избавлен от всех рутинных объявлений переменных.
Если в классе задано название модуля так: protected $module_name = 'news'; то шаблонизатор, а так же переводы будут настроены автоматически.

Посмотрим на метод add
public function add(User $user, int $article_id, bool $type_vote = false): void


В этом методе ожидается пользователь, идентификатор статьи и тип голоса.
Что происходит когда выполняется этот метод?
По сути этот код равнозначен следующему:
/** @var User $user */
$user = di(User::class);
$route = di('route');
$article_id = (int) $route['article_id'];
$type_vote = (bool) $route['type_vote'];

Благодаря автокомплиту описать метод можно очень быстро, а в комментарии /** @var User $user */ нет необходимости т.к. IDE и так понимает что в переменной $user уже содержится объект текущего пользователя.
Переменные $article_id и $type_vote будут внедрены автоматически если в настройках маршрута есть описание параметров с такими же названиями. Так же эти переменные будут автоматически приведены к тому типу, который указан в сигнатуре метода. В данном случае в методе указано что $article_id это int (число), а $type_vote это bool. К этим значениям они и будут приведены.

Всё это ещё будет более детально в примерах описано в документации после выхода новой версии движка.
.
Кадило крутится, лавэха мутится
Ну и более приземленные новости)

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

В новой версии будет новый модуль новостей с пока таким функционалом:
- Неограниченная вложенность разделов
- Автоматическое построение полного ЧПУ с учетом вложенных разделов
- Полное управление мета тегами для всего модуля/разделов/статей
- Полноценный визуальный редактор, который работает с обычными HTML тегами. При выводе обрабатывается по принципу белого списка, что позволяет защититься от XSS.
- Счетчик просмотров новости
- Комментарии
- Оценка новости (лайк/дизлайк)
- Запланированное отображение новости. Можно задать дату и время начиная с которого новость начнет отображаться на сайте, а так же дату и время окончания отображения.
- Теги к новостям и поиск по тегам
- Поиск по новостям
Всего: 329