Разработка веб-сайта на базе ASP.NET Core и Platformus CMS. Cms разработка


Блог web-программиста -

Все сталкивались с тем как написать ТЗ к тому или иному проекту или модулю?!

Скорее всего каждый из разработчиков сталкивался с этим.

Я вот тоже постоянно не знал правильного подхода к написанию этого самого ТЗ, но с течением времени накопились некоторые знания по данному вопросу.

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

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

Итого получаем по минимуму 4 поля + поле уникального ID в базе итого пока из 5 + можно уделить внимание такому полю как статус публикации фотографии, а значит полей уже 6, и вот так думая и раздумывая как должно все выглядеть получаете более точное представление а структуре БД и вашего ТЗ.

Изначально планировалось писать свою CMS и описать её здесь.

Но годы идут, а с ними и время и практика.

Этим я хочу сказать то, что новых статей по написанию собственной CMS на своём движке не будет.

Когда человек начинает программировать, он хочет написать что-то своё и начать пользоваться именно этим. 

И вот он момент истины. Садишься за компьютер, открываешь нужные программы и начинаешь думать с чего начать и для чего ты вообще сел за написания очередного велосипеда, спросите:"Почему велосипеда да еще и очередного?" ответ не заставит ждать, многие программисты писали для себя да и до сих пор пишут. Зачем? Тут ответ может быть разным, многим интересно понять как работает CMS и что это такое, почему нельзя обойтись без неё. 

Зачем же нужна CMS? Рассмотрим пример. У нас есть желание написать свой блог, допустим для того чтобы писать там свои мысли и(или) использовать его в качестве тетрадки чтобы не забывать как ты делал ту или иную задачу или писал модуль и т.д. Итак чтож такое CMS Content Management System а по-русски звучит просто Система Управления Содержимым или Контентом. Т.е. это инструмент для управления сайтом и его внутренностями.

 

demura.su

Разработка сайта на CMS или Framework. Что выбрать?

CMS похожа на набор конструктора Лего: красивая коробка с разноцветными детальками, из которых можно собрать что угодно. В рамках этой коробки, конечно. И если у вас есть Лего с хоббитами, то в пределах Средиземья вы – царь и бог.

Но населить свой мир инопланетянами или пиратами из той же коробки с хоббитами вы никак не сможете – их там просто нет, не положили! Этим CMS и расстраивает.

CMS (Content Management System, система управления контентом) – это софт, используемый для создания, управления и редактирования содержимого веб-сайта. И вот представьте, что этот софт – ваш уже купленный и собранный конструктор с теми же хоббитами, Звездой Смерти или средневековым кораблём.

А вы захотели подключить функцию, которой в вашем конструкторе нет. Построить там Хогвартс, населить его черепашками-ниндзя, пони или роботами! И чтобы дать волю вашей фантазии, придётся докупить новых персонажей или даже приобрести ещё один полноценный набор конструктора.

А какие CMS бывают?

Детальки от Лего, как и фломастеры, – на вкус и цвет разные. То есть вы можете встретить как узкоориентированные системы (специально под блоги, онлайн-магазины, форумы), так и универсальные. Некоторые можно использовать бесплатно, а за некоторые придётся заплатить. Большинство CMS пишется на языке PHP, поэтому на выходе мы получаем исходный код, в который можно внести изменения, правда для этого потребуются усилия разработчиков.

А вот и небольшой список наиболее популярных систем:

Этот список далеко не исчерпывающий. Поэтому если вы пользуетесь ещё чем-то и хотите об этом рассказать – добро пожаловать в комментарии под статьёй!

За или против CMS?

Новый сайт может быть для вас очередной игрушкой или, напротив, жизненно важным проектом. Но независимо от его роли в вашей жизни, старайтесь принимать взвешенное решение насчет веб-разработки на CMS. Просто сравните все за и против, которые мы нашли:

За CMS:

Против CMS:

«Натягивая» свой сайт на CMS, вы привязываетесь к конечной структуре, которая должна подходить вашему контенту, целям и потребностям бизнеса.

Эта модель может привести вас к великим свершениям, если вы перфекционист 80 уровня и делаете все последовательно, логично, при этом оставляя всех довольными…Но утопия продлится ровно до тех пор, пока директор или маркетолог не запросят что-то уникальное. И здесь мы хотим поговорить о Framework.

Framework («каркас» с английского) – это программная платформа, представленная набором библиотек. И если CMS похожа на Лего, то framework можно сравнить с 3D принтером – печатай что угодно, хоть тот же конструктор!

Какие типы Framework бывают?

Надо отметить, что существует множество видов framework для различных языков – Java, Ruby, Python, Groovy и т.д. Нас же интересуют PHP «каркасы». Одни из самых популярных в нашей команде это:

За или против Framework?

Конечно, и тут есть разнополюсные доводы. Мы приводим, ну а вы взвешиваете.

За Framework:

Против Framework:

Как мне лучше применить эти CMS и Framework?

А на сладкое предлагаем наш небольшой чеклист. Он поможет вам определить правильное направление при разработке следующего сайта.

Для каких проектов лучше использовать CMS?

Для каких проектов лучше использовать Framework?

Принимая решение...

При определённых обстоятельствах CMS может быть палочкой-выручалочкой для вашего сайта, но не стоит выбирать эту систему только из соображений бюджета. Поскольку, если вы хотите поддержать свой качественный продукт ресурсом такого же высокого уровня, то коробочного решения может и не хватить. Тогда стоит посмотреть в сторону Framework.

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

Поделитесь, будете ли вы пользоваться CMS/Framework на своем следующем сайте и чем пользуетесь сейчас?

webmartsoft.ru

Разработка сайтов и web-приложений, создание уникальных CMS

Перед созданием сайта важно точно понимать для каких целей Вы его создаете, проанализировать Вашу нишу и целевую аудиторию. Понимание этого в будущем значительно сократит Ваши расходы! Рассмотрим полноценный сайт (не одностраничник).

Разберем по пунктам:

Если бюджет ограничен небольшой суммой, то можно сделать все гораздо проще. Разберем также по пунктам:

zyubin.ru

Создание CMS с нуля. Глава 1. Концептуальная разработка унифицированной системы

CMS - Content Management System - это набор программ, написанных на языке веб-программирования, которые выполняют функции управления содержимым сайта. CMS обычно доступны для скачивания и использования всеми разработчиками: платно или бесплатно. Существуют и частные CMS, которые создают веб-программисты для собственных проектов и не распространяют свой продукт.

Сейчас разработкой CMS занимаются частные веб-разработчики, команды веб-разработчиков, сообщества программистов, обменивающихся готовыми разработками для популярных систем с открытым исходным кодом.

Вокруг популярных CMS собирается сообщество разработчиков, которые регулярно используют готовое решение для своих проектов и могут обсуждать свои задачи, проблемы и ошибки в кодах.

Также опытные разработчики могут вносить вклад в развитие проекта в виде модулей-плагинов-расширений, готовых шаблонов или переводов на языки.

Все CMS претерпевают изменения, связанные с исправлением ошибок, доработкой функций, расширением возможностей.

 

Разработка концепции

Перед разработкой нового ИТ-продукта нужно определить цели и конечный результат проекта. На этапе концептуальной разработки решаются вопросы:

 

Преимущества Open Source проектов

Системы с открытым исходным кодом конкурируют с коммерческими системами. Интернет как явление - это бесплатный быстрый доступ к информации и обмен информацией со всем миром. Поэтому CMS, как продукт, погруженный в Интернет, и созданный для Интернет, может содействовать идее Интернет, потому что:

 

Преимущества распространения CMS на коммерческой основе

 

Инструменты разработчика CMS

Проект - это его логика и структура. Для проработки структуры могут быть использованы средства проектирования программного обеспечения, например, язык UML.

В процессе создания, тестирования программного обеспечения разработчики должны выбрать и использовать инструменты:

 

Определив концептуальные особенности и приступая к проектированию, разработчик может столкнуться с необходимостью выбора правильного подхода к проектированию. Действительно, вопросы, возникающие при разработке, часто могут не иметь точного ответа без принятия решений и получения дополнительных сведений о системе. Решение одних вопросов порождает следующие. Важно выбрать несколько уровней абстракции представления моделируемой системы, на каждом из которых будут решаться вопросы из этой области представления системы.

Идея - Концепция - Проект - Функции - Продукт - Пользование продуктом - Программный код.

 

www.tlito.ru

Разработка CMS «с нуля»

В настоящее время для многих веб-сайтов системы управления контентом (CMS) разрабатываются индивидуально «с нуля». Это связано в первую очередь с тем, что стандартных функций существующих CMS может не хватать для реализации задуманной концепции сайтов. Как же выполняется разработка CMS «с нуля»? Об этом речь пойдет далее.

Системы управления контентом, созданные индивидуально под конкретный веб-проект, отличаются от готовых тем, что позволяют с самого начала разработать архитектуру системы таким образом, чтобы она максимально удовлетворяла поставленным перед проектом задачам.

Большие интернет-порталы, сайты с нестандартной структурой и функционалом — это основные виды веб-сайтов, для которых разработка CMS «с нуля» применяется чаще всего. Дело в том, что в подобных случаях адаптация под задачи проекта готовой CMS может занять даже больше времени и средств, чем создание индивидуальной системы управления контентом, ведь изменений приходится вносить очень много. В итоге адаптация готовой CMS оказывается экономически нецелесообразной.

Весь процесс разработки CMS «с нуля» можно разбить на несколько основных этапов. Первый этап — это, конечно же, разработка общей концепции CMS и составление технического задания. На этом этапе тщательно анализируются задачи создаваемой CMS, выбираются методы реализации тех или иных требуемых функций.

Следующий этап разработки СMS — это разработка ее ядра. Для разработки CMS «с нуля» используются различные технологии и языки веб-программирования. В частности, это может быть PHP, MYSQL, JavaScript, AJAX, PERL, ASP.NET, Oracle, Postgree, XML, XSL, XSLT и т. д. Выбор программных средств для создания CMS осуществляется исходя из особенностей поставленных перед CMS задач.

К примеру, в последнее время веб-программисты при создании CMS «с нуля» в ряде случаев не прибегают к использованию СУБД для работы CMS, в качестве источников данных используя файлы xml, файлы электронных таблиц (csv) или даже обычные текстовые файлы (txt). Такой подход к проектированию CMS может пригодиться, если применение СУБД слишком сильно увеличивает нагрузку на сервер и тем самым может помешать сайту нормально функционировать.

После разработки ядра CMS следует этап модульного программирования. Специалисты по веб-программированию создают предусмотренные архитектурой разрабатываемой CMS модули и компоненты, необходимые для реализации различных функций системы. Так, например, для CMS, под управлением которой будет работать интернет-портал могут потребоваться модули и компоненты для каталога предприятий, для доски объявлений, для форума и т. д.

После написания всех необходимых компонентов и модулей для создаваемой системы управления контентом наступает очередь этапа тестирования. Система тщательно проверяется на соответствие указанным в техническом задании на ее разработку требованиям, тестируется специалистами по специальным алгоритмам. Готовую CMS можно использовать для задуманного веб-проекта или же, при необходимости, для нескольких однотипных проектов.

Разработка «с нуля» системы управления контентом сложна и занимает достаточно много времени. Однако для нестандартных веб-сайтов, имеющих нехарактерные для обычных CMS функции, именно созданные «с нуля» CMS могут оказаться наиболее эффективными и выгодными.

Теги:разработка cms, разработка cms с нуля, системы управления контентом, разработка сайтов

webstudio2u.net

Практика разработки CMS

Сегодня для рождения сайта и жизни его в сети создана уютная обстановка. Множество CMS позволяет наполнить сайт необходимым функционалом и удобно управлять его содержимым. Даже бесплатные решения позволяют новичкам без проблем наполнять свой сайт информацией, не обладая при этом особыми знаниями (хотя это не всегда хорошо). Но в любом деле есть исключения, которые требуют особого подхода. Именно об особых случаях в веб-разработке я и хочу вам рассказать. Порой сайт должен обладать особым функционалом, или соответствовать определенным требованиям, которые ставит перед разработчиком (студией) заказчик. В таком случае приходиться разрабатывать дополнительные модули, и не всегда это удобно, а порой и не возможно сделать со «стандартной» CMS. В подобных случаях для сайта разрабатывается уникальный «движок», хотя это случается крайне редко. В большинстве случаев разработчики (студии) создают фирменные CMS по другим причинам, предлагая пользователю дополнительные удобства, функционал или (и) безопасность. О том, почему и зачем я пошел этим путем, и что из этого получилось речь пойдет дальше.

Предисловие

Сразу хочу сказать, что я отношусь к тем людям, которые жить не могут без переделывания, создания или усовершенствования (утилизации) разного рода устройств. Порой это качество заставляет «изобретать велосипеды» или делать что-то по-своему. Желание разобраться в том, как функционирует девайс, программа или даже вселенная, порой сводит на нет простое и спокойное пользование ими. Надеюсь на Хабре достаточно жителей, которые поймут о чем я, и им будет интересна история применения этого качества в веб-разработке.Я обожаю, когда мои мысли и идеи воплощаются в электронном виде и доступны людям по всему миру. Эту возможность Интернет дал каждому пользователю, и это прекрасно. Интернет состоит из наших мыслей идей и желаний, и каждый из нас может сделать его лучше. По крайней мере, я стремлюсь к этому и хочу помогать пользоваться его возможностями другим. И вот наступило время подумать о будущем моих проектов и сайтов, которые я бережно верстал для других. Пора было решить вопрос функционала, масштабируемости и управления контентом. И это не должно было стать проблемой, но не для меня. Я устанавливал различные CMS, но вместо удовлетворения во мне усиливались сомнения, а вместе с ними пришло вдохновение… Мне хотелось управлять не только контентом и модулями сайта, но и самой системой, — ее интерфейсом и функциями. Я стоял перед выбором: потратить n часов для освоения работы и структуры открытой CMS, или выделить (n x 10) часов для разработки своего «движка», который будет «подвластен» только мне. Первый вариант существенно экономил время и обладал некоторыми преимуществами, а вот реализация второго варианта требовала уйму времени и имела много недостатков. Но вышеуказанные качества и высокий уровень вдохновения не оставили мне выбора и я приступил к разработке.

Теория

Модульность, расширяемость и простота в управлении, — вот основные требования к проекту. Сама CMS должна обеспечивать лишь базовый функционал (управление страницами, структурой сайта и редактирование информации на нем) который по возможности расширялся бы. Основное требование это гибкая конфигурация сайта с помощью функциональных модулей. Они должны расширять функционал сайта в любых пределах, — от сайта-визитки, до интернет магазина. Очень важно было сделать администрирование сайта максимально простым и понятным. Я хотел, чтобы клиент уже через полчаса самостоятельно мог добавлять страницы, редактировать информацию, управлять разделами и меню на сайте. Поэтому надо было максимально упростить процесс администрирования, оставив лишь необходимые функции которые бы понадобились неискушенному владельцу сайта. Вот список базовых функций (операций) админ-панели CMS:

Этот функционал должен удовлетворить большинство пользователей (администраторов), тем более как показывает практика, заказчик зачастую ленится заниматься даже этой элементарной работой. Поэтому я решил сфокусироваться на удобном интерфейсе и эргономике, не нагружая ее лишними элементами.

Разработка

Все началось с файла index.php, потом появлялись необходимые каталоги, которые постепенно наполнялись скриптами. Менялась их структура, — код перекочевывал из файла в файл и попутно оптимизировался. Функции объединялись в классы а в базе данных появлялись новые таблицы и колонки. Проверка, отладка и доработка, — бессонные ночи, и усталые глаза. Впрочем, это знакомо каждому разработчику. Пожалуй, пора перейти от лирики до знакомства со структурой движка сайта и логикой его работы. Не буду утомлять вас ненужными деталями, и постараюсь сделать лаконичное и понятное описание.

Структура

Компоненты веб-сайта которые обеспечивают его структуру и наполнение, можно условно поделить на «логический» и «физический» уровень. Таблицы баз данных определяют структуру сайта, и его наполнение (7). Эти данные и являются «логическим» (информационным) уровнем. «Физический» (файловый) уровень(8) содержит файлы шаблонов и контент (4).Шаблон это текстовый файл (.html) с куском кода HTML, который определяет дизайн определенной части страницы и находиться в специальном каталоге. Страницы сайта условно поделены на шесть зон (заголовок, левая колонка, центр, правая колонка, нижняя линия и подвал), которые составляют главный шаблон (каркас). Для каждой зоны своя группа шаблонов условно деление, которой обуславливает только дизайн и название файла. То есть страница может быть построена как минимум из одного шаблона (например заголовка), и как максимум из шести. Состав шаблонов сохраняется в пределах раздела, и обуславливает внешний вид в нем. Разные разделы соответственно могут включать разные шаблоны и модули, если конечно в этом есть необходимость.Специальный каталог со скриптами php является модулем, и содержит основные включаемые файлы (скрипты) для сайта и админ–панели (свойства и настройки модуля). Сложным вопросом стал механизм включения модулей в основной исполняемый файл. Рассматривались разные варианты реализации этого процесса, но пришлось остановиться на «полуавтоматическом». Для вставки модуля в том или ином месте страницы, необходимо прописывать специальные «метки» (в виде специального HTML комментария), которые в процессе обработки (2) заменялись на содержимое индексного файла модуля и встраивались в общий исполняемый код. А уже в админ-панели CMS администратор определяет, какой именно модуль, куда и в какой раздел необходимо установить.Конечно это не идеальный способ, ведь для включения модуля необходимо править шаблоны, но так как CMS разрабатывается только для одной студии и является «закрытой», и все манипуляции будет осуществлять разработчик, а не заказчик, — этот механизм оказался вполне удобным.Теперь рассмотрим состав таблиц, которые отвечают за разделы и страницы сайта. Таблица разделав содержит такие основные колонки:

Таблица страниц состоит из колонок:

Кроме этих двух основных таблиц, существуют дополнительные таблицы для настроек, модулей, бэкапа и прочих нужд системы. структура и логика CMS

На рисунке изображена упрощенная схема структуры сайта работающего на CMS. Очень коротко можно описать суть механизма вывода элементов веб-страниц буквально двумя предложениями.При GET запросе (1), производится проверка его (URI) на отсутствие мусора, после чего извлекается идентификатор (3) страницы и раздела. После выдачи данных о разделе идет обработка и вставка шаблонов и модулей а так-же информации (текст и контент) из полей таблицы соответствующим запрашиваемой страницы. В противном случае — если страница или раздел не найдены, то осуществляется рэдирект на соответствующую страницу ошибки.

Практика

После долгого периода разработок наступил долгожданный период тестирования. Старый сайт-визитка был сделан для знакомого предпринимателя был выбран для практических испытаний. После разбития на шаблоны он зажил новой динамической жизнью, а я принялся за работу над первым модулем, — фотогалереи, которой не хватало этому сайту. Прошло много дней и месяцев, писались модули и устранялись баги. CMS успешно справляется с возложенными на нее обязанностями, — помогая мне воплощать свои идеи в жизнь не отвлекаясь на технические нюансы. Мне понравилась моя работа и я не жалею о потраченном времени. Но время не стоит на месте, ставя новые задачи и требования, поэтому готовлюсь к новым работам над CMS для улучшения ее удобства и безопасности. Планируется обновление интерфейса и рефакторинг кода, но это уже совсем другая история… Желаю всем удачи!

Автор: pashas

Источник

www.pvsm.ru

Разработка веб-сайта на базе ASP.NET Core и Platformus CMS / Хабр

В этой статье я хочу познакомить вас с Platformus CMS — молодой системой управления содержимым веб-сайтов (10-я альфа на момент написания статьи), построенной на базе не менее молодых ASP.NET Core и ExtCore framework. Подробно рассматривать архитектуру и другие технические детали мы сейчас не будем, а ограничимся упоминанием нескольких интересных фактов и затем сразу же попробуем CMS’ку в деле — создадим небольшой тестовый проект на ее основе.

Несколько интересных фактов

Платформус — бесплатная система управления содержимым с открытым исходным кодом. Она кроссплатформенная, модульная и расширяемая. Данные в ней представлены в виде объектов, которые описываются классами. Поддерживается мультиязычность.

Написана CMS на C#. Благодаря возможностям ASP.NET Core, она одинаково хорошо может работать на Windows, Linux и Mac. Сама исполняемая среда, необходимая для работы любого приложения на .NET Core, может быть как установлена отдельно, так и интегрирована непосредственно в само приложение. В качестве веб-сервера может использоваться IIS либо Kestrel (во втором случае приложение становится веб-сервером для самого себя и может работать самостоятельно или же быть встроено в контейнер вроде IIS или Nginx). В качестве хранилища данных на текущий момент поддерживаются Microsoft SQL Server, SQLite и PostgreSQL. С учетом всего перечисленного, можем получить конфигурацию, которой для работы не требуется вообще ничего стороннего — скопировал, запустил и пользуешься (может быть удобно для тестирования, например).

(В статье несколько десятков скриншотов.)

Приступаем

Если вы еще не работали с ASP.NET Core, то вот тут есть ссылки на все, что для этого понадобится.

Итак, скачиваем архив с 10-й альфой Платформуса по прямой ссылке (~ 9 МБ). Распаковываем его. (Как вариант, чтобы не выполнять самостоятельно все описанные в статье действия, можно скачать уже готовую демку, ссылка на нее есть в конце статьи.)

Чтобы запустить приложение, необходимо выполнить 2 команды в командной строке (предполагаем, что вы сейчас работаете в Windows-среде):

cd путь к распакованному архиву dotnet webapplication.dll Результат должен быть примерно следующим: Теперь открываем браузер и переходим на http://localhost:5000/:

Платформус работает! Приступим к наполнению нашего веб-сайта, для чего перейдем в бекенд (админку), кликнув по соответствующей ссылке на странице-заглушке:

Описание структуры данных

Как я упоминал выше, данные в Платформусе представлены в виде объектов. Например, любая страница является объектом. Если на странице необходимо отобразить список новостей, то каждая новость также будет отдельным объектом, опционально, со своей отдельной страницей (объекты бывают автономные и встраиваемые).

Объекты описываются классами. Каждый класс, в свою очередь, описывается членами класса, представляющими свойства или связи объектов этого класса, и источниками данных. По умолчанию в базе данных уже присутствует два класса: Base Page и Page. Первый является абстрактным и содержит такие базовые свойства страниц, как заголовок, META-description и META-keywords, сгруппированные в таб SEO. Большинству автономных объектов необходимы эти свойства, поэтому, чтобы их не дублировать в каждом классе, достаточно унаследовать соответствующие классы от Base Page. Второй класс представляет обычную страницу с HTML-содержимым. Он унаследован от Base Page и имеет еще одно дополнительное свойство — Content. Вот как выглядит список классов по умолчанию:

Классы

В качестве примера, который может продемонстрировать многие возможности CMS’ки, давайте добавим раздел с новостями на наш веб-сайт. Каждая новость будет снабжаться тегами и иметь свою собственную страницу с детальной информацией. Для начала, создадим класс News Page:

Т. к. каждая страница новости должна иметь заголовок, META-description и META-keywords, унаследуем наш класс от Base Page, выбрав его в выпадающем списке Parent class. Далее, укажем название нашего класса в единственном и множественном числе. Добавлять слово Page не обязательно, но, пожалуй, так нагляднее. Устанавливаем флаг Is standalone, означающий, что объекты этого класса будут автономными (т. е. будут иметь собственные URL). И напоследок, указываем название представления по умолчанию для будущих объектов нашего класса. Нажимаем Save. Наш класс News Page создан и добавлен в список:

Теперь создадим еще один класс — Tag. На этот раз объекты будут встраиваемыми, поэтому родительский класс не выбираем и флаг Is standalone не устанавливаем. Также, нет нужды указывать название представления по умолчанию:

Члены классов

Теперь определим члены класса News Page. Кликаем по ссылке Members в соответствующей строке и переходим к пустому списку (унаследованные от Base Page члены класса тут не отображаются):

Члены класса бывают двух типов — свойства и связи.

Значением свойства является простой текст, редактируемый различными редакторами, в зависимости от типа данных свойства. Например, есть однострочный текст, многострочный текст, HTML или изображение (в последнем случае значением свойства является URL изображения). Свойство опционально может быть локализируемым (т. е. его значение отличается в зависимости от культуры (языка)). В таком случае при редактировании свойства для каждой культуры отображается отдельный редактор. Также можно выводить значения ключевых свойств в списке объектов соответствующего класса.

Значением связи является другой объект или другие объекты указанного класса. Также, если один объект одного класса может быть связан только с одним объектом другого класса (например, статья может входить лишь в одну категорию), можно сгруппировать эти «дочерние» объекты относительно своего «родителя». Это может показаться немного запутанным. В конце статьи есть ссылка на пример на GitHub, там этот прием используется.

Первым делом опишем свойство Name — название новости:

На вкладке General мы указываем код, название и позицию члена класса. По коду мы затем будем получать значение свойств (но не связей!) объекта, название отображается в редакторе свойства или связи, а позиция определяет порядок следования этих редакторов.

На вкладке Property мы указываем тип данных нашего свойства. Для названия выберем Single line plain text — однострочный простой текст. Установим флаг Is property localizable, т. к. название новости будет разным для разных культур. Также, поскольку название является ключевым свойством, установим и флаг Is property visible in list, чтобы значение этого свойства отображалось в списке объектов класса News Page.

Т. к. мы описываем свойство, а не связь, ко вкладке Relation не обращаемся. Нажимаем Save, наш новый член класса добавлен.

Теперь аналогично опишем свойство Preview — укороченный текст новости, который будет отображаться в списке новостей. Т. к. в превью будет больше текста, чем в названии, в качестве типа данных свойства выберем Multiline plain text и флаг Is property visible in list на этот раз устанавливать не будем. Далее, точно так же добавим и свойство с основным содержимым новости — Content. Выберем тип данных Html, чтобы иметь возможность удобно форматировать содержимое.

Последнее свойство, которое я бы хотел добавить, — иллюстрация к новости. Все точно так, как и с другими свойствами, но в качестве типа данных выбираем Image и не устанавливаем флаг Is property localizable, т. к. иллюстрация у нас не зависит от текущей культуры.

Теперь добавим нашему классу связь с классом Tag, чтобы для новостей можно было указывать теги:

На вкладке General все привычно. Переходим на этот раз на вкладку Relation:

В выпадающим списке Relation class выбираем класс, объекты которого будут привязываться к объектам класса News Page.

Все, теперь все готово. Должно получиться как-то вот так:

Аналогичным образом опишем единственное свойство класса Tag — Name. (Напомню, что флаги Is property localizable и Is property visible in list должны быть установлены.)

Источники данных

Несмотря на то, что мы описали связь между News Page и Tag, привязанные объекты класса Tag не будут загружены вместе с соответствующим объектом класса News Page. Чтобы это произошло, нам необходимо добавить еще кое-что в класс News Page — источник данных. Источники данных определяют, какие объекты загружаются вместе с текущим объектом и как именно. Например, если между объектом-новостью и несколькими объектами-тегами существуют связи, то с помощью источников данных, опираясь на связи, мы можем как загрузить все теги новости, так и все новости тега. Также, мы можем загружать объекты даже при отсутствии связи с текущим. Например, чтобы вывести новости на главной странице. Все источники данных описываются C#-классами, реализующими интерфейс IDataSource, и мы можем добавлять новые такие классы. Например, можно добавить источник данных, который будет выводит 100 последних новостей с разбивкой по 10 на страницу. Либо источник данных, отображающий самые популярные товары интернет-магазина. Удобно, что в итоге все данные группируются в единственном объекте, который является моделью для своего представления. Это вполне в духе MVC.

Итак, вернемся к списку наших классов и кликнем на ссылке Data sources в строке класса News Page. Добавляем новый источник данных:

Сохраняем и получаем такой список:

Наполнение содержимым

Ну что же, теперь можно приступить непосредственно к наполнению нашего веб-сайта содержимым. Переходим в раздел Objects:

Все объекты разделены на 2 группы — автономные (Standalone) и встраиваемые (Embedded). Внутри этих групп они отображаются по классам. Так как объекты класса News Page нуждаются в объектах класса Tag, начнем наполнение с последних:

Создадим наш первый объект:

Как видим, страница редактирования объекта очень простая и содержит всего 2 поля: View name (для встраиваемых объектов его можно не заполнять, а хардкодить позже в родительском представлении, если нет необходимости иметь возможность изменять представление в дальнейшем из бекенда) и Name. Свойство Name мы описали в нашем классе Tag. Давайте создадим несколько тегов, у меня получилось вот так:

Наконец-то перейдем к нашим новостям. Создадим объект класса News Page. Полей здесь уже больше:

Для свойств, имеющих тип данных Image, загрузка изображений производится с помощью вот такого загрузчика-обрезчика (на текущий момент манипуляции с изображениями в ASP.NET Core еще не поддерживаются, поэтому реальное кадрирование на сервере не происходит, изображение сохраняется как есть, целиком, вне зависимости от выбранной области):

А вот так выглядит редактор связи, выбор тегов в нашем случае:

Давайте создадим еще несколько новостей, чтобы было нагляднее, и попробуем протестировать, что у нас в итоге получилось. Перейдем по одному из URL наших новостей, предварительно добавив перед ним идентификатор культуры: http://localhost:5000/en/news/2016-olympic-games. И… получаем 500-ю ошибку. Если посмотреть в консоль, то становится очевидно, что мы не создали представление NewsPage для нашего объекта:

Представления и окончательная настройка

Попробуем создать представление для страницы новости. Перейдем в папку \Views\Default нашего приложения. Здесь мы увидим единственное представление Page.cshtml (наша главная страница). Скопируем его, назовем копию NewsPage.cshtml и откроем для редактирования в любом текстовом редакторе:

В качестве типа данных модели представления указан dynamic, но мы с вами знаем, что в действительности это будет объект C#-класса ObjectViewModel, содержащий данные нашего объекта класса News Page.

Доступ к значениям свойств объекта производится так:

Model.Properties["MemberCode"].Html Доступ к объектам в источниках данных производится так:Model.DataSources["DataSourceCode"].Objects Модифицируем наше представление, например, таким образом (конечно, лучше было бы не описывать разметку, необходимую для отображения тега прямо тут, а сделать отдельное частичное представления _Tag для этого; мы так поступили для упрощения и наглядности):

Теперь обновляем страницу в браузере и видим такой результат:

Вот здорово, все работает! Осталось только вывести список новостей на главную. Для этого добавим в класс Page такой источник данных:

Как видим, C#-класс источника данных отличается от того, который мы использовали перед этим. Это более обобщенный источник данных, не учитывающий связей между объектами. Также, обратите внимание на поле Parameters. Здесь приведен идентификатор класса, объекты которого необходимо загрузить. В текущей версии Платформуса это делается не совсем изящно, без какого-либо визуального селектора.

Теперь перейдем к редактированию объекта главной страницы, уберем все лишнее содержимое. (Содержимое можно и не изменять, но открыть для редактирования и затем сохранить объект после добавления источника данных в его класс необходимо, иначе эта информация не подтянется в закешированный объект и не будет доступна представлению.)

Откроем теперь для редактирования представление Page.cshtml и изменим его примерно следующим образом:

Вот что мы получим теперь, если зайдем на главную страницу нашего веб-сайта в браузере:

Все готово! Конечно, было бы правильно добавить сюда еще, как минимум, меню или форму обратной связи, но сделать это очень просто (см. ссылку ниже), поэтому не будем на этом заострять внимание.

Заключение

Думаю, первый вопрос, на который необходимо ответить себе, прежде чем начинать разработку очередной CMS — «Зачем?». Если не вдаваться в подробности, то, как минимум, сейчас еще не так много CMS на ASP.NET Core, а мне эта платформа очень нравится и я верю в ее будущее.

Искренне надеюсь, что вам было интересно, а также, что получу критику, идеи, пищу для размышлений для дальнейшего совершенствования продукта — мы лишь в начале пути. Спасибо!

Я не выкладывал код именно этого проекта на GitHub, т. к. он очень похож на другой пример, который вы можете скачать и посмотреть, чтобы не проделывать все вручную.

habr.com


Prostoy-Site | Все права защищены © 2018 | Карта сайта