Вложенные типы контента в двойке (Связи типов контента)

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Каталог со связанными типами контента

Насколько актуален для вас компонент Связи типов контента?

Очень актуально
Не нужен вовсе
Двойка из коробки все может
Нужен срочно, готов скинуться
Всего 54 голоса Опрос завершён
#166 13 октября 2016 в 17:26
Я за вложенные/связанные типы контента. Сейчас в двойке, связанные типы контента, есть в компоненте "группы". Но они не доведены до ума. Так же есть "вложенный" контент(не тип контента) в компоненте Мапс, но в связи с закрытостью кода и ограниченным функционалом, так же не то, что нужно.
Способов реализации может быть много, меня устроил бы вариант предложенный Loadырь, в посте 164, с оговорками которые возможно в его варианте реализованы, просто не показаны, а именно:
Есть ли возможность многоуровневой вложенности?
Есть ли возможность привязки разных типов контента, к разным категориям одного вида контента?
При переходе к списку "прикреплённого" контента, наборы работают?

Ещё как вариант подобия вложенных типов контента — это сделать возможность привязки полей, к категориям, по тому же принципу как сделаны свойства.
#167 13 октября 2016 в 18:07
lakomet, со свойствами тоже далеко не все гладко…
#168 13 октября 2016 в 19:40
интересно услышать требуемую производительность в цифрах
#169 13 октября 2016 в 20:45

производительность в цифрах

PIN
Тоже интересно, в картинках наверное выглядит вот так
Иллюстрация
#170 13 октября 2016 в 20:57

в картинках наверное выглядит вот так

Loadырь
Да, это правая сторона стойки №27 третьего этажа подходящего серверного кластера. Все остальные стойки кластера такие же.
На самом в варианте от r2 деле должно работать достаточно быстро. Вы знаете, как трепетно я отношусь к скорости движка. 😊 Так вот, на мой взгляд, связи добавят от 1 до нескольких быстрых SQL запросов по ключам (зависит от количества связанных типов) плюс от чуть-чуть кода до ещё одного вызова уже загруженного компонента контента для вывода связанных записей. Хотя r2 может реализовать связи и как-то по-другому. Это совсем небольшая цена за гораздо бОльшую гибкость, на мой взгляд.
#171 13 октября 2016 в 21:32
PIN, Loadырь, спасибо за разъяснения, видимо можно, но сложновато для понимания
Надо вникать
#172 17 октября 2016 в 10:44
Мы тут немного пообщались с Loadырем о сложностях реализации связей. Я думаю, что всё можно сделать достаточно просто.

Если речь идёт о связывании типов к типам один ко многим, как в варианте r2, то подвязывать их можно по id типов двумя вариантами:
1. Подчинённые типы в отдельной таблице связей: id строки, id основного типа, id подчинённых. Тогда добавляется один быстрый запрос с выборкой из неё по id основного. Даже при большом количестве связей, это меньше 1 мс.
2. Подчинённые типы в той же таблице `cms_content_types` в строке основного типа в отдельном поле в виде сериализованного массива. Тогда в нём же можно хранить и опции привязки (вкл/выкл, опции показа и доступа). Тут вообще всё быстро одним запросом и десериализацией этого поля.

А далее уже в подчинённом контенте в `cms_con_подчинённый` добавить поле id материала основного типа — к какой конкретно основной записи привязана эта подчинённая.

Можно использовать не id типов, а их системные названия. Возможно это будет удобнее для выборки, так как не нужно будет искать имя по id.

Можно добавлять в таблицу подчинённого контента не одно поле с конкретным названием, а несколько полей с составным названием — по одному на каждую связь с родителем. Например, если отзывы могут быть как по автопроизводителям firms, так и по их машинам cars, то добавлять два поля: parent_firms и parent_cars. Это позволит связывать подчинённые типы с несколькими основными. То есть, минимальными средствами и БЕЗ дополнительных тормозов получить связь многие ко многим. Я бы шёл именно таким путём.

Делать расширенную связь по другим полям, отличным от id я не вижу смысл. Это усложнит понимание и реализацию, прибавит тормозов и не добавит удобств.

Перебирать все подчинённые типы при выводе основной записи не нужно. Достаточно отобразить вкладки всех типов и загрузить всего один подчинённый контент — либо первый по списку для первой вкладки, либо другой открытой.

Вопрос с адресацией вкладок пока остаётся для меня открытым. Можно что-то типа site.ru/firms/bmv.html?tab=models и site.ru/firms/bmv.html?tab=comments. Лишь бы это "tab" можно было опционально менять на своё другое. Как крайний вариант, по основному адресу site.ru/firms/bmv.html заполнять первую вкладку (связанные записи первого типа контента в списке), а остальные подгружать аяксом. Но это не лучший вариант, так как для второй и далее вкладок не будет адреса, чтобы добавить в избранное или переслать.
Ещё важный момент, опционально отключать показ ярлыков вкладок или иметь возможность их стилизовать шаблоном.

Если нужно считать количество записей связанного контента, то придётся добавить ещё аналогичные поля с количеством в таблицах подчинённых типов. Если к примеру выше, то добавить поля count_firms и count_cars, например. Тогда в ярлычках вкладок подчинённого контента можно сразу отображать и количество. Это наглядно, удобно и не требует особых затрат по коду и скорости. Заодно по количеству записей для каждого подчинённого типа можно делать ярлык вкладки активным или неактивным, если это нужно.
#173 17 октября 2016 в 10:49
Fuze сказал, что при полном понимании способа реализации связей типов, он может подумать о стоимости такой разработки и включении её "в коробку". Я готов скинуться. Эффективный, на мой взгляд, вариант реализации я описал. Осталось выяснить, сколько нужно собрать. Игорь, уже можешь определиться с ценой вопроса?
#174 17 октября 2016 в 13:00

Я готов скинуться.

WebMan
и я.
Откройте сбор средств как на аудит. И кто сколько может.
#175 17 октября 2016 в 14:03

Откройте сбор средств

Zau4man
Поддерживаю.
#176 17 октября 2016 в 14:19

Эффективный, на мой взгляд, вариант реализации я описал.

WebMan
Описанные вами варианты вполне устраивают и меня.

Я готов скинуться.

WebMan
Я тоже готов скинуться, но давайте подождем ответа разработчиков.
#177 18 октября 2016 в 04:01
Само собой и я в теме. Вопрос, на чью работу конкретно и в каком виде/реализации?
#178 18 октября 2016 в 08:43

Вопрос, на чью работу конкретно и в каком виде/реализации?

AndroS
Тут вопрос немного в другом, так как к кому обращаться уже известно — "От авторов InstantCMS"
Вот только с чем к ним обращаться — пока нет ясного представления.

Так как тема этого форума звучит многосложно — тут и "Вложенные типы контента" и "Связи типов контента" и оба вместе.
Вложенные типы контента — тип контента имеет в себе "как-бы вместо полей" другие типы контента.
Связанные типы контента — В типе контента выводятся записи из других типов контента которые связаны друг с другом неким идентификатором, типа тегов или авторов или другого чего.
Оба вместе — различные вариации.

Примеры:
Вложенные типы контента
Типы контента: "Автопроизводители"
Есть "вложенные" типы контента "Мазда", "Ваз", "Мерс". В каждый из них "вложены" "Отзывы Мазда" и "История Мазда", "Отзывы Ваз" и "История Ваз", "Отзывы Мерс" и "История Мерс"
Соответственно в "Отзывы Мазда" пишутся статейки только про Мазду, в "История Ваз" только про историю Ваза. И при выводе "Автопроизводители" выводятся записи из типов "Мазда", "Ваз", "Мерс", при выводе "Ваз" подтягиваются записи из "Отзывы Ваз" и "История Ваз".

Связанные типы контента
Типы контента: "Автопроизводители", "Мазда", "Ваз", "Мерс", "Отзывы", "История"
Записи в одном типе контента завязаны с записями в другом типе контента неким идентификатором (категория, тэги, авторы и т. п.). Поэтому в типе контента "Отзывы" пишут отзывы про все авто, в "История" также про всех пишут, и при выводе записи в типе контента "Мазда" выводятся все записи про мазду из "Отзывы" и "История" по отдельности. При выводе записей из "История" есть ссылки (связи) на записи в другие связанные типы контента. При выводе записей из "Автопроизводители", выводятся связи и с "Мазда", "Ваз", "Мерс" и с "Отзывы", "История"

Оба варианта вместе
Типы контента "Автопроизводители", "Мазда", "Ваз", "Мерс", "Отзывы", "История"
Тут сочетание обоих вариантов например при выводе записей "Автопроизводители", подтягиваются как вложенные "Мазда", "Ваз", "Мерс". А при выводе одного из "Мазда", "Ваз", "Мерс", подтягиваются как связанные записи из "Отзывы", "История".

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

Поэтому исполнитель известен, а вот с ТЗ пока никак. Или я ошибаюсь?
#179 18 октября 2016 в 14:40
Loadырь, да, действительно, логика может быть разной… Я же думаю, должно быть приблизительно так:
Есть тип контента "Автопроизводители", а есть тип контента "Отзывы".
Далее в типах контента уже будут КАТЕГОРИИ этого типа "ВАЗ, мазда и т.д.". Соответственно, связывать нужно категории типов контента?
То есть, категория ВАЗ в типе Автопроизодители будет связана с категорией ВАЗ в отзывах… Казалось бы, логично, но в тоже время реализация будет более сложной, наверное.
Еще пример:
Имеет тип контента АВТОПРОИЗВОДИТЕЛИ, в нем категории с марками авто. Ко всем записям в типе контента АВТОПРОИЗВОДИТЕЛИ будет привязана запись из типа контента ОТЗЫВЫ. Универсальнее было бы привязывать к записям из определенной категории из типа контента. Потому как отзывы могут быть и как в отношении автопроизводителей, так и в отношении марок авто или даже конкретных моделях или автосалонов. Различия полей для заполнения будут настраиваться свойствами категорий.

Поэтому исполнитель известен, а вот с ТЗ пока никак. Или я ошибаюсь?

Loadырь
Не ошибаетесь. Просто нужно пригласить к обсуждению ТЗ Fuze и в идеале R2. На этапе ТЗ можно сильно накосматить. Важно не забывать об УНИВЕРСАЛЬНОСТИ решения.
#180 18 октября 2016 в 17:55
Да Loadырь правы, а мне нужно помимо связи категорий,

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