Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ShadowVasiliy
0 / 0 / 0
Регистрация: 15.05.2018
Сообщений: 3
1

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

15.05.2018, 14:05. Просмотров 737. Ответов 3

Добрый день.

Делаю конструктор лендингов и не могу определиться с подходом к хранению контента.
Есть 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2018, 14:05
Ответы с готовыми решениями:

Как научиться делать такие задания?
Требования Решить поставленную задачу используя: • PHP 5.6+ • ООП • PSR2...

Как в php сделать поиск? Вводить данные, нажимать на кнопку, скрипт по базе ищет данные и выводит
Можно ли в php сделать поиск? Вводить данные например, нажимать на кнопку и он...

как такие задачи оформить?
Друзья проблема в том что не так давно дали 2 задачи решить на PHP а я вот в...

Рейтинг и статусы такие как на сеоспринт
Как сделать рейтинг и статусы такие как на сеоспринт а то нигде немогу найти?

Как записать в массив данные из *.TXT и и правильно рассортировать данные по ячейкам массива?
файл index.php &lt;?php $site = (file('text.txt')); в файле text.txt...

3
Phantom-84
269 / 224 / 62
Регистрация: 15.09.2017
Сообщений: 1,064
15.05.2018, 15:50 2
Лучший ответ Сообщение было отмечено ShadowVasiliy как решение

Решение

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

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

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

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

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

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

Изображения и прочие медиа-объекты внутри текста обычно хранятся в виде специальных кодов, но в общем-то допустимо их хранить и в виде тегов, только не нужно сразу к ним прикреплять код конкретных просмотрщиков, плееров и т.п. Делайте привязку перед выводом, а еще лучше сразу на JavaScript.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2018, 16:40

Как прочитать данные из ячейки, и если она пуста добавить данные
Привет всем. У меня есть вот такой код: &lt;?php $arrqq = array($row-&gt;id); ...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru