Тестировал версию 3.0.3.7 и заметил ошибку

Тема в разделе "Обо всём", создана пользователем Negative, 19 фев 2021.

  1. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    Здравствуйте. Тестировал версию 3.0.3.7 и заметил ошибку, при попытке зайти на страницу списка производителей получаю ошибку:

    [19-Feb-2021 03:10:06 Europe/Kiev] PHP Fatal error: Uncaught Error: Call to a member function resize() on null in /public_html/system/storage/modification/catalog/controller/product/manufacturer.php:45
    Stack trace:
    #0 /public_html/system/storage/modification/system/engine/action.php(79): ControllerProductManufacturer->index()
    #1 /public_html/system/engine/router.php(67): Action->execute(Object(Registry))
    #2 /public_html/system/engine/router.php(56): Router->execute(Object(Action))
    #3 /public_html/system/framework.php(169): Router->dispatch(Object(Action), Object(Action))
    #4 /public_html/system/startup.php(104): require_once('/...')
    #5 /public_html/index.php(19): start('catalog')
    #6 {main}
    thrown in /public_html/system/storage/modification/catalog/controller/product/manufacturer.php on line 45

    В этом файле по этому пути, в строке 45 находится:

    'logo' => $this->model_tool_image->resize($result['image'], 100, 100),

    Что здесь не так, как решить? В версии 3.0.3.6 всё работало с тем же набором модулей...
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
    Странно. Не должно быть такого.

    Наборы модулей и поиск подобных ошибок, совсем не для данной темы. Смотрите модификатор, какую строчку нашел, а какую нет и корректируйте для правильной работы.
     
  3. Helpisto

    Helpisto Пользователь

    Сообщения:
    27
    Симпатии:
    2
    Нужно в массив добавить модель изображений
     
  4. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    В том то и дело, проверил все модификаторы и поправил изменённые строки, так как при поиске отличий (сравнении файлов 3.0.3.6 и 3.0.3.7) заметно что довольно таки много, пусть и не сильно, но изменённых строк, соответственно модификаторы вполне могли просто не найти нужные им строчки. Плюс ко всему было много ошибок в логе модификаций, решил всё перебрать. Теперь ошибок нет, все строки соответствуют и всё находит, но страница производителей как не работала так и не работает. При отключении шаблона и активации дефолтного - всё работает корректно, но в дефолтном логотип производителя в списке не выводится, я так понимаю это "фича" самого шаблона. Что делать - хз, в модификаторе более 3000 строк, и около десятка тех, что хоть как-то связаны (похожи) на ту, которая и вызывает эту ошибку.. Автор шаблон забросил судя по всему, последняя версия заточена под 3.0.2.0, а жаль, шаблон хороший и при этом бесплатный. Ссылка на шаблон https://www.opencart.com/index.php?...er_category_id=1&filter_license=0&sort=rating
     
  5. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    А не подскажите как это сделать?)
     
  6. Helpisto

    Helpisto Пользователь

    Сообщения:
    27
    Симпатии:
    2
    Вставь вот этот код в модификатор, в конце где нибудь
    <file path="catalog/controller/product/manufacturer.php">
    <operation>
    <search><![CDATA[foreach ($results as $result) {]]></search>
    <add position="after"><![CDATA[
    $this->load->model('tool/image');
    ]]></add>
    </operation>
    </file>
     
    Negative нравится это.
  7. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    Ошибка пропала, спасибо) А этот код нужно вставлять после всех строчек "foreach ($results as $result) {" (в файле два совпадения), или может быть только к одной?
     
  8. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    Только что попробовал добавить Ваш код к первой по списку строчке, в этом же блоке и находится та строка из-за которой появлялась ошибка, добавляется она модификатором шаблона. Может сделать так, что бы в итоге код имел такой вид?

    foreach ($results as $result) {

    $this->load->model('tool/image'); Ваш код

    if (is_numeric(utf8_substr($result['name'], 0, 1))) {
    $key = '0 - 9';
    } else {
    $key = utf8_substr(utf8_strtoupper($result['name']), 0, 1);
    }

    if (!isset($data['categories'][$key])) {
    $data['categories'][$key]['name'] = $key;
    }

    $data['categories'][$key]['manufacturer'][] = array(
    'name' => $result['name'],
    'logo' => $this->model_tool_image->resize($result['image'], 100, 100), Строчка которая вызвала ошибку
    'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id'])
    );
    }

    Или обязательно нужно добавить ко всем совпадающим строкам?
     
  9. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    достаточно вставить в начале метода, в котором будет использоваться работа с моделью tool/image
     
  10. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    Я так понимаю достаточно вставить в тот блок, в котором находится вызывающая ошибку строка, верно?
     
  11. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    вставить выше всех строк в которых используется $this->model_tool_image->resize(.........
     
  12. Negative

    Negative Новичок

    Сообщения:
    20
    Симпатии:
    3
    Понял, спасибо) С учётом всех модификаций "$this->model_tool_image->resize(........." используется во всех блоках "foreach ($results as $result) {".
     
    susl16c нравится это.