fix for urls
This commit is contained in:
parent
9ec5a56bed
commit
0b93c87b93
|
|
@ -2204,6 +2204,11 @@ public function migrateProducts($dryRun = false)
|
||||||
// Ensure product is enabled and visible (required for products to show in categories after reindex)
|
// Ensure product is enabled and visible (required for products to show in categories after reindex)
|
||||||
$this->ensureProductIsEnabledAndVisible($m2ProductId);
|
$this->ensureProductIsEnabledAndVisible($m2ProductId);
|
||||||
$this->migrateProductCategories($m1Product->entity_id, $m2ProductId, $categoryMapping);
|
$this->migrateProductCategories($m1Product->entity_id, $m2ProductId, $categoryMapping);
|
||||||
|
|
||||||
|
// Migrate URL rewrites for new products
|
||||||
|
if ($isNew) {
|
||||||
|
$this->migrateProductUrlRewrites($m1Product->entity_id, $m2ProductId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|
@ -3450,6 +3455,124 @@ protected function migrateProductCategories($m1ProductId, $m2ProductId, $categor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get store mapping by matching store codes
|
||||||
|
*/
|
||||||
|
protected function getStoreMapping()
|
||||||
|
{
|
||||||
|
// If store mapping was set during category migration, use it
|
||||||
|
if (!empty($this->storeMapping)) {
|
||||||
|
return $this->storeMapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, try to build mapping by matching store codes
|
||||||
|
$mapping = [];
|
||||||
|
|
||||||
|
try {
|
||||||
|
$m1Stores = $this->getMagento1Stores();
|
||||||
|
$m2Stores = $this->getMagento2Stores();
|
||||||
|
|
||||||
|
// Create a map of M2 stores by code
|
||||||
|
$m2StoreMap = [];
|
||||||
|
foreach ($m2Stores as $m2Store) {
|
||||||
|
$code = strtolower(trim($m2Store->code ?? ''));
|
||||||
|
if (!empty($code) && !isset($m2StoreMap[$code])) {
|
||||||
|
$m2StoreMap[$code] = $m2Store->store_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match M1 stores to M2 by code
|
||||||
|
foreach ($m1Stores as $m1Store) {
|
||||||
|
$code = strtolower(trim($m1Store->code ?? ''));
|
||||||
|
if (!empty($code) && isset($m2StoreMap[$code])) {
|
||||||
|
$mapping[$m1Store->store_id] = $m2StoreMap[$code];
|
||||||
|
} else {
|
||||||
|
// If no match by code, try to match by store_id (default store)
|
||||||
|
// This is a fallback for stores with same ID
|
||||||
|
$mapping[$m1Store->store_id] = $m1Store->store_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Log::warning('Error building store mapping: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migrate URL rewrites from M1 core_url_rewrite to M2 url_rewrite for a product
|
||||||
|
*/
|
||||||
|
protected function migrateProductUrlRewrites($m1ProductId, $m2ProductId)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
// Get store mapping
|
||||||
|
$storeMapping = $this->getStoreMapping();
|
||||||
|
|
||||||
|
// Get all URL rewrites for this product from M1
|
||||||
|
// In M1, product URLs are identified by id_path like "product/{product_id}" or "product/{product_id}/..."
|
||||||
|
$m1UrlRewrites = DB::connection($this->magento1Connection)
|
||||||
|
->table($this->magento1Prefix . 'core_url_rewrite')
|
||||||
|
->where(function($query) use ($m1ProductId) {
|
||||||
|
$query->where('id_path', '=', 'product/' . $m1ProductId)
|
||||||
|
->orWhere('id_path', 'like', 'product/' . $m1ProductId . '/%');
|
||||||
|
})
|
||||||
|
->get();
|
||||||
|
|
||||||
|
if ($m1UrlRewrites->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($m1UrlRewrites as $m1Rewrite) {
|
||||||
|
// Map store ID
|
||||||
|
$m1StoreId = $m1Rewrite->store_id ?? 0;
|
||||||
|
$m2StoreId = isset($storeMapping[$m1StoreId]) ? $storeMapping[$m1StoreId] : $m1StoreId;
|
||||||
|
|
||||||
|
// Extract request_path and target_path from M1
|
||||||
|
$requestPath = $m1Rewrite->request_path ?? '';
|
||||||
|
$targetPath = $m1Rewrite->target_path ?? '';
|
||||||
|
|
||||||
|
// Skip if paths are empty
|
||||||
|
if (empty($requestPath) || empty($targetPath)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update target_path to use M2 product ID
|
||||||
|
// M1 target_path format: catalog/product/view/id/{product_id}
|
||||||
|
// M2 target_path format: catalog/product/view/id/{product_id}
|
||||||
|
$targetPath = preg_replace('/\/id\/\d+/', '/id/' . $m2ProductId, $targetPath);
|
||||||
|
|
||||||
|
// Check if this URL rewrite already exists in M2
|
||||||
|
$exists = DB::connection($this->magento2Connection)
|
||||||
|
->table($this->magento2Prefix . 'url_rewrite')
|
||||||
|
->where('entity_type', 'product')
|
||||||
|
->where('entity_id', $m2ProductId)
|
||||||
|
->where('request_path', $requestPath)
|
||||||
|
->where('store_id', $m2StoreId)
|
||||||
|
->exists();
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
// Insert URL rewrite into M2
|
||||||
|
DB::connection($this->magento2Connection)
|
||||||
|
->table($this->magento2Prefix . 'url_rewrite')
|
||||||
|
->insert([
|
||||||
|
'entity_type' => 'product',
|
||||||
|
'entity_id' => $m2ProductId,
|
||||||
|
'request_path' => $requestPath,
|
||||||
|
'target_path' => $targetPath,
|
||||||
|
'redirect_type' => 0, // 0 = No redirect
|
||||||
|
'store_id' => $m2StoreId,
|
||||||
|
'description' => $m1Rewrite->description ?? null,
|
||||||
|
'is_autogenerated' => ($m1Rewrite->is_system ?? 0) ? 1 : 0, // M1 is_system=1 means auto-generated, same as M2
|
||||||
|
'metadata' => null,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Log::error("Error migrating URL rewrites for product M1 ID {$m1ProductId}, M2 ID {$m2ProductId}: " . $e->getMessage());
|
||||||
|
// Don't throw - just log the error and continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure product is enabled and visible (required for products to appear in categories after reindex)
|
* Ensure product is enabled and visible (required for products to appear in categories after reindex)
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue