Skip to content

Commit d47db6e

Browse files
committed
MAGETWO-63033: Product imports not Auto-Generating URL Keys for SKUs - for 2.0.x
1 parent 54d4e70 commit d47db6e

File tree

4 files changed

+99
-6
lines changed

4 files changed

+99
-6
lines changed

app/code/Magento/CatalogImportExport/Model/Import/Product.php

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,10 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
558558
/** @var array */
559559
protected $productUrlSuffix = [];
560560

561-
/** @var array */
561+
/**
562+
* @var array
563+
* @deprecated
564+
*/
562565
protected $productUrlKeys = [];
563566

564567
/**
@@ -1499,6 +1502,10 @@ protected function _saveProducts()
14991502
}
15001503
$rowScope = $this->getRowScope($rowData);
15011504

1505+
if (empty($rowData[self::URL_KEY])) {
1506+
$rowData[self::URL_KEY] = $this->getUrlKey($rowData);
1507+
}
1508+
15021509
$rowSku = $rowData[self::COL_SKU];
15031510

15041511
if (null === $rowSku) {
@@ -2630,18 +2637,22 @@ protected function getProductUrlSuffix($storeId = null)
26302637
}
26312638

26322639
/**
2640+
* Return url key if specified, or generate one from product name otherwise.
2641+
*
26332642
* @param array $rowData
26342643
* @return string
26352644
*/
26362645
protected function getUrlKey($rowData)
26372646
{
26382647
if (!empty($rowData[self::URL_KEY])) {
2639-
$this->productUrlKeys[$rowData[self::COL_SKU]] = $rowData[self::URL_KEY];
2648+
return $rowData[self::URL_KEY];
26402649
}
2641-
$urlKey = !empty($this->productUrlKeys[$rowData[self::COL_SKU]])
2642-
? $this->productUrlKeys[$rowData[self::COL_SKU]]
2643-
: $this->productUrl->formatUrlKey($rowData[self::COL_NAME]);
2644-
return $urlKey;
2650+
2651+
if (!empty($rowData[self::COL_NAME])) {
2652+
return $this->productUrl->formatUrlKey($rowData[self::COL_NAME]);
2653+
}
2654+
2655+
return '';
26452656
}
26462657

26472658
/**
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
/** @var $product \Magento\Catalog\Model\Product */
8+
$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Product::class);
9+
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE)
10+
->setAttributeSetId(4)
11+
->setWebsiteIds([1])
12+
->setName('Simple Product')
13+
->setSku('simple1')
14+
->setPrice(10)
15+
->setDescription('Description with <b>html tag</b>')
16+
->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
17+
->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
18+
->setCategoryIds([2])
19+
->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1])
20+
->setUrlKey('url-key')
21+
->save();
22+
23+
/** @var $product \Magento\Catalog\Model\Product */
24+
$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Product::class);
25+
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE)
26+
->setAttributeSetId(4)
27+
->setWebsiteIds([1])
28+
->setName('Simple Product 2')
29+
->setSku('simple2')
30+
->setPrice(10)
31+
->setDescription('Description with <b>html tag</b>')
32+
->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
33+
->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
34+
->setCategoryIds([2])
35+
->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1])
36+
->setUrlKey('url-key2')
37+
->save();

dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,47 @@ public function testValidateUrlKeys($importFile, $errorsCount)
893893
}
894894
}
895895

896+
/**
897+
* Test import products without url keys will auto generate ones.
898+
*
899+
* @magentoDataFixture Magento/Catalog/_files/product_simple_with_url_key.php
900+
* @magentoAppIsolation enabled
901+
*/
902+
public function testImportWithoutUrlKeys()
903+
{
904+
$products = [
905+
'simple1' => 'simple-1',
906+
'simple2' => 'simple-2',
907+
'simple3' => 'simple-3'
908+
];
909+
$filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
910+
->create(\Magento\Framework\Filesystem::class);
911+
$directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
912+
$source = $this->objectManager->create(
913+
\Magento\ImportExport\Model\Import\Source\Csv::class,
914+
[
915+
'file' => __DIR__ . '/_files/products_to_import_without_url_keys.csv',
916+
'directory' => $directory
917+
]
918+
);
919+
920+
$errors = $this->_model->setParameters(
921+
['behavior' => \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND, 'entity' => 'catalog_product']
922+
)
923+
->setSource($source)
924+
->validateData();
925+
926+
$this->assertTrue($errors->getErrorsCount() == 0);
927+
$this->_model->importData();
928+
929+
$productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
930+
\Magento\Catalog\Api\ProductRepositoryInterface::class
931+
);
932+
foreach ($products as $productSku => $productUrlKey) {
933+
$this->assertEquals($productUrlKey, $productRepository->get($productSku)->getUrlKey());
934+
}
935+
}
936+
896937
/**
897938
* @return array
898939
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
sku,product_type,store_view_code,name,price,attribute_set_code,url_key
2+
simple1,simple,,"simple 1",25,Default,""
3+
simple2,simple,,"simple 2",34,Default,""
4+
simple3,simple,,"simple 3",58,Default,""

0 commit comments

Comments
 (0)