CMS |
|
Главная страница | Просмотр банковских выписок | Текстовый редактор | Интерпретатор | Игра "Осиновый лес" | CMS | Дневник |
|
Java (11), Swing, несколько классов, взятых из предыдущих проектов (GBL, Loc, Mes, Proper) У меня возникла проблема. 23 августа 2025 года, находясь в отпуске на прекрасном побережье Средиземного моря в городе Сиде, я придумал и реализовал заготовку для этого сайта. Я собирался опубликовать на нём полные описания всех проектов, и, в общем-то, всё получилось. Я придумал двуязычную главную страницу, решил отвести под каждый проект (репозиторий) по одной странице для каждого языка и начал вести дневник. Но жизнь не стоит на месте. Появляются идеи новых проектов, и они должны получить свою страничку на сайте. А добавление одной новой страницы вызывает необходимость внести изменения на все страницы сайта. И да, можно, конечно, и так, но зачем? Я сделал собственную CMS (систему управления контентом) для ведения собственного сайта. Проблема решена! Конечно, можно было бы взять что-то готовое, но что? И сколько времени мне понадобилось бы для её изучения? Удалось бы сделать сайт таким, каким я его придумал на побережье Средиземного моря, или всего лишь примерно таким? В общем, дело сделано: CMS создана, и она работает. Но кроме того, эта CMS позволила попрактиковаться в работе с файлами на Java, в создании пользовательского интерфейса с помощью Swing, в частности: в работе с текстовыми полями, радиокнопками, комбобоксами, редактировании списка и двуязычности. Для разработки использован Eclipse. Проект расположен здесь: https://github.com/weekend-game/weekendcms/ (EN) и здесь: https://gitflic.ru/project/weekend-game/weekendcms/ (RU). |
Как запустить программу |
Скачайте репозиторий на свой компьютер. Всё необходимое для работы программы расположено в папке app. Зайдите в папку app и запустите программу двойным кликом по WeekendCMS.jar или, если он не запускается, двойным кликом по WeekendCMS.bat. Если и последнее не запускает приложение, то скачайте и установите Java 11 или новее и снова попробуйте способы, описанные выше. |
Как открыть проект в Eclipse |
В Eclipse, в меню выберите File – Import... В появившемся окне выберите Existing Projects into Workspace. Укажите папку скаченного вами репозитория и нажмите кнопку Finish. Проект откроется в Eclipse. В Package Explorer (в левой части экрана) дважды кликните на файле WeekendCMS.java. Файл откроется для редактирования (в центральной части экрана). Запустите программу на выполнение, нажав Ctrl+F11 или так, как Вам удобно запускать программы в Eclipse. |
Как работать с программой |
Программа помогает создать HTML-страницы сайта во вполне определённом стиле - стиле моего сайта. Если нужно что-то другое или что-то ещё, то надо дорабатывать программу. Чтобы легче понять пояснения ниже, надо запустить программу и открыть созданный с её помощью сайт. Видим, что сайт состоит из двух видов страниц: главной страницы и страниц проектов. Все страницы проектов, в принципе, одинаковы. |
Главная страница (index.htm) |
В центральной части страницы крупным шрифтом отображается название всего проекта. В данном случае это название моего профиля - Weekend Game. Если запустить программу, то мы увидим, что в появившемся окне будет несколько полей. Поле "Название проекта" отвечает именно за то, что будет отображаться в центральной части главной страницы. Верхняя часть страницы содержит ссылку на сайт с проектами и предлагает писать письма на мой адрес. Она выполнена на английском языке. Нижняя часть содержит аналогичную информацию, но написана на русском языке. Для указания всех этих атрибутов в CMS предназначены поля "Сайт для проектов на английском", "Сайт для проектов на русском" и "Электронная почта". Видим, что на странице, выше и ниже названия всего проекта (профиля) расположены линейки меню, т.е. ссылки на страницы каждого проекта (репозитория). Предполагается, что сверху будут ссылки на страницы на английском языке, а снизу - на русском. |
Страницы проектов (репозиториев) |
Перечень страниц проектов (репозиториев) указывается в CMS в разделе "Список страниц". Подразумеваются страницы проектов. Для каждой страницы указывается "Язык" (EN или RU). Эти значения определяют, где будет расположена ссылка на страницу на главной странице: сверху или снизу. Ссылки будут формироваться в той последовательности, в которой они указаны в списке страниц. Расположение можно поменять кнопками "Вверх" и "Вниз", расположенными справа от списка. Поле "Наименование" определяет название страницы на естественном языке, а поле "Имя файла" — это имя файла страницы, которая будет сгенерирована. При генерации страниц будет сформирована не только главная страница, но и страницы для каждой строки из списка страниц. Каждая страница проекта будет содержать заголовок крупным шрифтом, взятый из поля "Наименование". Будет содержать линейку меню, содержащую ссылки на все страницы EN или RU, в зависимости от того, какой атрибут имеет сама страница. Таких линеек меню будет две: вверху страницы и внизу страницы. В самом низу будет предложение посетить сайты с проектами и email. Содержимое же страницы будет взято из одноименного файла, взятого из папки, указанной в поле "Папка расположения файлов с текстами". Например, для генерации страницы weekendinterpreter.htm следует не только указать её в списке страниц, но и разместить описание интерпретатора выходного дня в одноимённом файле (weekendinterpreter.htm) и поместить его в папке, указанной в поле "Папка расположения файлов с текстами". Если такого файла не найдется, страница weekendinterpreter.htm всё равно будет создана, но она будет иметь только заголовок и завершение. |
Генерация сайта |
Чтобы получить страницы сайта, нажмите кнопку "Сформировать страницы". Все сформированные HTML-файлы будут расположены в папке, указанной в поле "Папка для размещения сформированных страниц". Таблицу стилей моя CMS не формирует. Её следует создать вручную и расположить там, где удобно. Также самостоятельно побеспокойтесь о размещении файлов с изображениями. Внимание! Не редактируйте вручную сгенерированные HTML-файлы в папке для размещения страниц, так как при очередной генерации они будут переписаны. |
Как программа написана |
Главным классом приложения является класс WeekendCMS. Именно он содержит статический метод main() для запуска программы. В его конструкторе создаётся всё необходимое для работы. Прежде всего, вызывается метод Proper.read(). Proper - это класс, который нужен, чтобы приложение могло сохранять данные между сеансами работы. Так сохраняется расположение и размер главного окна, предпочитаемый язык интерфейса, а так же вся информация полей ввода и данные списка страниц. Метод read() читает файл с ранее записанными данными. Метод save() делает обратное: записывает всё, что запомнено в объекте, в файл. Метод setProperty(name, value) сохраняет значение value с именем "name". Метод getProperty(name, def) читает значение с именем "name"", а если оно не записывалось, то будет возвращено значение def. Для записи и восстановления расположения и размеров окна приложения используется пара методов saveBounds() и setBounds(). Затем статическим методом Loc.setLanguage() устанавливается язык интерфейса. Класс Loc отвечает за I18n. После того, как установлен язык, метод Loc.get() будет возвращать строки на установленном языке, если, конечно, найдется файл локализации messages_xx.properties, где xx - условное обозначение языка. Создаётся объект класса SiteDescriptor - объект для хранения всей информации о сайте который будет сгенерирован. У созданного объекта тут же вызывается метод siteDescriptor.readData(). Здесь происходит чтение этой самой информации. Создаётся окно приложения - объект класса JFrame. И сразу вызывается метод makeJFrame(), в котором в окне приложения располагаются компоненты пользовательского интерфейса. Для их расположения используется класс GBL. GBL - это упрощение менеджера расположения GridBagLayout, адаптированное под нужды приложения. Компонентов пользовательского интерфейса не так уж много, но для их создания и настройки приходится писать много текста. Что бы несколько упростить, всё, что связано с редактированием списка страниц, выделено в отдельный класс: ListEditor. Объект класса ListEditor формирует панель редактора списка страниц, которую можно получить методом getPanel() и расположить где угодно. Я её, естественно, располагаю на единственном экране своего приложения. Затем я инициализирую класс Mes, предназначенный для отображения различных сообщений с помощью диалоговых окон. Методы Mes статические, и это создает некоторую связанность классов моих программ. Но я отношусь к нему как System.out в Java. В заключение я вызываю метод readFromSiteDescriptor(), который заполнит компоненты пользовательского интерфейса ранее прочитанными данными из SiteDescriptor(). Основная работа выполняется в слушателе кнопки "Сформировать страницы". Вызывается метод класса Generator DoIt(). Этот метод и сформирует страницы сайта на основании имеющихся данных. Ну а более подробно о работе программы можно узнать, если скачать проект, открыть его в Eclipse, почитать тексты классов, что-нибудь менять, запускать программу и смотреть, что из этого получается. |
Итоги |
Создание даже такой небольшой CMS существенно облегчило ведение моего сайта. |
Хорошо бы… |
Дневник быстро разрастается. Надо убирать в архив старые записи. В дневнике нужно сделать фильтр, который позволил бы отфильтровывать записи по какому-то конкретному проекту. |
|
Главная страница | Просмотр банковских выписок | Текстовый редактор | Интерпретатор | Игра "Осиновый лес" | CMS | Дневник |
Смотрите мои проекты на https://github.com/weekend-game (EN) или https://gitflic.ru/user/weekend-game (RU). Пишите мне по адресу weekend_game@mail.ru |