Opencart - Не Работает Ocmod?

Тема в разделе "Общие вопросы", создана пользователем admin, 17 июн 2016.

  1. TopicStarter Overlay
    Offline

    admin Команда форума Администратор

    Сообщения:
    2.321
    Симпатии:
    76.073
    Репутация:
    170
    Иногда система OCMOD на OpenCart может перестать работать во фронтенде, и вы можете потратить какое-то время в поисках причины. Кажется, это довольно частая проблема, потому вот несколько советов по тому, как самостоятельно решить проблему, связанную с OCMOD.

    Что вызывает эту проблему?
    В 100% случаев, которые возникали у нас, проблема была вызвана присутствием константы DIR_CATALOG в файле config.php. Поскольку по умолчанию эта константа присутствует только в панели администратора, функция модификации проверяет, определена ли она и, если да, то ищет модификации в папке администратора. Таким образом, когда эта константа присутствует в части каталога, OpenCart путается и ищет модификации в папке администратора, но они обычно не присутствуют там, или эти модифицированные файлы имеют совершенно другую логику, и начинают возникать ошибки.

    Как решить эту проблему?
    Будет лучше, если вы знаете, какое расширение/настройка используют константу DIR_CATALOG в каталоге, и свяжетесь с его разработчиком и попросите их внести исправления в расширение и убрать параметр из файлаconfig.php. Таким образом вы сохраните более чистую версию OpenCart, что поможет в будущем, когда вам нужно будет обновить систему.

    Ваш второй вариант состоит в том, чтобы модифицировать файл system/startup.php. Откройте его и найдите функцию модификации. Она должна находиться где-то около середины файла и выглядит так:

    Код:
    function modification($filename) {
    if (!defined('DIR_CATALOG')) {
    $file = DIR_MODIFICATION . 'catalog/' . substr($filename, strlen(DIR_APPLICATION));
    } else {
    $file = DIR_MODIFICATION . 'admin/' . substr($filename, strlen(DIR_APPLICATION));
    }
    if (substr($filename, 0, strlen(DIR_SYSTEM)) == DIR_SYSTEM) {
    $file = DIR_MODIFICATION . 'system/' . substr($filename, strlen(DIR_SYSTEM));
    }
    if (is_file($file)) {
    return $file;
    }
    return $filename;
    }
    Измените следующую строку:

    Код:
    if (!defined('DIR_CATALOG')) {
    на

    Код:
    if (basename(DIR_APPLICATION) == ‘catalog’) {
    и это должно решить проблему.

    Если у вас есть какие-либо дополнительные вопросы, разместите их в разделе комментариев ниже.