Для чего группы полей?

Как пройти в библиотеку?

Для участия в голосовании необходима регистрация на сайте
#16 6 декабря 2016 в 15:22

что-то лишнее

Val
Тема называется не "Как внести что-то лишнее", а для чего это. Если оно лишнее, то зачем оно есть? А раз оно есть, то почему его нет. look
#17 6 декабря 2016 в 16:02
DK, smileтак оно и есть в том виде в котором должно быть или в котором задумывалось (страница пользователя и страница редактирования записи типа контента).
Следовательно:

Для чего группы полей?

Чтобы объединять близкие по значению или по смыслу поля и визуально отображать их при редактировании записей типов контента.
#18 6 декабря 2016 в 17:14

близкие по значению или по смыслу поля и визуально отображать их при редактировании

Val
Почему бы тогда не отобразить их на страницах сайта? Как свойства.

Видимо, я совсем заморочился… scratch
#19 6 декабря 2016 в 17:52

Почему бы тогда не отобразить их на страницах сайта? Как свойства.

DK
DK, и Jestik, и Val абсолютно правы: дальше можно обойтись одними стилями.
Да и вёрстку изменять ведь никто не запрещал:)
#20 6 декабря 2016 в 18:06

дальше можно обойтись одними стилями

Олег Васильевич я
Одними стилями дальше можно стилизовать только заголовок группы полей. Но не всю группу. Ладно, разберемся))

Всем спасибо. Тему не закрываю, вдруг кто-то захочет проголосовать, как пройти в библиотеку. glasses
#21 6 декабря 2016 в 18:18

Одними стилями дальше можно стилизовать только заголовок группы полей. Но не всю группу.

DK
Смотря что надо на выходе. Во всяком случае, для приведения к виду дефолтных свойств, лично мне ничего больше не надо.
#22 6 декабря 2016 в 18:22
Val, вы б лучше не тратили время на ерунду, а по коду высказались. В этом плане ваше мнение будет гораздо более ценным.
Заранее благодарен!
#23 6 декабря 2016 в 19:18

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

Олег Васильевич я
Попробую сделать что-нибудь. А не получится, ну и ладно)) Спасибо Вам за пример кода.
#24 6 декабря 2016 в 19:18
Лично для меня, это было бы очень полезной опцией. Поэтому поддерживаю вас, а кто желает поддержите тут github.com/instantsoft/icms2/issues/380
#25 6 декабря 2016 в 19:26

Поэтому поддерживаю вас, а кто желает поддержите тут

frukt
Есть разработчикам чем заниматься и кроме чтения наших писанин.
Решение ведь не требует вмешательства в системные файлы.
Следовательно, в наших силах. Сделаем, обратимся с предложением на гит.
#26 6 декабря 2016 в 20:36

это было бы очень полезной опцией

frukt
Дело в том, что этот функционал уже есть в системе. Осталось только вывести его в шаблоне.
Согласен с Олегом Васильевичем:

Сделаем, обратимся с предложением на гит.

Олег Васильевич я
#27 6 декабря 2016 в 21:31


Val, вы б лучше не тратили время на ерунду, а по коду высказались. В этом плане ваше мнение будет гораздо более ценным.
Заранее благодарен!

Олег Васильевич я

  1. <?php if (!empty($fields)) { ?>
  2.  
  3. <?php $fields_fieldsets = cmsForm::mapFieldsToFieldsets($fields); ?>
  4.  
  5. <?php foreach($fields_fieldsets as $fieldset){ ?>
  6.  
  7. <?php if ($fieldset['title']) { ?>
  8. <h4 class="field"><?php html($fieldset['title']); ?></h4>
  9. <?php } ?>
  10.  
  11. <?php if ($fieldset['fields']) { ?>
  12.  
  13. <?php foreach ($fieldset['fields'] as $name => $field) { ?>
  14.  
  15. <?php if (!$field['is_in_item'] || $field['is_system']) { continue; } ?>
  16. <?php if ((empty($item[$field['name']]) || empty($field['html'])) && $item[$field['name']] !== '0') { continue; } ?>
  17. <?php if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { continue; } ?>
  18.  
  19. <div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?> <?php echo $field['options']['wrap_type']; ?>_field" <?php if($field['options']['wrap_width']){ ?> style="width: <?php echo $field['options']['wrap_width']; ?>;"<?php } ?>>
  20. <?php if ($field['options']['label_in_item'] != 'none') { ?>
  21. <div class="title_<?php echo $field['options']['label_in_item']; ?>"><?php html($field['title']); ?>: </div>
  22. <?php } ?>
  23. <div class="value"><?php echo $field['html']; ?></div>
  24. </div>
  25.  
  26. <?php } ?>
  27.  
  28. <?php } ?>
  29.  
  30. <?php } ?>
  31.  
  32. <?php } ?>
С одной стороны все правильно, но не совсем хорошо получается. Например тип-контента статьи. Там есть служебные поля которые не выводятся при просмотре записи
  1. <?php if (!$field['is_in_item'] || $field['is_system']) { continue; } ?>
  2. <?php if ((empty($item[$field['name']]) || empty($field['html'])) && $item[$field['name']] !== '0') { continue; } ?>
  3. <?php if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { continue; } ?>
Но выше при выводе заголовка этой группы полей таких проверок нет и он выводится всегда когда есть в наличии. Поэтому надо как-то считать количество полей которое выводится внутри этого заголовка и если это количество >= 1 (т.е. хотя бы одно поле рендерится) тогда показывать заголовок группы, в других случаях не выводить его.
Но 2 раза перепроверять поля (до заголовка и после) не по феншую))
#28 6 декабря 2016 в 21:44
Val, ждём улучшений. Спасибо!
#29 7 декабря 2016 в 19:43
Олег Васильевич я, в файл ..\templates\default\content\default_item.tpl.php добавляем следующий код (взамен вывода полей — строка 20..33):
  1. <?php if (!empty($fields)) { ?>
  2.  
  3. <?php $fields_fieldsets = cmsForm::mapFieldsToFieldsets($fields, function($field, $user) use ($item) {
  4. if (!$field['is_in_item'] || $field['is_system']) { return false; }
  5. if ((empty($item[$field['name']]) || empty($field['html'])) && $item[$field['name']] !== '0') { return false; }
  6. if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { return false; }
  7. return true;
  8. } ); ?>
  9.  
  10. <?php foreach ($fields_fieldsets as $fieldset) { ?>
  11.  
  12. <?php if (!empty($ctype['options']['is_show_fields_group']) && $fieldset['title']) { ?>
  13. <h4 class="field"><?php html($fieldset['title']); ?></h4>
  14. <?php } ?>
  15.  
  16. <?php if (!empty($fieldset['fields'])) { ?>
  17.  
  18. <?php foreach ($fieldset['fields'] as $name => $field) { ?>
  19.  
  20. <div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?> <?php echo $field['options']['wrap_type']; ?>_field" <?php if($field['options']['wrap_width']){ ?> style="width: <?php echo $field['options']['wrap_width']; ?>;"<?php } ?>>
  21. <?php if ($field['options']['label_in_item'] != 'none') { ?>
  22. <div class="title_<?php echo $field['options']['label_in_item']; ?>"><?php html($field['title']); ?>: </div>
  23. <?php } ?>
  24. <div class="value"><?php echo $field['html']; ?></div>
  25. </div>
  26.  
  27. <?php } ?>
  28.  
  29. <?php } ?>
  30.  
  31. <?php } ?>
  32.  
  33. <?php } ?>
и выводим опцию ( ..\system\controllers\admin\forms\form_ctypes_basic.php между 196 и 197 строками):
  1. ...
  2. new fieldCheckbox('options:is_show_fields_group', array(
  3. 'title' => 'Показывать поля в группах', // <- если всё ok необходимо добавить языковую константу
  4. )),
  5. ...
Теперь в админке для нужного типа контента Настройки — Просмотр записи включаем вывод групп и проверяем как работает =)

p.s. в стили пока не заглядывал
#30 7 декабря 2016 в 20:31
Val, всё работает как надо. Как всегда у вас: на 5 баллов!
Надо б посоветоваться с разработчиками: не правильнее ли будет опцию "Показывать поля в группах" в настройки шаблона вынести.
Во всяком случае, если решение не попадёт в "коробку", так было б правильнее.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.