404 ошибка "Не изменять URL при редактировании записи"

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#16 23 апреля 2017 в 07:04
OpenServer
Локальный комп
Чистая CMS
Чистая база

При настройках, как у Pasechnik, если создать запись, НО НЕ ПЕРЕЗАГРУЖАЯ СТРАНИЦУ перейти к редактированию записи, появляется аналогичная проблема.

В общем я поковырялся в коде — нарыл часть ответа на вопрос:
В файле /system/controllers/content/actions/item_edit.php (строка 248)
  1. $item = $this->model->updateContentItem($ctype, $id, $item, $fields);
обновление проходит нормально, все поля записываються в базу данных...
Если в 249 строку того же файла/system/controllers/content/actions/item_edit.php вставить код
  1. if(!isset($ctype['name']) || !isset($item['slug'])){
  2. die($ctype['name']. ' OR ' . $item['slug'] .' NOT SET! ');
  3. }
то ответ будет таким:
$ctype['name'] — POSTS, $item['slug'] — не существует.

---------------------------------------------------------------------------------------------

В общем я хотел подключить автора статей на мониторинг новых комментариев автоматически. Решил не изобретать велосипед — подключить через имеющийся функционал
  1. $comments_tracks = cmsCore::getModel('comments');
  2. $comments_tracks->addTracking($item['user_id'], 'content', $ctype['name'], $item['id']);
в итоге функция getTargetItemInfo() возвращает поле TITLE с названием статьи. Поле URL — пустое


В обоих случаях куда-то девается ссылка.
#17 23 апреля 2017 в 09:24
В общем я нашел причину: при создании записи контента, и при включенном кешировании (на файлах), система создает два почти одинаковых файла в пути /cache/data/content/item/$content_type — отличаются друг от друга только отсутствием содержимого полей slug и date_last_modified.

Временный костыль: заменить (примерно 1737 стр.) файла /system/controllers/content/model.php код
  1.  
  2. $this->update($table_name, $item['id'], array(
  3. 'slug' => $item['slug'],
  4. 'date_last_modified' => null
  5. ));
на код
  1. cmsCache::getInstance()->clean("content.item.{$ctype['name']}");
  2.  
  3. $this->update($table_name, $item['id'], array(
  4. 'slug' => $item['slug'],
  5. 'date_last_modified' => null
  6. ));
#18 23 апреля 2017 в 13:59
Виктор, спасибо! Этот баг, как хитрый суслик — никто не видит, а он есть зараза. smile

Fuze, хотелось бы увидеть официальное решение, без необходимости правки системных файлов в дальнейшем.
#19 23 апреля 2017 в 15:29
Еще одна проблема с 404.

Пагинация доски объявлений, последняя страница всегда — 404 ошибка.

Пример:
site.ru/board?page=349 — материалы есть и отображаются.
site.ru/board?page=350 — материалов нет, но есть page=350 с перенаправлением на 404 страницу.

Как убрать из пагинации ссылку на несуществующую последнюю страницу?

В админке так же.
Последняя страница панинации всегда отображается, хотя на ней нет материалов.
Отображается пустой.

site.ru/admin/content
Прикрепленный файл
20170423151835_jfekh.jpg 80 Кб
#20 23 апреля 2017 в 22:15
fixed. Спасибо всем за участие и дебаг.
#21 24 апреля 2017 в 18:49

Пагинация доски объявлений, последняя страница всегда — 404 ошибка.


В настройках было установлено 15 публикаций на страницу, изменил на 30 — ошибка пропала. Проявляется при 1-27. Не знаю что за ерунда, видимо частный случай, проверить на дефолте нет возможности.

Ребята, у кого есть проект с большим количеством объявлений. Измените количество записей в списке до 15-25 и проверьте на предмет 404 ошибки на последней странице пагинации.
#22 24 апреля 2017 в 21:17
Все же докопался, мой косяк был. smile
С 404 проблем больше нет. Тему закрываю. Всем спасибо!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.