0

We're a very small store and have to sell some of our products online. Magento is our system of choice. Right now we're still using Magento 1. For our shop we have the possibility to list all products (about 650) and change the price, the stock qty and one custom attribute (the year of manufacturing) from an external list. The list looks like this

[Manufacturer] [Product Name] [Year of manufacturing] [Price] [Stock QTY] [-> Save]

and is looped through the whole list of products. I think the (or one of the) performance problem(s) is that there is a loop inside the loop - [Year of manufacturing] is a dropdown-attribute and every available option is looped through for every single product.

Is somebody using the same or a similar approach and has some advice regarding the performance?

EDIT: Added... "Code" by request

<?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');
$state->setAreaCode('frontend');


$productCollection = $obj->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');

$collection = $productCollection->create()
            ->addAttributeToSelect(['name','jahrgang','jahrgangswein','price','aktualisiert'])
            ->joinField('qty', 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
            ->setOrder('manufacturer', 'asc')
            ->load();

foreach($collection as $product) {
                                    echo $product->getAttributeText('manufacturer') . ' ' . $product->getName() . ' ' . $product->getAttributeText('jahrgang');
                                    $productRepository = $obj->get('\Magento\Catalog\Model\Product\Attribute\Repository');
                                    $jahrgaenge = $productRepository->get('jahrgang')->getOptions();
                                    $jahrgang_optionen = '';
  foreach ($jahrgaenge as $jahrgaengeOption) {
                                      $jahrgang_id = $jahrgaengeOption->getValue(); //id of the option
                                      $jahrgang_value = $jahrgaengeOption->getLabel(); //Label of the option 
                                      $jahrgang_optionen .= '<option value="' . $jahrgang_id . '">' . $jahrgang_value . '</option>';
                                    }
                                    echo '<select>' . $jahrgang_optionen . '</select><br>';
                                    }

?>
0

If the Year of manufacturing is an attribute why don't you try to get the value like this:

$_product->getAttributeText("year_of_manufacturing");

instead of looping all the options.

  • Thats because each value and id is needed to change the [Year of manufacturing] - it‘s a dropdown-list for each item/ product... – Daniel Aug 21 at 11:19
  • can you post an example? – Tsita Aug 21 at 12:04
  • Sure, but be warned... I've updated the question – Daniel Aug 22 at 18:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.