Как вывести кастомное поле Типа контента в каждом комментарии?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 18 августа 2024 в 13:41

К типу контента с системным именем articles добавлено новое поле с именем my_field

Мне нужно вывести это поле в каждом комментарии к статье

Для этого в файле

templates/modern/controllers/comments/comment.tpl.php

внутрь цикла <?php foreach($comments as $entry){

добавляю

  1. $model = cmsCore::getModel('content');
  2. $articles_fields = $model->getContentItem('articles', $entry['target_id']);
  3. echo $articles_fields['my_field'] ;

Но такое решение имеет два недостатка -

  1. модель дергается каждым комментарием. Что наверное не есть хорошо.
  2. target_id будет корректным только у комментариев первого уровня, у вложенных комментов target_id уже комментарий родитель, а не статья. А нужно для всех комментов.

Подскажите как можно решить задачу? Желательно на пальцах, я еще в начале пути изучения PHP

Добавлено спустя 5 часов

Второй пункт снимается, target_id это всегда ИД поста к которому принадлежит комментарий, вне зависимости от уровня. Но дергать модель в цикле на каждый коммент по прежнему кажется плохой идеей.

#2 18 августа 2024 в 18:15

 Hold my beer, судя по коду github.com/instantsoft/icms2/blob/bb96c18544148da1e58293812ded78890784160a/templates/modern/controllers/comments/list.tpl.php#L56 в данный файл действительно не приходит информация о записи типа контента.

Тогда вы можете обернуть ваш код в проверку, делался запрос уже или нет, например так

  1. if(!isset($articles_fields)){
  2. $model = cmsCore::getModel('content');
  3. $articles_fields = $model->getContentItem('articles', $entry['target_id']);
  4. }
  5. echo $articles_fields['my_field'] ;

Тогда все, что внутри проверки isset, выполнится только один раз...

#3 19 августа 2024 в 07:32

Спасибо, вы мне очень помогли! Вопрос решен.

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