PHP code example of shoppingfeed / php-feed-generator
1. Go to this page and download the library: Download shoppingfeed/php-feed-generator library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
shoppingfeed / php-feed-generator example snippets
namespace ShoppingFeed\Feed;
# first create an instance of the generator
$generator = new ProductGenerator();
# then, you need to define at least one mapper
$generator->addMapper(
# more details below
);
# you also need your data / products at hand
$items = [
[
# product 1
],
[
# product 2
],
# ...
];
# finally, you can generate the feed
$generator->write($items);
namespace ShoppingFeed\Feed;
$generator = new ProductGenerator();
$generator->setUri('file://my-feed.xml');
namespace ShoppingFeed\Feed;
$generator = new ProductGenerator();
$generator->setUri('compress.zlib://my-feed.xml.gz');
namespace ShoppingFeed\Feed;
$generator = (new ProductGenerator)
->setUri('file://my-feed.xml')
->setPlatform('Magento', '2.2.1');
# Set any extra vendor attributes.
$generator
->setAttribute('storeName', 'my great store')
->setAttribute('storeUrl', 'http://my-greate-store.com');
namespace ShoppingFeed\Feed;
# constructor
$generator = new ProductGenerator('file://my-feed.csv', 'csv');
# Or with setter
$generator->setWriter('csv');
namespace ShoppingFeed\Feed;
# Disable memory allocation
Csv\CsvProductFeedWriter::setDefaultMaxMemoryUsage(0);
# Allocate 100MB of memory (value is in bytes)
Csv\CsvProductFeedWriter::setDefaultMaxMemoryUsage(100^4);
# No memory limit
Csv\CsvProductFeedWriter::setDefaultMaxMemoryUsage(-1);
namespace ShoppingFeed\Feed;
$generator = (new ProductGenerator)->setPlatform('Magento', '2.2.1');
# Mappers are responsible for converting your data format to populated product
$generator->addMapper(function(array $item, Product\Product $product) {
$product
->setName($item['title'])
->setReference($item['sku'])
->setPrice($item['price'])
->setQuantity($item['quantity'])
->setAttribute('custom1', $item['custom1'])
->setAttribute('custom2', $item['custom2']);
});
# Data set fixtures
$items[0] = ['sku' => 1, 'title' => 'Product 1', 'price' => 5.99, 'quantity' => 3];
$items[1] = ['sku' => 2, 'title' => 'Product 2', 'price' => 12.99, 'quantity' => 6];
# now generates the feed with $items collection
$generator->write($items);
function getLotsOfProducts(): iterable
{
while($batchOfProducts = getNextTenProductsFromTheDatabse()) {
foreach ($batchOfProducts as $product) {
yield $product;
}
}
}
$generator->write(getLotsOfProducts());
namespace ShoppingFeed\Feed;
$generator = new ProductGenerator();
$generator->addProcessor(function(array $item) {
if (! isset($item['description'])) {
$item['description'] = 'Product description coming soon';
}
# modified data must be returned
return $item;
});
$generator->addMapper(function(array $item, Product\Product $product) {
$product->setDescription($item['description']);
});
namespace ShoppingFeed\Feed;
$generator = new ProductGenerator();
# Ignore all items with undefined quantity
$generator->addFilter(function(array $item) {
return isset($item['quantity']);
});
# Ignore all items with prices above 10
$generator->addFilter(function(array $item) {
return $item['price'] <= 10;
});
# only items that pass the previous filter conditions are considered by mappers
$generator->addMapper(function(array $item, Product\Product $product) {
// do some stuff
});
namespace ShoppingFeed\Feed;
$generator = new ProductGenerator();
# Only exclude invalid products, with no error reporting.
$generator->setValidationFlags(ProductGenerator::VALIDATE_EXCLUDE);
# Or throw an exception once invalid product is met
$generator->setValidationFlags(ProductGenerator::VALIDATE_EXCEPTION);