Продукт указан в базе данных не указан в Admin › Список продуктов

Как новичок в Opencart, я добавляю продукт со статическим массивом только для тестирования функции addProduct, но мне не удалось заставить его работать.

Статический массив:

    $data['pid'] = $this->model_catalog_product->addProduct([
        'product_description' => [['name' => 'bakbuişte', 'description' => '', 'meta_title' => 'metaraba', 'meta_description' => '', 'meta_keyword' => '', 'tag' => '']],
        'model' => 'amabigun',
        'sku' => '',
        'upc' => '',
        'ean' => '',
        'jan' => '',
        'isbn' => '',
        'mpn' => '',
        'location' => '',
        'price' => '',
        'tax_class_id' => '0',
        'quantity' => '1',
        'minimum' => '1',
        'subtract' => '1',
        'stock_status_id' => '6',
        'shipping' => '1',
        'date_available' => '2019-12-31',
        'length' => '',
        'width' => '',
        'height' => '',
        'length_class_id' => '1',
        'weight' => '',
        'weight_class_id' => '1',
        'status' => '1',
        'sort_order' => '1',
        'manufacturer' => '',
        'manufacturer_id' => '',
        'category' => '',
        'filter' => '',
        'product_store' => array(0 => '0',),
        'download' => '',
        'related' => '',
        'option' => '',
        'image' => '',
        'points' => '',
        'product_reward' => array(1 => array('points' => '',),),
        'product_seo_url' => array(0 => array(1 => '',),),
        'product_layout' => array(0 => '',)
    ]);

После этого блока я вижу запись в таблице oc_product, как и другие, но не в разделе «Администратор»> «Каталог»> «Список продуктов». Есть ли еще что-то, что я должен подготовить?


person Ataberk    schedule 31.12.2019    source источник


Ответы (1)


Взгляните на функцию addProduct(), и вы увидите код, выполняющий вставки в таблицу description следующим образом:

foreach ($data['product_description'] as $language_id => $value) {
    ...
}

В соответствии с этой логикой ключ массива — это language_id. В вашем массиве у вас есть:

'product_description' => [['name' => 'bakbuişte', 'description' => '', 'meta_title' => 'metaraba', 'meta_description' => '', 'meta_keyword' => '', 'tag' => '']],

Поскольку ключ массива не определен, ваше описание назначается ключу 0. У вас есть language_id 0 в вашей языковой таблице? Возможно нет. Типичная (по умолчанию) установка opencart имеет один язык с language_id 1. Имея это в виду, ваш массив должен выглядеть так:

'product_description' => [1 => ['name' => 'bakbuişte', 'description' => '', 'meta_title' => 'metaraba', 'meta_description' => '', 'meta_keyword' => '', 'tag' => '']],

Причина того, что при написании строк описания с неправильным идентификатором language_id возникают проблемы, заключается в том, что список продуктов извлекается с помощью такого запроса:

SELECT *
FROM product p
    LEFT JOIN product_description pd ON (p.product_id = pd.product_id)
WHERE pd.language_id = '1';

Обратите внимание на условие where в конце? Если в вашей таблице описаний отсутствует соответствующая строка с language_id 1, запрос проигнорирует строку вашего продукта.

person billynoah    schedule 31.12.2019