Откат изменений модификации

Тема в разделе "Ошибки и их решения", создана пользователем Sile9t, 15 янв 2025.

  1. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Вы не поняли, 1 скрин как раз и относится к storage/modification/catalog/controller/product/category.php. В следующий раз буду помечать. И правку изменений в нем, я и пытался сделать, но это не решило проблему, хотя возможно изменения еще вступили в силу и сервер просто выдает кэшированный ответ, буду еще стучаться.
    На счет модификатора, в админке я его удалил и несколько раз обновил страницу менеджера модификаторов и его кэщ, чтоб убедится в окончательном удалении. Возможно мне надо сделать какие дополнительные действия?
     
  2. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    То что было вам уже многократно предложено. Восстановить магазин на хостинге из бэкапа, который любой толковый хостинг выполняет раз в сутки.
    Бэкап конечно нужен тот, в котором вы ещё не успели ничего установить.
     
  3. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Раньше не делал такого, потому спрошу. Это оно?
    upload_2025-1-16_13-47-1.png
     
  4. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    У вас на сколько я понимаю нет сохранённых бэкапов. Увы.
     
  5. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Вы шутите?
     
  6. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    Я не знаю какого ответа вы ждете. Судя по скрину это выделенный сервер. На том же скрине , есть чекбокс позволяющий скачивать бэкап. Вы это делали? Так как на подобных серверах, проблемы с бэкапами , это головная боль самого пользователя как правило.
     
  7. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Понял, попробую скачать его, там сейчас создается архив с файлами. Вот только, что мне потом делать с бэкапом, если он скачается?
     
  8. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    Ничего. Вы же скачаете уже сайт в состоянии с ошибкой.
    Теперь видимо ваш путь в решении проблемы на уровне кода.
    Что мне кажется могло спасти ещё в первый час начала всей этой эпопеи.
     
  9. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Нет, я скачиваю состояние сайта до появления ошибки. Ошибка появилась 15 числа примерно в 16 часов, а я скачиваю резервую копию сделанную 15 числа в 1:56. Вы стебетесь надо мной что-ли?
     
  10. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    Вы производите очень много не нужных и судорожных движений.
    Мне нет смысла стебаться.
    Не беритесь за то, что вам не доступно на все 100 процентов.
    В данном случае речь про Opencart в целом.
    Откройте топик с поиском исполнителя. Иначе вы сейчас опять что то не то и не туда зальёте и лишите владельцев их бизнеса в виде интернет-магазина, окончательно и безвозвратно.
     
  11. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Давайте проследим последовательность нашего диалога:
    1) я создал обсуждение чтоб решить проблему;
    2) вы написали, что надо просто удалить модификатор и изменения сами отменяться;
    3) я написал, что удаление модификатора не решило проблему;
    4) вы написали, что надо искать решение в коде контроллера;
    5) я посмотрел код контроллера, поискал причину ошибки, попробовал вернуть контроллер к состоянию до добавления модификатора, что не привело к решению проблемы;
    6) вы посоветовали восстановить сервер с резервной копии;
    7) я прислал скрин предполагаемого восстановления сервера;
    8) вы написали, что прежде чем восстанавливать надо скачать резервную копию;
    9) я начал формирование архива резервной копии в точке, когда проблемы еще не было;
    10) вы утверждаете, что ошибка не пропадет и после этого, и что я делаю "очень много не нужных и судорожных движений".

    Что я пропустил?

    На счет "не беритесь за то, что не доступно вам на все 100 процентов". Знаете ли вы OpenCart на 100 процентов? Значит ли это, что и пытаться не стоит что-либо делать?
     
  12. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    Я помню что я писал. Это стандартный набор советов, при стандартных ситуациях. Откройте Гугл/Яндекс , вбейте в поиск любую ошибку, с точностью до 99 процентов в каждой теме будет тот же набор про бэкап, очистку кеша итп.
    Вот в этом основная причина. Если вы нашли место причины и купировали её, то топик бы на этом и закончился.
    Только то что не нужно браться за то, в чём не специализируешься.
    Уверен вы разберётесь.
     
  13. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Впервые встречаю слово "купировать", но да ладно. После просмотра бэкапа либо вернусь, либо закрою обсуждение.
     
  14. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    На будущее, тем кто найдет тему.

    Рекомендации по безопасной работе с Opencart
    При внесении любых изменений в интернет-магазине следуйте этим шагам, чтобы избежать ошибок и сохранить работоспособность вашего интернет-магазина:

    1. Создайте резервную копию (бэкап)
    Перед любыми изменениями убедитесь, что у вас есть актуальный бэкап. Так как бэкап является слепком сайта на момент его (бэкапа) создания. И не содержит например новых заказов, данных покупателей и учета состояния товара. И после восстановления из данного бэкапа вы получите магазин без этих новых данных.

    1.1. Проверьте наличие бэкапа
    • Посмотрите в панели управления хостингом, доступна ли функция создания автоматических бэкапов. Многие хостинги предоставляют эту услугу автоматически, раз в сутки. При использовании иных вариантов в виде выделенного сервера например, задача по регулярному созданию бэкапов является зоной вашей личной ответственности , так как хостер часто не делает этого вовсе.
    1.2. Создайте бэкап вручную если бэкапа нет:
    • База данных: Экспортируйте базу данных через PHPMyAdmin.
    • Файлы магазина:
      • Скопируйте все файлы, кроме папки image (она содержит неизменяемые данные).
      • Используйте файловый менеджер хостинга или FTP-клиент.
    Примеры FTP-клиентов:

    • FileZilla (бесплатный и удобный).
    • WinSCP (подходит для Windows, поддерживает работу с SSH).
    • Total Commander (универсальный для Windows).
    • ForkLift (оптимальный выбор для macOS).
    2. Проверьте содержимое устанавливаемых модулей
    2.1. Проверьте архив модуля
    • Распакуйте архив: Используйте программы, такие как WinRAR, 7-Zip или встроенные архиваторы.
    • Проверьте структуру файлов:
      • Обратите внимание на исполняемые файлы (.exe, .sh) или файлы с неизвестными расширениями.
      • Убедитесь, что файлы не пытаются перезаписать системные файлы самого Opencart.
    2.2. Проверьте модификаторы
    Модификаторы обычно находятся в папке system или в составе ocmod-архивов и представляют собой XML-файлы.

    • Проверьте пути и строки:
      • Пути, указанные в модификаторах, должны совпадать с файлами вашей сборки Opencart, вашей версии Opencart и используемого шаблона.
      • Если файл или строка отсутствуют/не совпадают, модификатор не сработает и может привести к серьезным проблемам, вплоть до отсутствия возможности использовать даже админку (для удаления данного модификатора) и серьезным ошибкам в самом магазине.
    2.3. Проверьте источник модуля
    • Загружайте модули только с проверенных сайтов (официальные маркетплейсы по Opencart, сайты известных разработчиков).
    • Если модуль скачан со стороннего ресурса или форума ( в топиках по обсуждению определённых задач), проверьте отзывы и репутацию автора.
    3. Создайте резервные копии изменяемых файлов
    Перед тем как редактировать файлы магазина вручную:

    • Скачайте файл, который собираетесь изменить.
    • Добавьте к названию файла пометку (например, category.php_ORIGINAL) и сохраните его.
    • Загрузите исправленный файл обратно на сервер.
    • Данный файл будет для вас тем самым бэкапом , содержимое которого всегда вернёт файл в его первоначальное состояние.
    4. Избегайте необдуманных действий
    Если вы не уверены в своих действиях или не выполнили вышеуказанные шаги, не вносите изменения. Это убережёт ваш магазин от сбоев.

    Что делать, если возникли проблемы?
    1. Очистите кэш модификаторов: В админке перейдите в "Дополнения > Модификаторы" и нажмите "Обновить".
    2. Восстановите магазин из резервной копии.
    3. Если бэкапа нет:
      • Замените изменённые файлы на их оригиналы, если уверены что в эти файлы не были внесены правки, которых конечно нет в оригинале.
      • Проверьте журнал ошибок Opencart для поиска причин.
    4. При серьёзных сбоях обратитесь к специалисту или в официальное сообщество Opencart. Постарайтесь не предпринимать случайных действий, в которых вы сами не уверены на все 100 процентов.
    Следуя этим рекомендациям, вы минимизируете риски и сохраните стабильную работу вашего интернет-магазина.
    В противном случае , вы можете потерять , как часть функций магазина, так и полностью магазин.
     
    Последнее редактирование: 17 янв 2025
    Blast нравится это.
  15. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Я связался с поддержкой, вкратце объяснил ситуацию, попросил их сделать резервную копию сайта по состоянию на 14 число (напомню, что ошибка появилась 15 числа примерно в 16:07) и предоставить ссылку для скачивания архива, с чем они любезно помогли. После скачки архива я убедился по логам, что архив соответствует состоянию сайта на 14 число

    После построчной сверки кода, выяснилось, что вся проблема в этой части кода (как копировать код из vim в буфер обмена я не разобрался, команды "+y и "*y не работают в моем случае). Когда закомментировал, сайта стал работать нормально.

    upload_2025-1-17_12-2-23.png

    Касательно модуля, я бы не устанавливал его, если бы в тз не было прописано "Реализовать возможность указания канонического URL через тег canonical для склейки дубликатов". Код на картинке выше, возможно появился в результате добавления этого модуля, хотя совпадений с действиями прописанными в xml файле [ Посмотреть вложение canonical-2.2.ocmod.xml ] я особо не вижу. Попробовал поиграть с ним и прихожу к выводу, что этот код не работает, либо работает не так как надо.

    Код выделенный в области Canonial Fix (картинка ниже), оказывается был еще до добавления модуля, в версии сайта за 14 число он есть, и работает вроде без нареканий.

    upload_2025-1-17_12-47-42.png

    Теперь, касательно вашего совета по работе с ошибкой. Контроллер жаловался, что получил null при вызове метода
    Код:
    getCategory($parts[0])
    , переменная
    Код:
    $parts
    должна содержать в себе
    Код:
    explode('_', (string)$this->request->get['path'])
    , т.е. значения из строки path из поступившего в контроллер запроса. Ваш совет был правильным, но без понимая того как было я бы копался в коде очень долго, при этом еще с боязнью что-то изменить с сломать. С бэкапом я смог сравнить код контроллера и быстрее понял какие изменения привели к ошибке.

    Теперь позвольте высказать претензии к вам. Если собрались помогать, то не надо осуждать того кому вы помогаете, а тем более обвинять его в некомпетентности. Это на пару вашими придирка провоцирует панику, результат, которой вы сами увидел, благо в данном случае все обошлось. А ваше высказывание - "Не беритесь за то, что вам не доступно на все 100 процентов" - просто шедеврально, пожалуй сделаю скрин, распечатаю и повешу у себя в комнате. Никто не знает какую-то конкретную область на 100 процентов, так сложилось что мир (как и все в нем) изменчив. Если следовать данному высказыванию, то получается я вообще ничего не могу делать и пытаться даже не стоит? Несмотря на дельные советы, общаться с вами было не очень приятно, но благодарю за оказанную помощь.

    За сим откланяюсь и закрываю тред.
     
    Последнее редактирование: 17 янв 2025
  16. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    На мне не стоит зацикливаться. Я не должен вам нравиться или наоборот.
    Теперь по вашей задаче с каноникал.
    В вашем первом сообщении указана сборка OcStore 2.3.0.2.3, что в вашей задаче является весьма важным пунктом.
    Сборка эта использует встроенный модуль Seopro, который находится в админке в разделе Система - Настройки вкладка Сервер.
    Его задача как раз убрать те самые дубли (склейки дубликатов) и проблемы с каноникал. Если конечно у сеошников это не от мира сего особые требования и видения данной тематики.
    По ссылке модификатор который подходит для данной версии и сборки. И раз у вас он вызывает ошибку, то причиной может быть как измененный файл контроллера и модели категории. Так и иные модификаторы , которые вносят правки в эти же файлы.
    Всё остальное опыт. Который в будущем научит любой процесс начинать с бэкапа. И избавит от необходимости считать, что вам кто то чем то в интернете обязан. Особенно когда вы не пострадавший владелец магазина. А исполнитель, взявший магазин в работу.

    А ошибок добавилось. Вот ещё и сайтмап теперь.
    https://luxautocar.ru/sitemap.xml
    И товары
    https://luxautocar.ru/index.php?route=product/product&path=747&product_id=22633
     
    Последнее редактирование: 17 янв 2025
  17. Blast

    Blast Продвинутый пользователь

    Сообщения:
    232
    Симпатии:
    82
    я замечу, что вы неправильно интерпретируете ошибку. контроллер не получил null при вызове метода, а вызвал метод getCategory не у какого-то объекта, а у переменной со значением null
    и ваш кусок кода getCategory($parts[0]) ни о чем не может сказать. приведите полный текст в этой строке и код выше, где явно будет видно как формируется переменная, у которой вызывается метод getCategory
     
  18. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    Вы правы, ошибки добавились, после чего я полез их исправлять по примеру с предыдущей ошибкой. Увидев изменения, которые я не делал, написал своему менеджеру, чтоб уточнить не передавала ли она или заказчик это же задание кому еще. Как оказалось, у заказчика есть свой штат сотрудников, одному из которых он передал то же задание. Нас он конечно не уведомил. Ну а далее пошла вот эта вся канитель.

    Где я писал, что вы мне что-то обязаны или хотя бы намекал на это? Откуда вы взяли, что я взял магазин в работу? Я работаю в найме в маленькой аутсорс компании. Мне дали задание, я его выполняю. Если бы мое резюме не отбрасывали на этапе скрининга из-за отсутствия опыта коммерческой разработки, с удовольствием работал бы на ASP.NET Core.
     
  19. Tom

    Tom Специалист

    Сообщения:
    908
    Симпатии:
    307
    Сделайте клон на техническом домене или просто под-домене. Ну раз такие кругом нюансы, что сайт ломают со всех сторон. Будет и бэкап и площадка для предварительных тестов.
     
  20. Sile9t

    Sile9t Новичок

    Сообщения:
    25
    Симпатии:
    2
    PHP:
    if (isset($this->request->get['path'])) {
       
    $path '';
       
    $parts explode('_', (string)$this->request->get['path']);

       
    $category_info $this->model_catalog__category->getCategory($parts[0]); //<- место где возникает ошибка
       
    ...
    }