404 при добавлении записи в УК (1.10.3)

+14
2.41K
Выход Icms версии 1.10.3 порадовал многих, но у этой версии есть несколько небольших ошибок, одна из них — ошибка 404 при добавлении записи в УК. Пользователь заполняет все, жмет добавить и видит 404 ошибку — вроде бы и жить можно, но нехорошо это для репутации, когда тебе звонят клиенты и тыкают на недостатки. После 6 звонка за день пришлось придумать хотя бы временное решение, вот оно:

В файле components\catalog\frontend.php в строке 1004 (я ранее вносил правки, номер строки может отличаться от оригинального) дописываем переменную Get (?added=1):
  1. cmsCore::redirect('/catalog/item'.$item['id'].'.html?added=1');
А в файле templates\ваша тема\special\error404.php находим
  1. <h2><?php echo $_LANG['404']; ?></h2>
  2. <p><?php echo $_LANG['404_INFO']; ?>.</p>
и меняем на
  1. <?php if(isset($_GET['added'])) {echo "<h2>Ваша запись добавлена и будет опубликована после проверки Администратором</h2> <p><a href='/'>Обрадоваться и вернуться на главную</a></p>"; } else { ?>
  2. <h2><?php echo $_LANG['404']; ?></h2><p><?php echo $_LANG['404_INFO']; ?>.</p> <?php } ?>
Php я уже подзабыл, помню только основы, потому такое простое решение. Клиент увидит сообщение о том, что у него не все плохо и уйдет на главную. Если проявить фантазию, страницу можно оформить (например, предложением рекламы на сайте).

Иллюстрация

PS. Вопрос к знатокам php — проверка наличия переменной GET может нести опасность? Думаю нет, но если есть замечания = отпишитесь в комментариях.
-1
Reborn Reborn 8 лет назад #
на чисто установленной системе баг подтвержден ?
0
Евгений Фоменко Евгений Фоменко 8 лет назад #
Предполагаю, да - так как у многих встречается (там же есть альтернативное решение). Лично я не особо и менял файлы, которые могут вызывать этот баг, но на чистой установке лично не проверял.
0
Max Max 8 лет назад #
Да, у меня подтвержден на локалке, версия instantCMS_20131015_v1.10.3
0
zotak zotak 8 лет назад #
На чисто установленной баг присутствует, проверенно, разработчик уведомлен.
+1
IngDesign (Магомед) IngDesign (Магомед) 8 лет назад #
Правильнее наверное так
Код PHP:
  1. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
заменить на
Код PHP:
  1. if($cfg['premod']) {
  2. cmsCore::addSessionMessage("Ваша запись добавлена и будет опубликована после проверки Администратором", 'success');
  3. cmsCore::redirect('/catalog');
  4. } else {
  5. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
  6. }
0
Max Max 8 лет назад #
По-моему эта часть лишняя.
Код PHP:
  1. else {
  2. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
  3. }
Ведь основное условие submit_item уже содержит этот редирект:
Код PHP:
  1. if ($do == 'submit_item'){
  2. bla-bla-bla
  3. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
  4. }
Спрашиваю ради интереса, така как в php 0.
0
IngDesign (Магомед) IngDesign (Магомед) 8 лет назад #
IngDesign:
заменить
0
Max Max 8 лет назад #
точно smile
0
lokanaft lokanaft 8 лет назад #
Проверку токена уберите, или повесьте какую нить аякс обновлялку тех же личных сообщений, чтобы сессия не умирала вместе с токенами.
+2
Pasha Pasha 8 лет назад #
Хм. Ну если уж совсем правильно, то достаточно перед
Код PHP:
  1. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
вставить
Код PHP:
  1. if ($inUser->id != 1 && $cfg['premod']) {
  2. cmsCore::addSessionMessage($_LANG['ITEM_PREMOD_NOTICE']);
  3. cmsCore::redirect('/catalog/'.$item['category_id']);
  4. }
Вот собственно и все, произойдет переадресация на текущий раздел каталога, а пользователь получит соответствующее уведомление. Остальные движения совершенно излишни.
0
Max Max 8 лет назад #
Т. е. так?
Код PHP:
  1. }
  2. if ($inUser->id != 1 && $cfg['premod']) {
  3. cmsCore::addSessionMessage($_LANG['ITEM_PREMOD_NOTICE']);
  4. cmsCore::redirect('/catalog/'.$item['category_id']);
  5. }
  6. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
  7. }
или так:
Код PHP:
  1. if ($inUser->id != 1 && $cfg['premod']) {
  2. cmsCore::addSessionMessage($_LANG['ITEM_PREMOD_NOTICE']);
  3. cmsCore::redirect('/catalog/'.$item['category_id']);
  4. }
  5. }
  6. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
  7. }
Че-то я запутался, у меня пока работает второй вариант.
+3
Pasha Pasha 8 лет назад #
Код PHP:
  1. if ($inUser->id != 1 && $cfg['premod'] && $cfg['premod_msg']){
  2. $link = '<a href="/catalog/item'.$item['id'].'.html">'.$item['title'].'</a>';
  3. $user = '<a href="'.cmsUser::getProfileURL($inUser->login).'">'.$inUser->nickname.'</a>';
  4. if ($opt=='add') { $message = $_LANG['MSG_ITEM_SUBMIT']; }
  5. if ($opt=='edit') { $message = $_LANG['MSG_ITEM_EDITED']; }
  6. $message = str_replace('%user%', $user, $message);
  7. $message = str_replace('%link%', $link, $message);
  8. cmsUser::sendMessage(USER_UPDATER, 1, $message);
  9. }
  10. // Вот это вставляем ---------------->
  11. if ($inUser->id != 1 && $cfg['premod']) {
  12. cmsCore::addSessionMessage($_LANG['ITEM_PREMOD_NOTICE']);
  13. cmsCore::redirect('/catalog/'.$item['category_id']);
  14. }
  15. // Конец ---------------------------->
  16. cmsCore::redirect('/catalog/item'.$item['id'].'.html');
0
Max Max 8 лет назад #
СПАСИБО.
-3
nedoriko nedoriko 8 лет назад #
А что вас 404 неустраивает? Перерисуйте, поставте перенаправление. Добавте надпись что страница появится после проверки модератора и тд.
+1
Евгений Фоменко Евгений Фоменко 8 лет назад #
Спасибо что подхватили тему - вместе мы проблему решили, пусть каждый выбирает для себя, какой вариант ему больше по душе. Лично я просто не мог и не хотел влазить в скрипты ибо не совсем хорошо разбираюсь ))
0
Су-27 Су-27 8 лет назад #
Спасибо - плюсанул. В следующем релизе Fuze всё исправит и seo добавит...хочется hoho
0
Евгений Фоменко Евгений Фоменко 8 лет назад #
Раз тут много людей, у которых уже открыт frontend.php, давайте посмотрим, что можно сделать с пагинацией?
Вы знаете, что последняя страница в пагинации (к примеру, http://kirkat.com.ua/catalog/1005-3) на самом деле не последняя, скрипт отдает страницу http://kirkat.com.ua/catalog/1005-4 и все последующие! Для сео это мрак.

Или может решение кто-то уже видел?
0
*beez* *beez* 8 лет назад #
вот тутрешение от Гуглбота но оно для 1.9 и для статей. адаптируйте если знаете как (я не знаю)
по поводу мрака.. много ли несуществующих страниц пагинации попало в индекс?
0
Евгений Фоменко Евгений Фоменко 8 лет назад #
Да,я тогда поднимал вопрос,пока гуглобот и ребята не взялись и не сделали. В индексе такие страницы светятся, какое-то время,потом выпадают... Я думаю если такие страницы оптом загнать в индекс, можно валить сайты конкурентов,работающих на инстанте. Это только теория,но зачем рисковать?
+1
Евгений Фоменко Евгений Фоменко 8 лет назад #
1. Проверил индекс из фактически 3 страниц в индексе 4200 (пруф - https://www.google.com.ua/#q=site:kirkat.com.ua%2Fcatalog%2F1005- ). У меня всего 600 рубрик в каталоге и де факто 20 000 лишних страниц. Ай яй яй.

2. Что касается решения гуглобота - тут я вынужден извиниться, нужно было сначала посмотреть, а потом задавать дурные вопросы. Его решение работает, эта часть кода такая же, как и была в 1.9.

3. Ушел "рубить дубли".
0
ermakover ermakover 8 лет назад #
Точно такая же ошибка присутствует на 1.10.3 при добавлении записи в Блог Клуба.
-1
Андрей Андрей 8 лет назад #
это все временное решение. я просто отключил модерацию
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.