Как вывести ID поля в списке контента ?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 9 марта 2021 в 07:46
Добрый день! Lля гибкости настроек стилей CSS каждого элемента в списке появилась необходимость к классу добавить ID конкретного поля на подобии системного имени которое выводится кодом:
  1. <?php echo $field['name']; ?>
Но вот чтобы вывести ID а лучше KEY этого поля уже так не получается. Выводил подстановкой, но видимо это не верное решение
  1.  
  2. <?php echo $field['id']; ?>
  3. или
  4. <?php echo $field['key']; ?>
  5.  
В общем полная строка кода для item выглядит так
  1. <div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?>_<?php echo $field['id']; ?>">
Прошу помощи у сообщества в этом вопросе. Спасибо…
#2 9 марта 2021 в 10:00
Не совсем понятно, про какой конкретно список Вы говорите и id чего именно Вам нужно.
Вы всегда можете посмотреть содержимое нужной переменной
  1. <?php var_dump($field); ?>
или в "Расширенной отладке"
  1. <?php dbg($field); ?>
Если говорить про дефолтный список записей, то в нём переменная $field не имеет id
Зато id есть у каждой записи в списке

Так что тут для уникального ключа можно использовать сочетание $field['name'] поля и $item['id'] записи через подчёркивание:
  1. <div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?>_<?php echo $item['id']; ?>">
#3 12 марта 2021 в 08:43


Так что тут для уникального ключа можно использовать сочетание $field['name'] поля и $item['id'] записи через подчёркивание:

WebMan
Спасибо за развернутый ответ. Мне нужно получить ID ЗНАЧЕНИЯ поля списка. Т.е. value_ID. Попробую обьяснить по другому чтоли. на при мере скрина записей.


Вот 4 записи из списка. У них есть поля с выборкой из существующего списка. Естественно они у некоторых записей повторяются. Мне нужно просто получить уникальное значения этих полей. Оно же как то привязывается к записи. Я так делал для записей и получал ID а вот для списка не могу повторить это. В записи это выглядит как <?php echo $item['ehlement']; ?> и на выходе получаем id элемента. Я не знаю может как то не правильно объясняю. В общем нужен такой результат class="field ft_list f_ehlement_(тут ID или KEY значения поля)". Другими словами мы получаем класс который будет повторяться в некоторых записях.т.к у них одно и то же значение.

В реализации вроде не должно быть сложностей, получить ID значения поля списка, и все на этом
#4 12 марта 2021 в 08:50
В общем решил дать ссылку чтобы было более наглядно
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст


Там все видно даже в коде где красным отмечено должно быть ID значения из списка ft_list



Может как то так ?? Но не работает

  1. <?php echo $field['value']['id']; ?>
#5 12 марта 2021 в 15:29

Там все видно даже в коде где красным отмечено должно быть ID значения из списка ft_list

Clear
Если правильно понял, на самом деле вам нужен ключ выбранного значения в полях типа "Список" а не ID поля.
Если верно, то можете так попробовать:
  1.  
  2. <?php if($field['type'] == 'list') { echo '_'.array_search($field['html'], $field['handler']->items); } ?>
  3.  
p.s. только не понятно что вы там хотите вывести для поля типа "Заголовок" (на картинке тоже красным отмечено)
-----------------------
Имейте ввиду: пишет ещё тот знаток PHP))
#6 12 марта 2021 в 20:19
Похоже, Вам нужно значение поля 'ehlement'. Поля записей находятся в переменной $item:
  1. $item['ehlement']
Для более точного ответа покажите вывод var_dump() или dbg() двух переменных $field и $item в Вашем шаблоне.
#7 14 марта 2021 в 06:38

p.s. только не понятно что вы там хотите вывести для поля типа "Заголовок" (на картинке тоже красным отмечено)

Олег Васильевич я
Заголовок я случайно отметил, там не нужно, спасибо.

<?php if($field['type'] == 'list') { echo '_'.array_search($field['html'], $field['handler']->items); } ?>

Олег Васильевич я
нет по прежнему этот вариант не выводит значение но работает как раз только для списка



Вот на этом скрине видно что ссылка элемента имеет вид href="/heroes?ehlement=1020", вот эту цифру 1020 подставить к классу нужно и все.

#8 14 марта 2021 в 06:39

Для более точного ответа покажите вывод var_dump() или dbg() двух переменных $field и $item в Вашем шаблоне.

WebMan
Какой там шаблон, это дефолтный Модерн
#9 14 марта 2021 в 10:30

Какой там шаблон, это дефолтный Модерн

Clear
Это и есть шаблон 😊
Вы же правите код в каком-то файле. Вот там и покажите вывод var_dump() или dbg() двух переменных $field и $item внутри цикла списка.
#10 14 марта 2021 в 14:54

Вот на этом скрине видно что ссылка элемента имеет вид href="/heroes?ehlement=1020", вот эту цифру 1020 подставить к классу нужно и все.

Clear
В списке тот код не сработает. Пробуйте так (на примере default_list.tpl.php):
строку 37 замените на:
  1.  
  2. <div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?><?php if($field['type'] == 'list' && !empty($field['options']['is_autolink'])) { echo '_'.$item[$field['name']] ; } ?> <?php echo $fields[$field['name']]['options']['wrap_type']; ?>_field" <?php if($fields[$field['name']]['options']['wrap_width']){ ?> style="width: <?php echo $fields[$field['name']]['options']['wrap_width']; ?>;"<?php } ?>>
  3.  
Если хотите изменять селектор и для тех полей этого типа, у которых автоссылка не включена, уберите из условия:
  1. && !empty($field['options']['is_autolink'])
------------------
p.s. я б в таком случае таки оставил "коробочный" селектор без изменений и добавил свой
#11 15 марта 2021 в 19:54

В списке тот код не сработает. Пробуйте так (на примере default_list.tpl.php):

Олег Васильевич я
Фуф да работает этот вариант, Наконец то. Спасибо.

p.s. я б в таком случае таки оставил "коробочный" селектор без изменений и добавил свой

Олег Васильевич я
Да в этом нет необходимости я же делаю через дочерний шаблон через manifest.php и всегда могу поменять. Об этом есть ПОСТ
Спасибо большое всем кто помогал.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.