Обновление модулей с JohnCMS 5.2.1 до 9.3.0

4.26K
.
Всем привет. Я немного схитрил в теме, надо обновить не сайт, а конкретно лишь футбольный менеджер Скрипт полностью самописный, надеюсь это не оттолкнет хейтеров ФМ))
Когда-то мне захотелось создать сайт, я скачал Jcms и разобрался в нем за пару
недель вообще без знаний PHP. Установив 9.3 я за несколько дней почти не
сдвинулся с места (перечитав всю документацию и попробовав примеры).
Все что связывает ФМ и двиг - подключение ядра и шапки, больше ничего.
Как же подключить его сейчас, я не знаю. Конечно, то к чему пришел Jcms это
круто, адаптивность шаблоны и прочее, разработчики молодцы, но как
теперь к этому привести свои проекты? А точнее использовать эту красоту,
а двигаться самостоятельно и как угодно мне.

Нужны ли ФМ шаблоны? Зачем? Как поставить скрипт без шаблонов и можно ли?
У ФМ сейчас свой дизайн, но думаю использовать стандартные блоки, чтобы
потом обновить весь дизайн на сайте вместе, а так же отойти от простого
mysql. Ну и это пожалуй все.
Кому интересен проект
Сайт (если ссылки нельзя, удалите, она есть в анкете)
Логин test
Пароль test123456
.
Кадило крутится, лавэха мутится
Добавлено: 21.07.2020 / 15:04
Ядро подключается так:
require 'system/bootstrap.php';

Если из папки, то соответственно так:
require '../system/bootstrap.php';

Шапки и футера как такового нет. Вместо этого теперь используется шаблон.
Я бы порекомендовал попробовать сначала переделать какую нибудь страницу с на новое ядро пока не думая о шаблонах, у тебя будет просто отображаться верстка без стилей, но работать оно будет.
После этого уже будешь разбираться с шаблонами. Там уже будет 2 пути. Ты можешь просто буферизовать вывод своего модуля и сделать простенький шаблон-заглушку в котором будешь выводить этот буфер с новым дизайном, или же можешь пойти по более правильному пути и отделить шаблон от кода.
Но опять же к шаблонам переходи в последнюю очередь. Сначала прикрути ядро, переделай работу с mysql запросами на PDO, может ещё что-то что использовалось от старого ядра, тоже переделать надо будет. Сам модуль можешь кинуть так же в корень сайта и не думать о роутере пока. Потом переделаешь на роутер и шаблоны.

Добавлено: 21.07.2020 / 15:09
Если не понятно что-то, спрашивай.
.
Hat-Trick
Simba, Я начал все и сразу
Как я понимаю, код мы пишем в одном месте, получая сразу все нужные данные, пихаем его в массив и передаем на другую страничку где уже используя циклы условия и хтмл выводим. Для этого у нас есть шаблонизатор?
С переделкой запросов проблем вроде бы вообще нет.
Вопрос такой, есть инфо панель которая будет отображаться абсолютно на всех страницах менеджера. Как мне ее разделить? Должен быть где-то файл (инфо.пхп например), в котором я выполняю пару запросов, обрабатываю данные, кладу в массив и передаю на инфо.пхтмл (этот файл тоже должен где-то лежать).
А потом на странице (на какой-то одной или на всех) вывожу (как вывожу?).
А еще как не выводить page_title и навигацию (см скрин) она у меня своя будет
папку ФМ я кинул в каталог modules
создал по аналогии includes - здесь я так понимаю будут все страницы менеджера, которые раньше просто лежали в папке ФМ
templates -  ну тоже понятно, здесь у нас пхтмл для каждого файла в которых мы показываем нашу страничку такой, какая она должна быть
system - сюда я хочу разместить файлы со всякими функциями для ФМ и т.п. (или проще эту папку в includes кинуть)
Так же в документации не хватает что нам надо подключить для того, чтобы использовать, например, $user->id или $sysconf['ляля'] и прочие такие данные. Через пару тыков это, конечно, становится понятно, но все же. (или я не увидел)
Прикрепленные файлы:
.
Simba
Кадило крутится, лавэха мутится
Как я понимаю, код мы пишем в одном месте, получая сразу все нужные данные, пихаем его в массив и передаем на другую страничку где уже используя циклы условия и хтмл выводим. Для этого у нас есть шаблонизатор?
Да, всё верно.

Вопрос такой, есть инфо панель которая будет отображаться абсолютно на всех страницах менеджера. Как мне ее разделить?
Нужно сделать ещё один шаблон, а его уже вставлять в нужные другие шаблоны.
Например можешь посмотреть на форуме. У нас есть свой блок header чисто для форума. А подключается в шаблоне он таким образом.

А еще как не выводить page_title и навигацию (см скрин) она у меня своя будет
Для этого не передавай в шаблон page_title или передавай, но пустую строку, тогда не будет отображаться.
Для скрытия навигации просто не добавляй в ней пункты и вызови метод showHomePage с аргументом false как это сделано на главной тут: https://github.com/johncms/joh ... p#L32

system - сюда я хочу разместить файлы со всякими функциями для ФМ и т.п. (или проще эту папку в includes кинуть)
Если там будут классы, то назови папку lib. Тогда можно будет юзать хэлпер module_lib_loader для упрощенной автозагрузки. Ну в принципе можешь и оставить system и вторым параметром в хэлпер передавать название папки.

Так же в документации не хватает что нам надо подключить для того, чтобы использовать, например, $user->id или $sysconf['ляля'] и прочие такие данные.
Текущего пользователя можно получить так:
/** @var \Johncms\Users\User $user */
$user = di(\Johncms\Users\User::class);

Настройки сайта так:
$config = di('config')['johncms']
.
Simba, С инфо панелью разобрался, сделал отдельно шаблон, подключил его по примеру, спасибо. Титл и навигацию тоже убрал.

Сразу вопрос про эмблемы, флаги и иконки, опять же как лучше сделать. Где папку создать (я хочу в каталоге ФМ). Вывод я так понимаю есть какой-то особенный. Что вообще с этим обновилось и как теперь работает?
.
Simba
Кадило крутится, лавэха мутится
# Hat-Trick (23.07.2020 / 18:27)
Сразу вопрос про эмблемы, флаги и иконки, опять же как лучше сделать. Где папку создать (я хочу в каталоге ФМ). Вывод я так понимаю есть какой-то особенный. Что вообще с этим обновилось и как теперь р
Картинки, стили, js и прочее лежит в папке themes/default/assets.
Для модуля можешь в этой папке создать подпапку с названием модуля. Например:
themes/default/assets/fm
А в ней уже будут подпапки с картинками стилями и прочим.
Дальше чтобы вывести в шаблоне нужно указать путь к нужному файлу.
Пример:
У нас есть файл themes/default/assets/fm/css/styles.css
В шаблоне подключить его можно так: 
<link rel="stylesheet" href="<?= $this->asset('fm/css/styles.css') ?>">

Как видно из примера часть пути themes/default/assets/ опускается.
Вторым параметром можно передать true, тогда к итоговому пути будет добавляться параметр для автоматического сброса кэша.
Таким же образом подключаются скрипты, картинки и всё что угодно.
<img src="<?= $this->asset('fm/images/logo.svg') ?>" alt="logo" style="width: 70%;" class="img-fluid">

Этот подход позволит создавать шаблоны или темы, которые смогут менять стили, картинки и прочий контент твоего модуля не меняя код самого модуля.
.
Hat-Trick
Simba, почему я сам не могу прописать путь, почему надо использовать asset(), что он дает? (конечно могу, но в чем преимущество)
.
Кадило крутится, лавэха мутится
Hat-Trick, ну основное это сброс кэша (чтобы при изменении стилей или при замене картинок не менять руками параметр для сброса кэша).
Ну и как уже выше писал, возможность дальнейшей кастомизации с помощью тем.
.
Hat-Trick
Simba, про кэш вообще не понятно)) не знаю что это и для чего, если можно то в кратце чем это хорошо и как работает?
а вот про картинки я понял только сейчас получается для каждого дизайна можно подбирать иные картинки, которые будут в каталоге с соответствующим дизайном и менять таким образом не только цветовое оформление, но и графику. Ну по шаблонам то же самое, например текущий header (инфо панель) для менеджера можно так же поместить в папку с дизайном, а потом для других стилей сделать его другим. Верно?
.
Simba
Кадило крутится, лавэха мутится
# Hat-Trick (23.07.2020 / 21:53)
Simba, про кэш вообще не понятно)) не знаю что это и для чего, если можно то в кратце чем это хорошо и как работает?
а вот про картинки я понял только сейчас получается для каждого дизайна можно
Да, всё верно.
По поводу кэша.
Когда пользователь заходит на сайт, браузер загружает саму страницу, стили, js, картинки и прочее. Все статические данные браузер кэширует. Т.е. после того как пользователь перейдет на другую страницу, стили, скрипты и картинки повторно грузиться не будут, а будут браться из кэша.
Представь ситуацию, ты меняешь дизайн, перекрасил кнопки например. Загрузил на сайт изменения и радуешься, но у пользователя эти изменения не видны, т.к. у него закэшировались стили.
Чтобы у него отобразились изменения, ему надо очистить кэш. Но ты ж не будешь каждому говорить чтобы он сбросил кэш?)
Вот для автоматизации сброса и нужно подключать стили и прочие меняющиеся штуки с помощью спец методов.
Для сброса кэша достаточно к URL адресу стиля дописать гет параметр, тогда браузер будет его считать новым файлом и будет загружать с сайта.
Пример:
<link rel="stylesheet" href="/themes/default/assets/css/app.css?v=1593355878">

Тут v=1593355878 подставляется автоматически и цифра меняется при изменении файла (это метка времени последнего изменения файла). Соответственно изменился файл, изменилась метка, браузер перезагрузил файл с сайта и заново закэшировал.
Всего: 167