Magento не отображает сохраненные статьи

Я создал скрипт для хранения статей в magento из внешних источников.

Это то, что я сейчас делаю

    $this->product = Mage::getModel('catalog/product')->loadByAttribute('sku',$this->artnr);
    Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
    if($this->product===false || $this->product->getId()<1){
        $this->product = Mage::getModel('catalog/product');
        $this->product->setSku($this->actindo['art_nr']);
        $this->newProduct = true;
        $this->product->setAttributeSetId($this->getDefaultAttributeSetId());
        $this->product->setStoreId(Mage::app()->getStore()->getWebsiteId());
        $this->product->setCreatedAt(strtotime('now'));
    }

Затем я устанавливаю все необходимые поля, такие как описание и т. д.

а потом я делаю магазин

$this->product->save();

Продукты правильно отображаются в панели администратора, но не отображаются в интерфейсе магазина.

Я проверил базу и увидел, что несколько индексов не записаны. Также не сохраняются плоские таблицы. Если я потом снова сохраню его в админке, все будет сохранено. В настоящее время у меня отключены плоские таблицы. Но их содержание все еще написано.

Я использую Magento 1.7.0.1 с PHP5.3, работающим как fpm и веб-сервером nginx.

Я тоже уже пробовал пересобирать индексы и все такое, но во фронтенде все равно не видно. Что я делаю не так? Все поля, которые я нажимаю на скрипт, записываются и видны в разделе администратора. ????


person Chris West    schedule 03.03.2014    source источник


Ответы (2)


вы, вероятно, пробовали все это, но я знаю, что выяснение того, «почему продукт не отображается», — это разочаровывающий процесс.

Мой совет: попробуйте создать аналогичный продукт вручную в административной области Magento, а затем проверьте все поля в административной области для каждого продукта. Вы можете внимательно посмотреть на настройку «website_ids», и я думаю, что store_id и Website_id — это разные вещи, не так ли? $store_id = Mage::app()->getStore()->getStoreId(); против $store_website_id = Mage::app()->getStore()->getWebsiteId();

Вы также можете использовать инструмент system->import/export export, чтобы сравнить то, что установил Magento, с тем, что настраивает ваш алгоритм.

Вы читаете функции Magento AdminHTML для сохранения продукта?

    /* path:  app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php */
    Mage_Adminhtml_Catalog_ProductController::saveAction()
    // (and then obviously)
    Mage_Adminhtml_Catalog_ProductController::_initProductSave()
    Mage_Adminhtml_Catalog_ProductController::_initProduct()

Итак, глядя на этот код, если вы можете захватить POST от администратора Magento, когда вы нажимаете кнопку «Сохранить», когда вы вручную создаете свой тестовый продукт, вы сможете увидеть, что «передается» в функцию saveAction () и сравните это с вашим кодом.

Откуда вы запускаете свой код? Если вы создаете свой собственный Mage::app(), я думаю, вам нужно настроить его как сеанс администратора и установить идентификаторы магазинов и тому подобное. Я не могу найти ссылку на это, но поищите, если вы думаете, что это может быть как-то связано с этим. Возможно, вы можете использовать вызов saveAction() или переназначить этот код, а не использовать $this->product->save().

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

План Б. Если у вас есть внешний источник данных о продуктах, вы можете найти самый лучший 'MAGMI Datapump API" самый простой и быстрый способ добиться того, чего вы хотите.

Это было слишком много информации?

person Malachy    schedule 03.03.2014
comment
Вес и налоговый класс являются обязательными полями в форме нового продукта Magento, поэтому проверьте и их. - person Malachy; 04.03.2014
comment
спасибо это помогло. Я экспортировал данные и проверил, что не было установлено, и нашел его. - person Chris West; 24.03.2014

Есть некоторые настройки, необходимые для того, чтобы продукт отображался во внешнем интерфейсе.
Он должен быть включен:

->setStatus(1);

Это должно быть видно

->setVisibility(4); //or 2

Он должен быть в наличии или у вас должна быть настройка для отображения товаров, которых нет в наличии, на веб-интерфейсе.

$stockItem = array();
$stockItem['qty'] = 100; //something bbigger than 0
$stockItem['is_in_stock'] = 1;
$product->setData('stock_item', $stockItem);
person Marius    schedule 03.03.2014
comment
Извините, я пропустил эту часть. Эта информация записывается в объект. в любом случае, но это не показано в моем примере. Я пишу акции и есть акции, продается, устанавливаю статус 1 и видимость 4, но они все еще не отображаются в индексах. - person Chris West; 03.03.2014