Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 15.05.2018
Сообщений: 3
1

Как бы хранили такие данные?

15.05.2018, 14:05. Показов 900. Ответов 3

Author24 — интернет-сервис помощи студентам
Добрый день.

Делаю конструктор лендингов и не могу определиться с подходом к хранению контента.
Есть html-блоки из которых пользователь составляет страницу. В блоке он может менять текст и немного внешний вид.

Если не хочется читать, в конце есть выжимка.

Сильно упращенный блок выглядит так:
HTML5
1
<div class="block"><h1>Текст блока, который меняет пользователь</h1></div>
Проанализировав другие конструкторы, все они разделяют блок на "скелет" и данные блока. Скелет общий для всех, а изменяемые данные всегда разные. Если в конструкторе 100 блоков и 1000 раз их использовали, то будет 100 скелетов и 1000 данных.

При показе страницы они просто накатывают данные на скелет.

Разделенный блок выглядит так:
HTML5
1
<div class="block"><h1>*</h1></div>
И отдельно в базе хранится его контент:
Текст блока, который меняет пользователь

Я же не понимаю почему никто не хранит весь html-блок с изменениями целиком. Без разделения.

Плюсы подхода с разделением на скелет и данные:

1. При разделении мы один раз храним скелет и сколько угодно изменений, что сильно снижает занятое место. Ведь html-код в 3-10 раз больше текста на сайте.
2. Мы ограничиваем пользователя на внесение непредвиденных данных. То есть пользователь не сможет испортить что-то за пределами разрешенной области.

Плюсы второго подхода (когда html блок хранится полностью):

1. При изменении архитектуры мы можем легко добавить в html дополнительные атрибуты, классы. В редакторе задать больше гибкости. Например, мы в редакторе не предусмотрели изменения атрибута action в теге form, а потом захотели дать доступ к этому атрибуту и нам не нужно пересоздавать все скелеты, так как весь блок является персональной копией одного пользователя.
2. Более простой механизм работы и хранения данных.

Сухая выжимка:
Нужно хранить html код блоков. Есть два способа хранения.
1. Разделить блок на общие данные (скелет) и приватные (изменения пользователя), при показе страницы накатывать изменения на скелет
2. Не разделять и харанить с каждым изменением весь html-код блока.

Большинство используют первый способ. Я склоняюсь ко второму из-за большей гибкости и простоты.

Какой бы вы выбрали способ и почему?

Ах да, прошу прощения за PHP, но не нашел более подходящего раздела с подходящей аудиторией. Вопрос о web и серверном программировании. Прошу понять.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2018, 14:05
Ответы с готовыми решениями:

Как реализовать в Java такие входные данные?
Входные данные начинаются с числа Т - это количество наборов чисел, которые будут идти далее....

Unirest.post Непонятно как отправить такие данные
Всем привет. Пытаюсь отправлять данные методом post, повторяя активность браузера. В браузере...

Как вывести в Excel точно такие же данные, которые отображаются в DataGrid?
Всем привет, имеется проблема с выводом datagrid в excel. Excel вместо записей в полях datagrid,...

Написать класс Queue, в котором будут содержать такие данные как ФИО и возраст
Добрый вечер! Помогите написать класс Queue, в котором будут содержать такие данные как ФИО и...

3
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
15.05.2018, 15:50 2
Лучший ответ Сообщение было отмечено ShadowVasiliy как решение

Решение

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

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

Добавлено через 6 минут
div по прямому назначению редко хранится в базе данных. Чаще это происходит в качестве технических заплаток, например для оборачивания адаптивных таблиц, хотя оборачивание можно делать и непосредственно перед выводом после извлечения данных из базы данных.

Добавлено через 4 минуты
Про form и action вы тоже что-то непонятное пишете. Не могу себе представить ситуации, когда это действительно нужно. Да, это все в шаблонах обычно хранится.
1
0 / 0 / 0
Регистрация: 15.05.2018
Сообщений: 3
15.05.2018, 16:12  [ТС] 3
Phantom-84, спасибо! Вы помогли построить мысли в правильном направлении
В итоге вопрос теперь стоит в перетягивании границы

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

Если принять весь блок за данные, то у нас большая гибкость во время редактирования и создания страницы, потому что визуальный редактор конструктора будет иметь неограниченное влияние на html.
0
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
15.05.2018, 16:40 4
Я за самый строгий вариант первого подхода. Ужасно наблюдать, когда в базе данных хранятся теги со множеством атрибутов для раскрашивания текста и т.п. Старайтесь обходиться основными тегами для форматирования текста. В крайнем случае добавляйте в список поддерживаемых теги с классами, как отдельные теги.

Изображения и прочие медиа-объекты внутри текста обычно хранятся в виде специальных кодов, но в общем-то допустимо их хранить и в виде тегов, только не нужно сразу к ним прикреплять код конкретных просмотрщиков, плееров и т.п. Делайте привязку перед выводом, а еще лучше сразу на JavaScript.
0
15.05.2018, 16:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2018, 16:40
Помогаю со студенческими работами здесь

Не записать если уже есть такие данные
Не корректно выполняется условия. Пишет что Базе уже существует: дом {$num_home} на улице...

Проверка есть ли такие данные в таблице. Acess + Delphi
Ребят подскажите пожалуйста в одном вопросе. Делаю проект на дельфи + база аксесса. Данные из...

Существуют ли такие простые числа m и n такие что m! + m делится на n! + n
Существуют ли простые числа m и n такие что m! + m делится на n! + n.

Как создать функцию с текстбоксом и передавать такие параметры как номер текстбокса
Здравствуйте! Можете подсказать как написать функцию? Например, есть условие If...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru