In magento 1 I was able to list all products in an external php script with the following:
require_once"$rootpath/app/Mage.php";
umask(0);
Mage::app('default');
$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('status', 1);
$products->addAttributeToFilter('visibility', 4);
$products->addStoreFilter($storeId);
$products->addAttributeToSelect('*');
$products->load();
Can anyone tell me how to do this in mag 2?
Hi @picku_peas
You can try below code :
<?php
use Magento\Framework\App\Bootstrap;
/**
* If your external file is in root folder
*/
require __DIR__ . '/app/bootstrap.php';
/**
* If your external file is NOT in root folder
* Let's suppose, your file is inside a folder named 'xyz'
*
* And, let's suppose, your root directory path is
* /var/www/html/magento2
*/
// $rootDirectoryPath = '/var/www/html/magento2';
// require $rootDirectoryPath . '/app/bootstrap.php';
$params = $_SERVER;
$bootstrap = Bootstrap::create(BP, $params);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$productId = 10;
$product = $obj->get('Magento\Catalog\Model\ProductRepository')
->getById($productId);
echo '<pre>';
print_r($product->getData());
echo '</pre>';
?>
you can change the filter based on your need !
Here is the reference link for the same - http://blog.chapagain.com.np/magento-2-run-code-in-external-file-script/
Hope it helps !
Hi @picku_peas
You can use below code for listing all products in an external php script:
<?php
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$params = $_SERVER;
$bootstrap = Bootstrap::create(BP, $params);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
//you can use area as frontend too
$state->setAreaCode('adminhtml');
try {
$products = $obj->create('Magento\Catalog\Model\Product')
->getCollection();
$products->addAttributeToFilter('status', 1);
$products->addAttributeToFilter('visibility', 4);
$products->addStoreFilter(1);
$products->addAttributeToSelect('*');
foreach($products as $product) {
echo $product->getId() .'-'. $product->getName();
}
} catch (\Exception $e) {
echo $e->getMessage();
}If my answer is useful, please Accept as Solution & give Kudos.