После повторного редактирования записи контента типа "Страница" получаю Notice

ЕСТЬ РЕШЕНИЕ
#1 10 октября 2022 в 21:00

Сайт на версии 2.15.2

Включал режим отладки (обновлялся с 2.15.1). Обновлялся стандартно, по инструкции, все как обычно. Прошло успешно.

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

Notice: Trying to access array offset on value of type bool in ..../public_html/system/controllers/activity/frontend.php on line 71 Warning: Cannot modify header information — headers already sent by (output started at .../public_html/system/controllers/activity/frontend.php:71) in ..../public_html/system/core/controller.php on line 1216

Стал разбираться. При создании новой страницы — все нормально. При повторном редактировании и сохранении только что созданной — предупреждение появляется, при этом страница все же обновляется. Посмотрел в код frontend.php. Функция updateEntry(). 71 строка — это return

Вставил вывод переменной и получил, что переменная $type равна bool(false). Что же тогда получается может быть в $type['id']? Получаю NULL и этот же Notice

  1. public function updateEntry($controller, $name, $subject_id, $entry){
  2.  
  3. $type = $this->model->getType($controller, $name);
  4.  
  5. list($type, $subject_id, $entry) = cmsEventsManager::hook('activity_before_update_entry', [$type, $subject_id, $entry]);
  6.  
  7. return $this->model->updateEntry($type['id'], $subject_id, $entry);
  8. }

Методом научного «тыка» нашел, что если включен стандартный компонент «Лента активности», то при редактировании страницы получаю предупреждение. Если отключаю этот компонент — предупреждение исчезает. Причем в настройках Ленты активности не стоит галка на контенте «Страницы». Впрочем, установка этой галки в этих опциях не меняет ситуацию.

Подскажите, пожалуйста, как можно исправить данную проблему не отключая компонент «Лента активности»?

#2 11 октября 2022 в 00:44

Идёт обращение к ячейке массива ($type['id']) без проверки наличия этой ячейки, да и массив ли это вообще.

Попробуйте таким образом переписать этот метод:

  1. public function updateEntry($controller, $name, $subject_id, $entry){
  2.  
  3. if($type = $this->model->getType($controller, $name)) {
  4.  
  5. list($type, $subject_id, $entry) = cmsEventsManager::hook('activity_before_update_entry', [$type, $subject_id, $entry]);
  6.  
  7. return $this->model->updateEntry($type['id'], $subject_id, $entry);
  8. }
  9. }

Или так:

  1. public function updateEntry($controller, $name, $subject_id, $entry){
  2.  
  3. $type = $this->model->getType($controller, $name);
  4.  
  5. list($type, $subject_id, $entry) = cmsEventsManager::hook('activity_before_update_entry', [$type, $subject_id, $entry]);
  6.  
  7. return $type ? $this->model->updateEntry($type['id'], $subject_id, $entry) : null;
  8. }
#3 11 октября 2022 в 09:47

 bestit, надо смотреть в базе данных в таблице cms_activity_types, есть ли там запись у которой controller = content и name = add.системное_имя_вашего_типа_контента. Если нет, то надо добавить, выглядит это примерно так

Изображение
Сегодня в 01:43
#4 11 октября 2022 в 12:27

 bestit, надо смотреть в базе данных в таблице cms_activity_types, есть ли там запись у которой controller = content и name = add.системное_имя_вашего_типа_контента. Если нет, то надо добавить, выглядит это примерно так

Loadырь

Спасибо, Loadырь! Вы и здесь успеваете помогать 😉

Прикладываю мои значения.

Изображение

Сравним две таблицы. Стандартные Страницы ('pages') здесь отображены в первой строке. У них свой одноименный контроллер. А все новые создаваемые типы контента проходят контроллер 'content' и автоматом сюда попадают при создании. При редактировании в мною созданных типах контента Notice не возникает. Также Notice не возникает при создании новой страницы. Возникает только при последующих ее редактированиях.

Второй момент, эта таблица меняется через настройки компонента 'Лента активности'. В столбце 'is_enabled' прописывается '1'. Но управлять можно почему-то только методом добавления контента 'add'. 

Изображение

Можно, конечно, попробовать вставить в БД такую строку: 

  1. INSERT cms_activity_types(is_enabled, controller, name, title, description)
  2. VALUES (0, 'pages', 'update.pages', 'Редактирование страниц', 'редактирует страницу %s');

Здесь я не уверен какое именно значение нужно прописать в столбец 'name': 'update.pages' или 'edit.pages'

Но, в целом, мне кажется, что это не совсем то, что в данной ситуации правильно делать. Ведь то, что редактируется и проходит контроллер 'content не вызывает этот Notice.

Поэтому то, что предлагает Сергей Сергеевич в моем случае мне кажется более правильным. И получается, что логическая ошибка присутствует где-то  в обработке контроллера 'pages' в самой InstantCMS.

Сергей Сергеевич, благодарю! Ваше решение помогло.

#5 11 октября 2022 в 12:53

Тогда встречный вопрос. В админке в Компоненты — Управление событиями, если отфильтровать события по названию «activity_before_update_entry» у вас в списке, что-то покажет?

Изображение
#6 11 октября 2022 в 13:09

Пусто

...Изображение
#7 4 марта 2025 в 10:51

Ошибка осталась  v2.17.1  при редактировании страницы.  

  1. Notice: Trying to access array offset on value of type bool in /home/f/f8657810h/sait/public_html/system/controllers/activity/frontend.php on line 71

 После отключении компонента лента активности и обновлении страницы, ошибка уходит, страница сохраняется.

Добавлено спустя 10 часов
Ошибка осталась  v2.17.1  при редактировании страницы.
Nikolay

Проверил на ново установленном и демо сайте, там все в порядке. Значит ошибка только у меня, какое то обновление стало криво.

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

Ребята есть решение. Это решение для тех кто обновлялся, а ошибка все равно осталась. С какой версии Инстанты она пошла не скажу и время на это тратить не хочется. И так к делу, смотрим новая установка:Изображение  теперь Смотрим строку где получается ошибка:  Изображение Сравниваем, исправляем, Ошибки больше нет, вот и вся проблема.

#8 11 марта 2025 в 15:43

на новой 2.17.2-git тоже есть на чистой, скорее всего возникает иза новых типов контента или когда включены галки в ленте активности для тех типов контента, которые отключены

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Похожее в блогах

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