Recabamos en el mundo on line y así traerte la respuesta para tu problema, si continúas con alguna difcultad puedes dejar tu duda y contestamos con mucho gusto, porque estamos para servirte.
Solución:
He creado un código personalizado para verificar si la URL key existe o no. Según el flujo utilizado en la funcionalidad de importación de productos en Magento 2.
public function __construct(
--
MagentoStoreModelStoreManagerInterface $storeManager,
MagentoFrameworkAppResourceConnection $resource,
--
)
--
$this->_storeManager = $storeManager;
$this->_resource = $resource;
--
public function createUrlKey($title, $sku)
$url = preg_replace('#[^0-9a-z]+#i', '-', $title);
$urlKey = strtolower($url);
$storeId = (int) $this->_storeManager->getStore()->getStoreId();
$isUnique = $this->checkUrlKeyDuplicates($sku, $urlKey, $storeId);
if ($isUnique)
return $urlKey;
else
return $urlKey . '-' . time();
/*
* Function to check URL Key Duplicates in Database
*/
private function checkUrlKeyDuplicates($sku, $urlKey, $storeId)
$urlKey .= '.html';
$connection = $this->_resource->getConnection(MagentoFrameworkAppResourceConnection::DEFAULT_CONNECTION);
$tablename = $connection->getTableName('url_rewrite');
$sql = $connection->select()->from(
['url_rewrite' => $connection->getTableName('url_rewrite')], ['request_path', 'store_id']
)->joinLeft(
['cpe' => $connection->getTableName('catalog_product_entity')], "cpe.entity_id = url_rewrite.entity_id"
)->where('request_path IN (?)', $urlKey)
->where('store_id IN (?)', $storeId)
->where('cpe.sku not in (?)', $sku);
$urlKeyDuplicates = $connection->fetchAssoc($sql);
if (!empty($urlKeyDuplicates))
return false;
else
return true;
Para realizar la función CreateUrlKey, agregué en la segunda línea este código:
$lastCharTitle = substr($title, -1);
$lastUrlChar = substr($url, -1);
if ($lastUrlChar == "-" && $lastCharTitle != "-")
$url = substr($url, 0, strlen($url) - 1);
para eliminar el último “-” si este se genera a partir de la primera línea “preg_replace”. También reemplacé la marca de tiempo con el Sku único, porque en algún momento del proceso de importación automatizado, el tiempo () de dos registros adyacentes puede ser el mismo, por lo que no es único.
Ahora la función es:
public function createUrlKey($title, $sku)
$url = preg_replace('#[^0-9a-z]+#i', '-', $title);
$lastCharTitle = substr($title, -1);
$lastUrlChar = substr($url, -1);
if ($lastUrlChar == "-" && $lastCharTitle != "-")
$url = substr($url, 0, strlen($url) - 1);
$urlKey = strtolower($url);
$storeId = (int) $this->_storeManager->getStore()->getStoreId();
$isUnique = $this->checkUrlKeyDuplicates($sku, $urlKey, $storeId);
if ($isUnique)
return $urlKey;
else
return $urlKey . '-' . $sku;
Calificaciones y reseñas
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)