Background вместо img в виджете

#1 19 апреля 2021 в 10:08
Всем привет. Виджет контроллера контент list. Нужно вместо поле изображение выводить блок с фоном этого изображения. Всё ничего, если в $field['html'] только картинка, а если ещё поля то как это сделать?
  1. <?php foreach($items as $item) {
  2. foreach($item['fields'] as $field){
  3. // Тут какое то условие, что бы $item['photo'] выводилась один раз. Или что то типа этого.
  4. <div class="value text-muted" style="background:...">
  5. <?php echo $field['html']; ?>
  6. </div>
  7. }
  8.  
  9. }
Или может можно как то вытащить из $field['html'] путь к картинки…
#2 19 апреля 2021 в 10:31

Или может можно как то вытащить из $field['html'] путь к картинки...

Lora
получаем путь до картинки
  1. <?php echo html_image_src($item['photo'], 'small', true); ?>

// Тут какое то условие, что бы $item['photo'] выводилась один раз. Или что то типа этого.

Lora
Убиваем наше поле
  1. <?php unset($item['fields']['photo']); ?>
#3 19 апреля 2021 в 10:42
Не, так не работает. $field['html'] формируется отдельно в widget.php и в шаблоне не зависит от $item['fields']['photo']. Если менять то там. А там не хотелось бы).
Так придётся новый виджет писать(.
#4 19 апреля 2021 в 11:03
Файл templates/modern/controllers/content/widgets/list/list.tpl.php, инстант 2.14.1

  1. <div class="icms-widget__content_list content_list">
  2. <?php foreach($items as $item) { ?>
  3.  
  4. <?php
  5.  
  6. foreach($item['fields'] as $field){
  7. if ($field['name'] != 'photo') continue; // оставляем только картинку
  8. $bg = html_image_src($item['photo'], 'big'); // путь к картинке
  9. } ?>
  10.  
  11. <div class="content_list_item <?php echo $ctype['name']; ?>_list_item clearfix" style="background:url('/upload/<?php echo $bg; ?>') no-repeat center;background-size:cover;">
  12. <div class="icms-content-fields">
  13. <?php foreach($item['fields'] as $field){
  14.  
  15. if ($field['name'] == 'photo') continue; // здесь убираем картинку?>
  16. <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 } ?>>
  17.  
  18. <?php if ($field['label_pos'] != 'none'){ ?>
  19. <div class="title_<?php echo $field['label_pos']; ?>">
  20. <?php echo $field['title'] . ($field['label_pos']=='left' ? ': ' : ''); ?>
  21. </div>
  22. <?php } ?>
  23.  
  24. <?php if ($field['name'] == 'title' && $ctype['options']['item_on']){ ?>
  25. <h3 class="value">
  26. <?php if ($item['parent_id']){ ?>
  27. <a class="parent_title" href="<?php echo rel_to_href($item['parent_url']); ?>"><?php html($item['parent_title']); ?></a>
  28. &rarr;
  29. <?php } ?>
  30.  
  31. <?php if (!empty($item['is_private_item'])) { ?>
  32. <?php html($item[$field['name']]); ?>
  33. <span class="is_private text-secondary" title="<?php html($item['private_item_hint']); ?>">
  34. <?php html_svg_icon('solid', 'lock'); ?>
  35. </span>
  36. <?php } else { ?>
  37. <a href="<?php echo href_to($ctype['name'], $item['slug'].'.html'); ?>">
  38. <?php html($item[$field['name']]); ?>
  39. </a>
  40. <?php if ($item['is_private']) { ?>
  41. <span class="is_private text-secondary" title="<?php echo LANG_PRIVACY_HINT; ?>">
  42. <?php html_svg_icon('solid', 'lock'); ?>
  43. </span>
  44. <?php } ?>
  45. <?php } ?>
  46. </h3>
  47. <?php } else { ?>
  48. <div class="value">
  49. <?php echo $field['html']; ?>
  50. </div>
  51. <?php } ?>
  52. </div>
  53. <?php } ?>
  54. </div>
  55.  
  56. <?php if (!empty($item['info_bar'])){ ?>
  57. <div class="info_bar mt-2 d-flex p-0 bg-transparent border-0 text-muted">
  58. <?php foreach($item['info_bar'] as $bar){ ?>
  59. <div class="mr-2 bar_item text-truncate <?php echo !empty($bar['css']) ? $bar['css'] : ''; ?>" title="<?php html(!empty($bar['title']) ? $bar['title'] : ''); ?>">
  60. <?php if (!empty($bar['icon'])){ ?>
  61. <?php html_svg_icon('solid', $bar['icon']); ?>
  62. <?php } ?>
  63. <?php if (!empty($bar['href'])){ ?>
  64. <a class="stretched-link" href="<?php echo $bar['href']; ?>">
  65. <?php echo $bar['html']; ?>
  66. </a>
  67. <?php } else { ?>
  68. <?php echo $bar['html']; ?>
  69. <?php } ?>
  70. </div>
  71. <?php } ?>
  72. </div>
  73. <?php } ?>
  74. </div>
  75. <?php } ?>
  76. </div>
В строках 4-9 перебрали массив полей и выбросили лишнее, оставили только картинку.
В строке 11 прописали фоновое изображение.
В строке 15 убрали картинку.
#5 19 апреля 2021 в 11:09

Не, так не работает. $field['html'] формируется отдельно в widget.php и в шаблоне не зависит от $item['fields']['photo']. Если менять то там. А там не хотелось бы).

Lora
  1.  
  2. <?php foreach($items as $item) { ?>
  3. <?php foreach($item['fields'] as $field){ ?>
  4. <?php if ($field['name'] == 'photo') continue; ?>
  5. <div class="value text-muted" style="background-image: url(<?php echo html_image_src($item['photo'], 'big', true); ?>);">
  6. <?php echo $field['html']; ?>
  7. </div>
  8. <?php } ?>
  9. <?php } ?>
  10.  
Принудительно дёргаем путь до фотки через $item['photo'] и пропускаем поле с фото в цикле if ($field['name'] == 'photo') continue;

p.S Чебурек уже опередил меня с таким же вариантом laugh
#6 19 апреля 2021 в 11:24

опередил меня с таким же вариантом

Tolya
Да никто не соревновался с Вами)) К тому же, Ваш вариант, возможно, правильнее. Я не понял, что надо. И вместо блока с фоновой картинкой, как требовалось, запихнул эту картинку в фон блока записи))
#7 19 апреля 2021 в 11:26
Так, да. Работает. Спасибушки).


p.S Чебурек уже опередил меня с таким же вариантом

Tolya
Шустрый однако laugh
#8 19 апреля 2021 в 11:32

Спасибушки)

Lora
Спасибушки на чебурек не намажешь laughТеперь вы нам обязаны zloдо конца деньков своих.
#9 19 апреля 2021 в 11:47
Ну вот, попал в кабалу(.
#10 19 апреля 2021 в 14:05
В модерне не работает. Хрен с ним. Уже запарился просто.Башка не варит. Можно было просто отключить вывод поля с фоткой и всё).
#11 19 апреля 2021 в 14:23

В модерне не работает. Хрен с ним. Уже запарился просто.Башка не варит. Можно было просто отключить вывод поля с фоткой и всё).

Lora
С кабалы соскочить решили? Ну уш нет, у нас как в микрозаймах… laugh

Я сейчас в модерне попробовал, и всё работает. scratch
#12 19 апреля 2021 в 15:02

С кабалы соскочить решили?

Tolya
Чтобы не подсесть на кабалу пока не стоит пробовать stuk
#13 19 апреля 2021 в 15:14

Я сейчас в модерне попробовал, и всё работает.

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