Ситилизация поля "набор изображений"

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 27 апреля 2022 в 20:34

Всем привет. Столкнулся с проблемой, что не могу стилизировать поле «Набор изображений». Понимаю что нужно копать в images.php, но не могу понять как я могу получить общее количество изображений в поле и обернуть это в div для реализации своей задумки

Изображение
#2 27 апреля 2022 в 22:23

Если хотите по своему вывести картинки, нужно использовать свой шаблон.

#3 27 апреля 2022 в 23:29

 Lora, это и так понятно, но где и как получить количество изображений в поле?
через:
/assets/fields/images.tpl.php или /system/fields/images.php или в самом шаблоне контента? И где корректнее всегда делать верстку?

#4 28 апреля 2022 в 10:24

Lora, это и так понятно, но где и как получить количество изображений в поле?

hard990

Смотря где вы будите выводить картинки

#5 28 апреля 2022 в 13:14

Lora, это и так понятно, но где и как получить количество изображений в поле?

hard990

Смотря где вы будите выводить картинки

Lora

Во всех «типов контента»

#6 28 апреля 2022 в 13:51

Во всех «типов контента»

hard990

Если выводите в записи, то в шаблоне templates/modern/contrnt/default_item.tpl.php есть переменная $item.  Из неё и можно получить картинки. Например так  <?php echo html_image($item['image'], 'small'); ?>    

Где image, ситемное имя поля картинки, а small прессет                                

#7 28 апреля 2022 в 15:52

 Lora, а как вывести цикл, если изображений например 8, т.е нужно вывести все что есть в поле «набор изображений», при это нужно получить информацию о количестве изображений раньше и после вывести все эти изображения (нужно это, что я мог присвоить определенный класс блоку с изображениями) при этом чтобы работало увеличения изображение до прессета «max»?

#8 28 апреля 2022 в 16:28

Если нужно восемь, значит создадите восемь полей. И в шаблоне размещайте каждое поле, как нужно. Класс можно задать в этой конструкции

  1. <?php echo html_image($item['image'], 'small', 'тут alt', array('class' =>'red')); ?>

размер при клике в настройках поля.

#9 28 апреля 2022 в 17:13

 Lora, Вы не поняли, мне это нужно для поля «Набор изображений», а не для поля «Изображение»

#10 28 апреля 2022 в 17:19

 hard990, вы хотите получить сразу готовое решение? А как насчет самому исследовать переменную $item?

Если верно то что писал Lora, сделайте в  templates/modern/contrnt/default_item.tpl.php 

var_dump($item);   и смотрите как устроен этот массив. Смотрите в какой переменной лежит ваш набор изображений. Это тоже массив, количество элементов в массиве определяется с помощью функции count(). И далее зная количество элементов выполняете цикл for ($i=0; $i<count(); $i++). в зависимости от значения $i назначаете каждому изображению свой класс. 

#11 29 апреля 2022 в 01:33

Раньше вроде работал этот код, попробовал сейчас не пашет instantcms.ru/forum/vyvod-nabora-izobrazhenii.html#post-332435, может Zau4man подскажет

Вот такой код выведет в стандартном шаблоне

  1. <?php echo $fields['photo']['html']; ?>
Добавлено спустя 11 минут

Нашел на своем проекте, не знаю, сначала идет проверка на поле image потом вывод галереи из набора изображений

  1. <?php if (!empty($item['image'])){ ?>
  2. <div class="mb-5">
  3. <?php echo html_image($item['image'], $fields['image']['options']['size_full'], $item['title']); ?>
  4. </div>
  5. <?php } ?>
  6.  
  7. <?php if($fields_fieldsets) { ?>
  8. <?php foreach ($fields_fieldsets as $fieldset_id => $fieldset) { ?>
  9. <?php if (!empty($fieldset['fields'])) { ?>
  10. <div class="mb-5">
  11. <?php foreach ($fieldset['fields'] as $field) { ?>
  12. <?php echo html_image($item['gallery'], $fields['gallery']['options']['size_full'], $item['title']); ?>
  13. <?php } ?>
  14. </div>
  15. <?php } ?>
  16. <?php } ?>
  17. <?php } ?>

насколько правильно но все работает 

#12 29 апреля 2022 в 06:28

насколько правильно но все работает 

Михаил

Если целью ставили вывести изображение $item['gallery'] столько раз, сколько полей в типе контента, то всё отлично.

#13 29 апреля 2022 в 08:54

Да, ошибся немного не то, вот решение находил на форуме, 

  1. <?php
  2. $config = cmsConfig::getInstance();
  3.  
  4. $is_imgs=false;
  5. $fn="photo"; // поле
  6. $img_size = 'big'; // размер изображения
  7.  
  8. if (isset($fields[$fn]) && $fields[$fn]['is_in_item'] && !empty($item[$fn])){
  9. $images = cmsModel::yamlToArray($item[$fn]);
  10. unset($fields[$fn]);
  11. $is_imgs=true;
  12. }
  13. if($is_imgs){
  14.  
  15. $images_html = '';
  16. foreach($images as $key=>$paths){
  17. $images_html .= '<img src="'.$config->upload_host . '/' . $paths[$img_size].'" alt="'.htmlspecialchars(empty($item['title']) ? '' : $item['title'].' '.$key).'" />';
  18.  
  19. }
  20.  
  21. }
  22. ?>

там где нужно вывести изображение 

  1. <?php echo $images_html; ?>

или если нужна ссылка на большое изображение 

  1. <?php
  2. $config = cmsConfig::getInstance();
  3.  
  4. $is_imgs=false;
  5. $fn="photos";
  6. $img_size = 'normal';
  7. $img_size_full = 'original';
  8.  
  9. if (isset($fields[$fn]) && $fields[$fn]['is_in_item'] && !empty($item[$fn])){
  10. $images = cmsModel::yamlToArray($item[$fn]);
  11. unset($fields[$fn]);
  12. $is_imgs=true;
  13. }
  14. if($is_imgs){
  15.  
  16. $images_html = '';
  17. foreach($images as $key=>$paths){
  18.  
  19. $full = isset($paths[$img_size_full]) ? $paths[$img_size_full] : '';
  20. if($full){
  21. $images_html .= '<a class="img-'.$fn.'" href="'.$config->upload_host . '/' . $full.'"><img src="'.$config->upload_host . '/' . $paths[$img_size].'" alt="'.htmlspecialchars(empty($item['title']) ? '' : $item['title'].' '.$key).'" /></a>';
  22. $images_html .= '<script>$(document).ready(function() { icms.modal.bindGallery(".img-'.$fn.'"); });</script>';
  23. }else{
  24. $images_html .= '<img src="'.$config->upload_host . '/' . $paths[$img_size].'" alt="'.htmlspecialchars(empty($item['title']) ? '' : $item['title'].' '.$key).'" />';
  25. }
  26.  
  27. }
  28.  
  29. }
  30. ?>
  31.  
#14 2 мая 2022 в 22:54

 Михаил, спасибо.

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.