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.

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

Related of "Magento не перемещает сохраненные предметы"

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

Мой совет – попробовать создать аналогичный продукт вручную в области администрирования Magento, а затем проверить все поля в области администрирования для каждого продукта. Вы можете взглянуть на настройку «site_ids», и я думаю, что store_id и website_id – это разные вещи, нет? $store_id = Mage::app()->getStore()->getStoreId(); vs $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 Admin, когда вы нажимаете кнопку «Сохранить», когда вы вручную создаете тестовый продукт, тогда вы сможете увидеть, что «передано» функции saveAction (), и сравните это с вашим кодом.

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

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

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

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

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

 ->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);