Magento2: La clave de URL para la tienda especificada ya existe en Magento 2.1.1

Creado en 20 sept. 2016  ·  100Comentarios  ·  Fuente: magento/magento2

Me enfrento al error "La clave de URL para la tienda especificada ya existe" cuando intento actualizar el nombre de la categoría existente como aparece en algunas categorías.

Estoy usando Magento 2.1.1.
He leído tantos articales donde decía que está resuelto en la versión magento 2.1 pero que vuelve a aparecer. Házmelo saber
Ayúdame a resolver el problema.

Gracias

Condiciones previas

Magento 2.1.1

pasos para reproducir

Intente actualizar el nombre de la categoría existente a medida que aparece en algunas categorías

Resultado Esperado

Se actualiza el nombre de la categoría

Resultado actual

Error "La clave de URL para la tienda especificada ya existe"

CatalogUrlRewrite Format is valid Ready for Work bug report

Comentario más útil

¿Cuándo se solucionará finalmente esto? ¿El problema ha estado activo desde hace más de un año?

Todos 100 comentarios

Hola, @sanjayjethva : Formatea la descripción de tu problema de acuerdo con las pautas de notificación de problemas .

Este problema ocurre cuando tiene un producto y una categoría con la misma clave de URL.

Ejemplo:

1.- Crear Categoría: Productos Energéticos (Clave URL: productos-energéticos)
2.- Crear subcategoría: Stacker 2 Energy Shots (Clave de URL: stacker-2-energy-shots)
3.- Crear producto agrupado: Stacker 2 Energy Shots (Clave de URL: stacker-2-energy-shots)
4.- Agregue el producto "Stacker 2 Energy Shots" a la categoría "Productos energéticos" por ejemplo

Error: la clave de URL para la tienda especificada ya existe.
image

image

Puedo confirmar, el mismo problema en Magento 2.1.1

Hola @ mgomez-dgt
Gracias por su respuesta, pero el problema persiste si puedo cambiar la URL o el nombre de la categoría para que diga "prueba" o "demostración". Estoy eligiendo un nombre aleatorio pero aún muestra el mismo error.
Estoy enfrentando el problema cuando cambio el nombre de la categoría.

Gracias y avísame

mismo problema al actualizar un producto con cambios de categoría

Problema similar aquí, pero toca las relaciones producto-categoría. Eliminar la asignación de categoría de producto le permite guardar el producto sin tener "la clave de URL para la tienda especificada ya existe". (pero, por supuesto, no es deseable para los propietarios de tiendas).
Si ayuda a alguien a depurar esto, esta es la URL reescrita que no me permitió agregar productos a menos que las categorías no estuvieran asignadas:

mysql> select * from url_rewrite\G;
*************************** 1. row ***************************
  url_rewrite_id: 1
     entity_type: cms-page
       entity_id: 1
    request_path: no-route
     target_path: cms/page/view/page_id/1
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 2. row ***************************
  url_rewrite_id: 2
     entity_type: cms-page
       entity_id: 2
    request_path: home
     target_path: cms/page/view/page_id/2
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 3. row ***************************
  url_rewrite_id: 3
     entity_type: cms-page
       entity_id: 3
    request_path: enable-cookies
     target_path: cms/page/view/page_id/3
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 4. row ***************************
  url_rewrite_id: 4
     entity_type: cms-page
       entity_id: 4
    request_path: privacy-policy-cookie-restriction-mode
     target_path: cms/page/view/page_id/4
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 5. row ***************************
  url_rewrite_id: 242
     entity_type: product
       entity_id: 14
    request_path: /red-wine/testingadmin-simple.html
     target_path: catalog/product/view/id/14/category/11
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 0
        metadata: a:1:{s:11:"category_id";s:2:"11";}
*************************** 6. row ***************************
  url_rewrite_id: 263
     entity_type: category
       entity_id: 6
    request_path: whiskey.html
     target_path: catalog/category/view/id/6
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 7. row ***************************
  url_rewrite_id: 264
     entity_type: category
       entity_id: 8
    request_path: whiskey/.html
     target_path: catalog/category/view/id/8
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 8. row ***************************
  url_rewrite_id: 265
     entity_type: category
       entity_id: 6
    request_path: .html
     target_path: catalog/category/view/id/6
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 9. row ***************************
  url_rewrite_id: 266
     entity_type: category
       entity_id: 8
    request_path: whiskey/.html
     target_path: catalog/category/view/id/8
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 10. row ***************************
  url_rewrite_id: 351
     entity_type: product
       entity_id: 28
    request_path: wine.html
     target_path: catalog/product/view/id/28
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 11. row ***************************
  url_rewrite_id: 352
     entity_type: product
       entity_id: 28
    request_path: wine.html
     target_path: catalog/product/view/id/28
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 12. row ***************************
  url_rewrite_id: 447
     entity_type: product
       entity_id: 45
    request_path: 1.html
     target_path: catalog/product/view/id/45
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 13. row ***************************
  url_rewrite_id: 448
     entity_type: product
       entity_id: 45
    request_path: 1.html
     target_path: catalog/product/view/id/45
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 14. row ***************************
  url_rewrite_id: 485
     entity_type: product
       entity_id: 51
    request_path: 5.html
     target_path: catalog/product/view/id/51
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 15. row ***************************
  url_rewrite_id: 486
     entity_type: product
       entity_id: 51
    request_path: 5.html
     target_path: catalog/product/view/id/51
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 16. row ***************************
  url_rewrite_id: 487
     entity_type: product
       entity_id: 52
    request_path: 6.html
     target_path: catalog/product/view/id/52
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 17. row ***************************
  url_rewrite_id: 488
     entity_type: product
       entity_id: 52
    request_path: 6.html
     target_path: catalog/product/view/id/52
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 18. row ***************************
  url_rewrite_id: 489
     entity_type: product
       entity_id: 53
    request_path: 7.html
     target_path: catalog/product/view/id/53
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 19. row ***************************
  url_rewrite_id: 490
     entity_type: product
       entity_id: 53
    request_path: 7.html
     target_path: catalog/product/view/id/53
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 20. row ***************************
  url_rewrite_id: 491
     entity_type: product
       entity_id: 54
    request_path: 8.html
     target_path: catalog/product/view/id/54
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 21. row ***************************
  url_rewrite_id: 492
     entity_type: product
       entity_id: 54
    request_path: 8.html
     target_path: catalog/product/view/id/54
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 22. row ***************************
  url_rewrite_id: 493
     entity_type: product
       entity_id: 55
    request_path: 888.html
     target_path: catalog/product/view/id/55
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 23. row ***************************
  url_rewrite_id: 494
     entity_type: product
       entity_id: 55
    request_path: 888.html
     target_path: catalog/product/view/id/55
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 24. row ***************************
  url_rewrite_id: 495
     entity_type: cms-page
       entity_id: 5
    request_path: test-article
     target_path: cms/page/view/page_id/5
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 25. row ***************************
  url_rewrite_id: 496
     entity_type: cms-page
       entity_id: 5
    request_path: test-article
     target_path: cms/page/view/page_id/5
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 26. row ***************************
  url_rewrite_id: 567
     entity_type: category
       entity_id: 19
    request_path: root-catalog.html
     target_path: catalog/category/view/id/19
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 27. row ***************************
  url_rewrite_id: 568
     entity_type: category
       entity_id: 19
    request_path: root-catalog.html
     target_path: catalog/category/view/id/19
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 28. row ***************************
  url_rewrite_id: 258507
     entity_type: product
       entity_id: 72
    request_path: some-testing-product.html
     target_path: catalog/product/view/id/72
   redirect_type: 0
        store_id: 2
     description: NULL
is_autogenerated: 1
        metadata: NULL
*************************** 29. row ***************************
  url_rewrite_id: 258508
     entity_type: product
       entity_id: 72
    request_path: some-testing-product.html
     target_path: catalog/product/view/id/72
   redirect_type: 0
        store_id: 1
     description: NULL
is_autogenerated: 1
        metadata: NULL
29 rows in set (0.00 sec)

Parece que hay algún problema con el mecanismo de actualización de categorías.

Seguí guardando categorías una por una y señalé la categoría preocupante a:
/ catálogo / categoría / editar / id / 10 /

y visto que realmente no hay URL en la base de datos, así que lo hice:

insert into url_rewrite VALUES (NULL,'category',10,'wines.html','catalog/category/view/id/10',0,1,NULL,1,NULL);
insert into catalog_category_entity_varchar VALUES (NULL,117,0,10,'wines'); (117 - url_key)
insert into catalog_category_entity_varchar VALUES (NULL,118,0,10,'wines'); (118 - url_path)

entonces corre:
php bin/magento indexer:reindex

ahora la URL aparecerá en el formulario de edición de administrador pero, por supuesto, aún después de intentar guardarla:
La clave de URL para la tienda especificada ya existe.

Seguí adelante y agregué claves de URL manualmente a la base de datos y también actualicé url_rewrite manualmente. todavía no puedo guardar ese producto con categorías asignadas ...

Necesitamos ir más profundo entonces ...
En vendor/magento/module-url-rewrite/Model/Storage/AbstractStorage.php
agregó información adicional:

throw new \Magento\Framework\Exception\AlreadyExistsException(
                __('URL key for specified store already exists - '.$e->getMessage() )
            );

y eso me dio el error que necesitaba:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '/testing-products.html-2' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT INTO url_rewrite ( redirect_type , is_autogenerated , metadatos , descripción , entity_type , entity_id , request_path , target_path , store_id ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?)
¿esperar lo? Ya fijé duniqueness de mis urls ....

Considerando el resultado de
show index from url_rewrite where non_unique = 0\G; que dice que solo usamos target_path y store_id Eliminé los datos que la aplicación está tratando de insertar:

array (
  0 => 
  array (
    'request_path' => 'testing-products.html',
    'target_path' => 'catalog/product/view/id/84',
    'store_id' => '2',
  ),
  1 => 
  array (
    'request_path' => 'wines/testing-products.html',
    'target_path' => 'catalog/product/view/id/84/category/10',
    'store_id' => '2',
  ),
  2 => 
  array (
    'request_path' => '/testing-products.html',
    'target_path' => 'catalog/product/view/id/84/category/1',
    'store_id' => '2',
  ),
  3 => 
  array (
    'request_path' => '/testing-products.html',
    'target_path' => 'catalog/product/view/id/84/category/2',
    'store_id' => '2',
  ),
  4 => 
  array (
    'request_path' => 'testing-products.html',
    'target_path' => 'catalog/product/view/id/84',
    'store_id' => '1',
  ),
  5 => 
  array (
    'request_path' => 'wines/testing-products.html',
    'target_path' => 'catalog/product/view/id/84/category/10',
    'store_id' => '1',
  ),
  6 => 
  array (
    'request_path' => '/testing-products.html',
    'target_path' => 'catalog/product/view/id/84/category/1',
    'store_id' => '1',
  ),
  7 => 
  array (
    'request_path' => '/testing-products.html',
    'target_path' => 'catalog/product/view/id/84/category/2',
    'store_id' => '1',
  ),
)

Entonces, el problema parece estar en las categorías 1 y 2 para las cuales, a través del panel de administración, no puedo actualizar las claves de URL. Y eso nos lleva a algunas pistas sobre por qué fallan las importaciones personalizadas aquí y por qué la tienda, donde el cliente eliminó accidentalmente su categoría raíz (que luego se volvió a leer) falla.

Editar: la solución sucia está cambiando
vendor/magento/module-url-rewrite/Model/Storage/DbStorage.php
desde

    protected function doReplace($urls)
    {
        foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
            $urlData[UrlRewrite::ENTITY_TYPE] = $type;
            $this->deleteByData($urlData);
        }
        $data = [];
        foreach ($urls as $url) {
            $data[] = $url->toArray();
        }
        $this->insertMultiple($data);
    }

dentro

    protected function doReplace($urls)
    {
        foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
            $urlData[UrlRewrite::ENTITY_TYPE] = $type;
            $this->deleteByData($urlData);
        }
        $data = [];
        foreach ($urls as $url) {
            $data[] = $url->toArray();
        }

         /* FIXME: Get rid of rewrite for root Magento category to unduplicate things
          * <strong i="8">@see</strong>: https://github.com/magento/magento2/issues/6671 */
        foreach($data as $key =>$info){
                if(isset($info['target_path']) && stristr($info['target_path'],'/category/1') && $info['entity_type']=='product'){
                        unset($data[$key]);
                }
        }

        $this->insertMultiple($data);
    }

Equipo M2: corrija el manejo de la categoría raíz y eso debería solucionarlo.

@miakusha : point_up: ahí está tu actualización;)

También tengo el mismo problema. ¿Está siendo reparado, así que debería hacer el arreglo sucio para que la bola ruede?

Intenté actualizar DbStorage.php según la recomendación de @janmyszkier , pero el error URL key for specified store already exists. aún aparece después de intentar actualizar el nombre de la categoría.

Puedo confirmar que esto también está sucediendo con 2.1.2 EE.

@frostshoxx es como si su categoría raíz tuviera una ID diferente a la del código de ejemplo de @janmyszkier

Confirmado en M2.1.2

Tengo 2 categorías que tienen nombres de subcategorías similares (por ejemplo, foo / bar, goo / bar). 'bar' se considera una clave duplicada.

Dato curioso: truncar la tabla url_rewrite resolvió el problema por mí.

Logré arreglar esto al final, recomendaría _no_ vaciar su tabla url_rewrite .

Teníamos varias tiendas y los productos de la tienda A estaban asociados a las categorías de la tienda B. En un nivel alto, esto es lo que puedo decir que estaba sucediendo:

  • Tienda A tenía categoría X con varios productos
  • La tienda B tenía un producto Y que de alguna manera se agregó a la categoría X en la tienda A
  • Cuando Magento genera reescrituras de nivel de categoría, pasa por todos los productos en la categoría de cada tienda. Encontró el producto Y en la categoría X y generó una reescritura del nivel de producto (esto es incorrecto, porque el producto no estaba disponible en la Tienda A )
  • Cuando Magento luego intenta generar reescrituras de nivel de producto, intenta generar la reescritura de nivel de producto para el producto Y nuevamente, golpea el error "La clave de URL para la tienda especificada ya existe", porque en el paso anterior ya se había generado .

@jameshalsall ¿Cómo

Hola chicos,

Probemos con una solución alternativa en la respuesta de @quynhvv aquí:
https://github.com/magento/magento2/issues/7298

Saludos,
Centro comercial.

: -1: para @ magento-team por dejar este problema sin resolver durante tanto tiempo sin siquiera una solución.

@frostshoxx Eliminé las asociaciones de productos a categorías que eran de tiendas cruzadas, si eso tiene sentido.

EDITAR: Creo que esto podría ser un problema con la función guardar + duplicar, cuando está editando un producto de una tienda y luego lo duplica en la otra tienda, puede mantener las asociaciones de categorías de la tienda original.

El proceso de regeneración de URL es grande / implícito y complejo para mantener todas las entidades principales en la industria del comercio electrónico (productos y categorías) accesibles a los clientes.

Fluir

El flujo es el siguiente:

  • la entidad de categoría en sí se procesa y todos los cambios se guardan en DB (en términos de transacción activa)
  • luego se envía el evento afterSave (este evento se envía a cualquier entidad en Magento 2 si es hijo de AbstractModel)
  • urlProcessing se ejecuta de acuerdo con la configuración del observador en el módulo Magento_CatalogUrlRewrite:
<event name="catalog_category_save_after">
    <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver"/>
</event>
  • El proceso genera reescritura de URL de categoría canónica
  • el proceso se ejecuta a través de todos los productos (productos secundarios directos así como productos en subcategorías)
  • El proceso genera reescrituras de URL actuales (redireccionamientos 301)
  • El proceso genera reescrituras de URL de anclaje
  • luego todas las reescrituras generadas se combinan en una matriz a través de array_merge
  • el proceso genera una consulta INSERT con reescrituras generadas como enlace para ella
  • proceso lógico ejecutando la ejecución de la consulta

Problema real

El error que se muestra en la interfaz es "La clave de URL para la tienda especificada ya existe". pero el mensaje de error real que genera el motor DB es el siguiente:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[SOME_URL_PATH]' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID'

Entorno usado

El entorno es el siguiente:

  • Magento EE 2.1.2
  • Apache / nginx

Explicación de las causas

El problema es causado por el uso de array_merge (1st) para combinar todas las reescrituras de URL generadas y por el procedimiento de generación de reescrituras de URL de anclaje (2nd):

  • antes de array_merge
    before array_merge
  • después de array_merge
    after array_merge

El segundo es el uso de categoryRepository en el interior para obtener objetos de categoría, lo que abre la posibilidad de usar datos inconsistentes / desactualizados y el primero hace posible sobrescribir los datos generados correctamente con datos incorrectos de la generación de URL de anclaje.

En nuestro caso, el problema fue y sigue siendo con el producto rome-umbrella-lane que pertenece a la categoría _ accesorios de mujer_ (la clave de URL es womes-s-accesorios ). Cuando el usuario completa una nueva url_path (women-accessories), se ejecuta todo el proceso y durante la generación del ancla, una categoría de productos es de hecho una categoría secundaria para la editada:
vendor / magento / module-catalog-url-rewrite / Model / ProductUrlRewriteGenerator.php

protected function generateForSpecificStoreView($storeId, $productCategories)
...
$urls = array_merge(
            $this->canonicalUrlRewriteGenerator->generate($storeId, $this->product),
            $this->categoriesUrlRewriteGenerator->generate($storeId, $this->product, $this->productCategories),
            $this->currentUrlRewritesRegenerator->generate($storeId, $this->product, $this->productCategories),
            $this->getAnchorUrlRewriteGenerator()->generate($storeId, $this->product, $this->productCategories)
        );
...

La categoría de accesorios de
vendor / magento / module-catalog-url-rewrite / Model / Product / AnchorUrlRewriteGenerator.php

public function generate($storeId, Product $product, ObjectRegistry $productCategories)
...
$anchorCategoryIds = $category->getAnchorsAbove();
            if ($anchorCategoryIds) {
                foreach ($anchorCategoryIds as $anchorCategoryId) {
                    //TODO add check is anchored category is edited category and url_path updated
                    $anchorCategory = $this->categoryRepository->get($anchorCategoryId);
...

En $ this-> categoryRepository-> get ($ anchorCategoryId) , el objeto de categoría se obtiene de la caché:
proveedor / magento / module-catalog / Model / CategoryRepository.php

/**
     * {@inheritdoc}
     */
    public function get($categoryId, $storeId = null)
    {
        $cacheKey = null !== $storeId ? $storeId : 'all';
        //if (!isset($this->instances[$categoryId][$cacheKey])) {
            /** <strong i="9">@var</strong> Category $category */
            $category = $this->categoryFactory->create();
            if (null !== $storeId) {
                $category->setStoreId($storeId);
            }
            $category->load($categoryId);
            if (!$category->getId()) {
                throw NoSuchEntityException::singleField('id', $categoryId);
            }
            $this->instances[$categoryId][$cacheKey] = $category;
        //}
        return $this->instances[$categoryId][$cacheKey];
    }

Causa del problema

El producto se asigna directamente a la categoría editada (mientras se edita url_key) y se asigna a una de la categoría secundaria y la categoría editada marcada como ancla.

Opciones de resolución para Magento Team

La solución no es clara a primera vista, pero hay pocas opciones:

  • deshacerse del uso de caché para urlGeneration (puede afectar el tiempo y la velocidad drásticamente)
  • agregue una función para vaciar la caché de categorías directamente antes del procedimiento de urlGeneration (no afectará la velocidad de manera dramática, pero por ahora categoryRepository no tiene una característica para vaciar el campo

Opciones para nosotros hasta el lanzamiento de Magento 2

Una de las opciones que está disponible para los desarrolladores de proyectos del cliente: aplique una solución compleja con pocas reescrituras a través de la preferencia por categoryRepository para agregar el método de invalidación de caché de instancias y anchorURLRewriteGeneration con el uso del método agregado, pero obviamente esto no se recomienda en absoluto porque puede afectar diferentes partes de la funcionalidad.

Espero que esto ayude a solucionar este problema finalmente.

Actualmente estoy solucionando estos problemas (URL de anclaje incorrectas y no generando URL para varias tiendas) mediante:

  1. Reemplazando $storeId=$category->getStoreId() en module-catalog-url-rewrite / Observer / UrlRewriteHandler.php con $storeId=0 . Esto entonces funciona como la generación de URL de categoría y recorre las tiendas. Obtener la tienda actual solo crea (y elimina) enlaces para la tienda actual
  2. Comentando $this->getAnchorUrlRewriteGenerator()->generate($storeId, $this->product, $this->productCategories) en module-catalog-url-rewrite / Model / ProductUrlRewriteGenerator.php ya que todavía tengo que encontrar la situación en la que esto es realmente necesario.

Obviamente, ahora necesito convertirlos en complementos o preferencias, pero ¿alguien puede ver un problema con estas correcciones?

Después de mis cambios, los errores desaparecen en algunos casos. A veces sigo recibiendo el error. Tratando de localizar exactamente cuándo.

Ahora también lo estoy probando localmente. Pero la parte extraña es: antes, cuando trunqué la tabla url_rewrite , el problema desapareció, pero ahora, cuando trunco ​​la tabla y vuelvo a guardar la categoría, aparece el mismo error. He buscado en la base de datos y no hay otras categorías que compartan la misma clave de URL.

@kanduvisla si miras el ejemplo verás que yo tampoco los tenía y el error estaba ahí porque trató de INSERTARlos (lo cual falló). no porque ya estuvieran en la base de datos.

Recibí el mismo error, arreglé el mío eliminando los datos duplicados de las claves de URL del producto.
Lo que vi fue que tenía 2 o más productos con la misma clave de URL, en la misma categoría.

Probé la solución mencionada por janmyszkier. Al principio pude salvar la categoría. En un segundo guardado, aparece el error nuevamente :(

Si alguien quiere probar esta posible solución y darme algún comentario, ¡sería genial! En mi caso, solucionó nuestros problemas de reescritura de URL (basado en la base de código M2 CE 2.1.2, module-catalog-url-rewrite):
diff diff --git a/Model/Product/AnchorUrlRewriteGenerator.php b/Model/Product/AnchorUrlRewriteGenerator.php index 972b5c0..8845c7a 100644 --- a/Model/Product/AnchorUrlRewriteGenerator.php +++ b/Model/Product/AnchorUrlRewriteGenerator.php @@ -55,7 +55,7 @@ public function generate($storeId, Product $product, ObjectRegistry $productCate $anchorCategoryIds = $category->getAnchorsAbove(); if ($anchorCategoryIds) { foreach ($anchorCategoryIds as $anchorCategoryId) { - $anchorCategory = $this->categoryRepository->get($anchorCategoryId); + $anchorCategory = $this->categoryRepository->get($anchorCategoryId, $storeId); $urls[] = $this->urlRewriteFactory->create() ->setEntityType(ProductUrlRewriteGenerator::ENTITY_TYPE) ->setEntityId($product->getId()) diff --git a/Model/ProductScopeRewriteGenerator.php b/Model/ProductScopeRewriteGenerator.php index 94464ec..0cba5cb 100644 --- a/Model/ProductUrlRewriteGenerator.php +++ b/Model/ProductUrlRewriteGenerator.php @@ -138,7 +138,12 @@ public function generateForGlobalScope($productCategories) if (!$this->isGlobalScope($id) && !$this->storeViewService->doesEntityHaveOverriddenUrlKeyForStore($id, $productId, Product::ENTITY) ) { - $urls = array_merge($urls, $this->generateForSpecificStoreView($id, $productCategories)); + // before loading the category collection by looping it, clone it and set the correct store id, + // so we get the correct url_path & url_key for that specific store id + $storeSpecificProductCategories = clone $productCategories; + $storeSpecificProductCategories->setStoreId($id); + + $urls = array_merge($urls, $this->generateForSpecificStoreView($id, $storeSpecificProductCategories)); } }

@hostep Usé su fijo y funcionó para crear nuevas categorías, pero no funcionó cuando intenté volver a la categoría original, por ejemplo

prueba -> prueba1 = trabajado
prueba1 -> prueba2 = trabajado
test2 -> test = mismo mensaje de error

Tengo un problema similar cuando intento cambiar el nombre de la melena de la categoría en Store View (M2.1.0)
Además, comete el error solo para ciertas vistas de la tienda, no es posible cambiar el nombre de la categoría a algo completamente diferente.

¿Alguien tiene algunas consultas de "prueba" para la Db para ayudar a encontrar la categoría / producto ofensivo que está causando este error?
Además, ¿los nombres de las categorías se toman en contexto al guardar, o es solo la url_key lo que importa?

Razón por la que pregunto, me he asegurado de que todas mis categorías tengan claves de URL únicas, pero varias tienen el mismo nombre de texto (residen en diferentes subcategorías, por lo que en realidad son diferentes).

Quizás sería útil para alguien. Me he enfrentado al mismo problema en la instalación nueva de 2.1.2 actualizado a 2.1.3 más tarde. El problema fue que no pude guardar ninguna categoría con productos previamente importados, se lanzaba una excepción cada vez. El problema era que la categoría con ID 1 (Catálogo raíz) tenía el atributo is_anchor establecido en 1. De esta manera, magento intentó crear URL duplicadas para el mismo producto para las ID de categoría 1 y 2 (Categoría predeterminada). Resuelto cambiando el valor de ese atributo directamente en la tabla catalog_category_entity_int en la base de datos.

Creo que también es un problema de nomenclatura de productos y categorías que no es detectado por el manejo de UrlRewrite en Magento 2 cuando la propiedad de categoría "Anchor" se establece en "Sí".

He intentado una prueba simple en 2.1.3 como esta:

  1. Cree una subcategoría con el nombre: "Superior" y el ancla: "Sí" en "Categoría predeterminada"
  2. Cree una subcategoría con el nombre: "Prueba" y el ancla: "Sí" en "Arriba"
  3. Crear producto con nombre: "Prueba" asignándolo a la categoría "Prueba"

Al guardar el producto se produce una excepción en:
\Magento\UrlRewrite\Model\Storage\DbStorage::insertMultiple

He agregado algunos var_dump para obtener el mensaje (Magento 2 lanza otra excepción en lugar de registrar el mensaje o reenviar la excepción ...).

Mensaje:

SQLSTATE [23000]: Violación de la restricción de integridad: 1062 Entrada duplicada 'top / test.html-1' para la clave 'URL_REWRITE_REQUEST_PATH_STORE_ID', la consulta fue: INSERT INTO url_rewrite ( redirect_type , is_autogenerated , metadata , description , entity_type , entity_id , request_path , target_path , store_id ) VALORES (?,?,?,?,?,?,?,?,?), (?,?,?,?,?,?,?,?,?), (?,?,?, ?,?,?,?,?,?)

Magento 2 no puede insertar este UrlRewrite "top / test.html" para el producto "Test" porque ya está presente para la categoría "Test". Si la propiedad "Anchor" de la categoría "Top" se cambia a "No", el producto se puede guardar porque no se agregará UrlRewrite para el producto "Test". El mismo problema ocurre en un nivel de categoría más profundo. El producto UrlRewrites no se compara con la categoría UrlRewrites si se utiliza la propiedad de categoría de anclaje.

Lo mejor en la interfaz: Magento 2 solo usa las URL canónicas para los productos que se muestran en las categorías ...

@janmyszkier ¡salvaste mi viernes!

@basselalaraaj ¿qué hiciste para ENCONTRAR esos duplicados y en qué tabla?

El problema que tuve fue que había productos sin nombre , que debían haber sido autorizados en la importación, lo que probablemente sea malo.

Cuando tenga productos sin nombre, las claves de URL serán las mismas.

"" (empty) or ".html" or "/.html"

Por lo tanto, elimine los productos sin nombre.

Igual que boxyman, aquí:
https://github.com/magento/magento2/issues/1471

Resultó que ese también era mi caso. Importé una gran cantidad de productos a granel, algunos de los cuales de alguna manera no copian el nombre del producto y, por lo tanto, colocan una cadena vacía en la URL.

Después de arreglar esos productos, pude volver a hacer cosas con categorías sin encontrarme con el problema de la clave de URL.

¿Cómo están encontrando productos que tienen nombres en blanco? (¿Existe una manera fácil de identificarlos mediante el filtro de producto?) o una consulta de base de datos para ayudar a identificarlos

@spyrule Products > Catalog > sort by name

Tuve el mismo problema y, después de solucionarlo, descubrí que se importó un producto y que la tabla url_rewrite no convertía el valor request_path a minúsculas. Cuando se guardó la categoría o el producto, se encontró con una infracción de restricción de integridad y no pudo crear la entrada correcta convertida a minúscula. Después de cambiar manualmente el valor en la base de datos, todo funcionó bien. Puede utilizar la consulta a continuación para comprobar si hay valores en mayúsculas.

SELECCIONAR * DESDE url_rewrite DONDE request_path REGEXP BINARIO '[AZ]';

¿Este problema se solucionó con 2.1.4?

Magento 2.1.4: el problema aún no está resuelto.

Me encontré con este problema en un sitio empresarial 2.1.4 donde mi cliente había importado productos usando el importador nativo y usaba claves de URL en mayúsculas. Resolví esto cambiando todas las claves de URL a minúsculas usando la siguiente consulta. Utilice esta consulta bajo su propio riesgo y solo después de realizar pruebas exhaustivas.

-- ##########################
-- Update Product Data
-- ##########################

-- For review purposes, find all products with uppercase url keys
SELECT * 
    FROM catalog_product_entity_varchar 
    WHERE
        `value` REGEXP BINARY '[A-Z]' 
        AND attribute_id = (SELECT attribute_id FROM eav_attribute WHERE `attribute_code` = 'url_key' AND `entity_type_id` = 4);


-- Update all product url keys that have uppercase values to make them have lowercase values
UPDATE catalog_product_entity_varchar 
    SET `value` = LOWER(`value`) 
    WHERE 
        attribute_id = (SELECT attribute_id FROM eav_attribute WHERE `attribute_code` = 'url_key' AND `entity_type_id` = 4) 
        AND `value` REGEXP BINARY '[A-Z]';


-- ##########################
-- Update url_rewrite Data
-- ##########################

-- For review purposes, find all product url_rewrite entries with uppercase url keys
SELECT * FROM url_rewrite WHERE `entity_type` = 'product' AND request_path REGEXP BINARY '[A-Z]';

-- Update all product url keys that have uppercase values to make them have lowercase values
UPDATE url_rewrite 
    SET `request_path` = LOWER(`request_path`) 
    WHERE 
        `entity_type` = 'product'
        AND `request_path` REGEXP BINARY '[A-Z]';

Hola chicos, en mi caso recibí un montón de este problema.

Pasos para reproducir mis hallazgos:

  • Importé productos de una tienda Magento 1.9 a 2.1.4
  • Exporté el CSV, limpié algunos datos e intenté volver a importarlo.
  • Recibo alrededor de 50-100 de estos errores url_rewrite (la clave de URL especificada ya existe)
  • Voy y cambio cada una de las URL en el CSV manualmente, las cargo y se importan bien con todos mis cambios (excepto attribute_set_code, la solución de trabajo para ese problema está disponible a pedido).
  • Ahora, para confirmar, si miro el producto url_key en el backend en un producto cuya url_key reescribí, "item-a" -> "item-a-1" por ejemplo.
  • Exporte el csv. Vuelva a cargar el csv sin cambios

Resultado:
¿No lo sabe? La nueva url_key "item-a-1" obtiene de nuevo el error (La clave URL especificada ya existe).

@quynhvv Gracias por la solución propuesta. Sin embargo, probé su consulta, devuelve 0 filas.

¿Cuándo se solucionará finalmente esto? ¿El problema ha estado activo desde hace más de un año?

Convenido. Por favor, priorice esto.

Tengo el mismo problema cuando cambio la foto en mi página de Categoría. Ya 5 meses y la versión 2.1.4 ahora y tenemos un error aún sin corregir.

Este es probablemente uno de los errores más grandes en el código, ya que afecta la administración de Importaciones, Categorías y Productos, pero de alguna manera el equipo de desarrollo aún no ha solucionado este problema.

No arreglado en 2.1.5, lamentablemente.

2.1.5 fue una versión inútil, solo actualizó los encabezados de la licencia.

Equipo de Magento, solucione esto ... muchos proyectos en los que estamos trabajando actualmente tienen este problema ...

Tuve el mismo error ... algunas de las subcategorías tenían la misma clave de URL que algunos productos ... después de cambiar todas las claves de URL problemáticas, las categorías se pueden guardar ...

era magento 1.4.1 -> 1.9.3.2 -> 2.1.5

protected function doReplace($urls) {
    foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
        $urlData[UrlRewrite::ENTITY_TYPE] = $type;
        $this->deleteByData($urlData);
    }
    $data = [];
    foreach ($urls as $url) {
        $data[] = $url->toArray();
    }

    //$sql = "SELECT * FROM url_rewrite";
    //$result = $this->connection->fetchAll($sql); 
    foreach($data as $k=>$newrow){
        if($newrow['request_path'] == ".html"){
            unset($data[$k]);
            continue;
        }
        if(strpos($newrow['request_path'],"/.") !== false){
            unset($data[$k]);
            continue;
        }
        /*foreach($result as $j=>$oldrow){
            if($newrow['request_path'] == $oldrow['request_path']){
                unset($data[$k]);
            }
            if($newrow['target_path'] == $oldrow['target_path']){
                unset($data[$k]);
            }
        }*/
    }
    $this->insertMultiple($data);
}

en vendor / magento / module-url-rewrite / Model / Storage / DbStorage.php esto funcionó para mí.
A menudo asignaba invalide request_path que solo decía .html y lo hacía para un tipo de producto a pesar de guardar una categoría. Estoy seguro de que nadie tiene una página mysite.com/.html así que ... También estaba haciendo cosas como request_path con product / .html que obviamente está desordenado y mal. Puede agregar otros cheques. Separé las declaraciones if para facilitar la prueba de cada una. Usé declaraciones print_r porque esa era la ruta más directa para obtener comentarios sobre el código. Hasta ahora me funciona. Las cosas comentadas las puedes descomentar si las necesitas.

Estoy enfrentando este problema en Magento 2.1.3 EE.
El mío se corrige truncando la tabla de reescritura de URL.

hola @sanjayjethva , gracias por el informe, se crea el ticket interno MAGETWO-66480.

@sanjayjethva Solucione este problema, tenemos este problema en producción

También espero que el equipo de Magento pueda solucionarlo lo antes posible.

Entonces, probé todo. La solución en mi caso fue la url_key de los productos, no las categorías. Exporté todos mis productos (alrededor de 10000) y cambié todas las url_key de los productos a números y letras, PERO, todas las mayúsculas y minúsculas. Luego importé todo de nuevo. Pude guardar y modificar categorías nuevamente sin error de clave de URL nuevamente. Espero que esto ayude. Magento Ver. 2.1.2

He estado luchando con este problema en un sitio de producción durante más de medio año. Muchas horas de dolor y frustración a causa de esto.

En mi caso, creo que puede deberse a una falta de coincidencia entre entity_id y row_id hace que el proceso de creación de URL piense que la clave de URL de un producto está en blanco cuando en realidad no es posible encuentre el valor del atributo correctamente. Esto también ha causado problemas en otros lugares. Tuve que hackear una solución muy fea en la que actualizo SQL row_id para igualar entity_id , recopilando y actualizando cualquier otra tabla que haga referencia a esta columna, cambiando su valor para que coincida. Ugh.

@joshdavenport ¿Puede proporcionar algunas consultas para que las personas las prueben si están experimentando el mismo problema?

@gustavogravina ¿Puedes confirmar que si hay mayúsculas en las claves de la URL esto sucede? Acabo de exportar mi catálogo de productos para verificar y tengo algunos. Además, algunas claves de URL están vacías.

Avísame porque este problema me ha estado molestando durante meses 😢

@TommyKolkman Sí, en mi caso, la Capital en la url_key fue el problema. Además, la URL vacía o los nombres vacíos en los productos causaron problemas en mi configuración. Buena suerte

@TommyKolkman @gustavogravina ¿Hay alguna consulta que alguien sepa para comprobar si hay letras mayúsculas y / o URL en blanco tanto para productos como para categorías?

@spyrule Puede hacer referencia a la consulta que publiqué anteriormente sobre cómo hacer esto para las URL de productos y luego puede modificarla para las URL de categoría.

Además de las URL del producto en mayúsculas, aquí hay algunas otras razones que he encontrado por las que guardar una categoría podría resultar en un error "La clave de URL para la tienda especificada ya existe":

1 - URL de producto con valores de url_key en mayúsculas

Como muchos ya han mencionado en este hilo, los productos con claves de URL en mayúsculas pueden causar este error. Vea mi comentario anterior para consultas sobre cómo abordar esto. Parece que las categorías con claves de URL en mayúsculas también pueden causar este problema.

2 - URL de productos con claves duplicadas

Cuando se guarda una categoría, la tabla url_rewrite se actualiza con los productos de esa categoría.

Mi cliente importó sus productos a través de CSV y tenía algunos productos con valores url_key que estaban causando conflictos cuando se actualizaba la tabla url_rewrite. Por ejemplo, tenían productos con SKU como:

  1. CCP-MP24A1-XC-RW: 500 pies
  2. CCP-MP24A1 XC RW: 500 pies
  3. CCP.1234
  4. CCP-1234
  5. CCP-DWR-RR40
  6. CCP- DWR-RR40

Cuando Magento intentó insertar las URL de los productos anteriores en la tabla url_rewrite, tuvo problemas porque Magento realizó los siguientes reemplazos con los SKU anteriores:

  • Se reemplazaron los espacios con guiones (por lo que SKU #2 anterior entró en conflicto con sku #1 )
  • Puntos reemplazados con guiones (por lo que SKU #4 anterior entró en conflicto con sku #3 )
  • Se reemplazó "-" por "-" (un guión con un espacio después de que se reemplazó con un guión) (por lo que SKU #6 anterior entró en conflicto con sku #5 )

Para encontrar productos con claves de URL conflictivas, ejecuté esta consulta (IMPORTANTE: si está utilizando Community en lugar de Enterprise, reemplace la instancia de row_id value con entity_id ):

SELECT 
    group_concat(catalog_product_entity_varchar.value SEPARATOR "\n") AS url_keys,
    group_concat(catalog_product_entity_varchar.row_id) AS product_ids
FROM catalog_product_entity_varchar
WHERE attribute_id = 124 -- attribute ID for url_key attribute
-- MySQL doesn't have regex replace, so nesting replace functions to replace spaces and periods with dashes and replacing "- " with "-"
GROUP BY REPLACE(REPLACE(REPLACE(`value`, '- ', '-'), ' ', '-'), '.', '-')
HAVING 
    count(value_id) > 1
    AND count(DISTINCT row_id) > 1;

Luego, mi cliente arregló manualmente los productos con claves de URL en conflicto y eso solucionó este problema.

3 - Productos con atributos de clave de nombre / URL vacíos

Es menos probable que se encuentre este problema en proyectos típicos, pero mi comerciante de alguna manera había importado un par de productos con claves de nombre y URL vacías. Esto provocó un error como este al guardar una categoría:

URL key for specified store already exists. - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT INTO `url_rewrite` (`redirect_type`,`is_autogenerated`,`metadata`,`description`,`store_id`,`entity_type`,`entity_id`,`request_path`,`target_path`) VALUES…

Ejecuté esta consulta para encontrar productos con valores de atributo url_key faltantes, y una vez que esos productos se resolvieron, la categoría se pudo guardar:

SELECT * FROM `url_rewrite` WHERE `request_path` LIKE '';

4 - Árbol de categorías muy profundo

En algunos casos, un árbol de categorías muy profundo puede causar este problema. En algún momento del proceso de construcción de reescritura, las URL de los productos se almacenan en un campo varchar 255. Si tiene URL de productos que incluyen todas las categorías anteriores, terminará con URL largas. Truncado a 255, parecen URL duplicadas. Tome este ejemplo usando 10 como límite en lugar de 255:

cata/catb/catc/some-product
cata/catb/some-other-product
cata/catb/catc/another-product

Todos estos se truncarán a cata / catb /, lo que provocará un error de URL duplicada. Creo que la solución a esto fue cambiar "TIENDAS> Configuración> CATÁLOGO> Catálogo> Optimización de motores de búsqueda> Usar ruta de categorías para URL de productos" a "No" (que es la configuración predeterminada de Magento).

@erikhansen Intenté ejecutar:

SELECT 
    group_concat(catalog_product_entity_varchar.value SEPARATOR "\n") AS url_keys,
    group_concat(catalog_product_entity_varchar.row_id) AS product_ids
FROM catalog_product_entity_varchar
WHERE attribute_id = 124 -- attribute ID for url_key attribute
-- MySQL doesn't have regex replace, so nesting replace functions to replace spaces and periods with dashes and replacing "- " with "-"
GROUP BY REPLACE(REPLACE(REPLACE(`value`, '- ', '-'), ' ', '-'), '.', '-')
HAVING 
    count(value_id) > 1
    AND count(DISTINCT row_id) > 1;

Sin embargo en CE genera un error:

1054 - Columna desconocida 'catalog_product_entity_varchar.row_id' en 'lista de campos'

@spyrule Mi mal. La consulta de MySQL que publiqué fue para Magento Enterprise. Edité mi comentario de arriba con esto:

Si está utilizando Community en lugar de Enterprise, reemplace la instancia de row_id value por entity_id

¡Perfecto, gracias!

Tengo este mismo problema en magento 2.1.4

+1 problema bastante importante aquí, en 2.1.5

+1 por favor lo antes posible

mismo problema en 2.1.5, también tengo un ticket de soporte abierto para esto.

El mismo problema, ¿cómo resolver esto en 2.1.5?

@ winds1983 necesita leer ^^^, hay varias causas posibles y cada una tiene soluciones separadas. Algunos aún no están resueltos.

Estoy en Magento 2.1.5. Mi cliente solo importó masivamente alrededor de 2000 productos a través de csv y ahora ya no puedo guardar categorías que tienen productos asociados. Este es un problema muy real y muy grave. Haz algo con este @ magento-team.

Estoy trabajando en este problema.

mismo problema con WEBAPI Soap y guardar manualmente una categoría en 2.1.5

Este error de Magento 2 que puede corregir directamente está cambiando de archivo

Ruta del archivo: proveedor / magento / module-url-rewrite / Model / Storage / DbStorage.php

Código original:

desde

protected function doReplace($urls)
{
    foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
        $urlData[UrlRewrite::ENTITY_TYPE] = $type;
        $this->deleteByData($urlData);
    }
    $data = [];
    foreach ($urls as $url) {
        $data[] = $url->toArray();
    }
    $this->insertMultiple($data);
}

dentro

protected function doReplace($urls)
{
    foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
        $urlData[UrlRewrite::ENTITY_TYPE] = $type;
        $this->deleteByData($urlData);
    }
    $data = [];
    foreach ($urls as $url) {
        $data[] = $url->toArray();
    }

     /* Add this line : Get rid of rewrite for root Magento category to unduplicate things
    foreach($data as $key =>$info){
            if(isset($info['target_path']) && stristr($info['target_path'],'/category/1') && $info['entity_type']=='product'){
                    unset($data[$key]);
            }
    }

    $this->insertMultiple($data);
}

Después de insertar esta línea, borre el caché.

@sadeeshmca Desafortunadamente, su código para el método "doReplace" no me funciona.
Hago una importación completa del producto y sigo recibiendo el temido error.

@atultechelogy ¿ Alguna actualización sobre esto? Este es un error crítico y causa una disputa sin fin con mi cliente.

Dado que este es solo un problema menor, tómese su tiempo para solucionarlo, no hay necesidad de darse prisa :)

Para mí, el problema provino de largas url_keys que se acumularon para crear más de 255 caracteres request_path. Cuando buscaba en la tabla url_rewrite con la ruta completa (más de 255 caracteres), mysql no devolvía ningún resultado y magento estaba tratando de crear un 301 pero causó una clave dup ya que el original ya estaba al máximo en 255.

Todo lo que hice, y confirmé que funciona, fue crear una preferencia que anulara Magento \ CatalogUrlRewrite \ Model \ ProductUrlPathGenerator :: getUrlPath para:

class ProductUrlPathGenerator extends \Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator
{
    /** <strong i="7">@inheritdoc</strong> */
    public function getUrlPath($product, $category = null)
    {
        $path = $product->getData('url_path');
        if ($path === null) {
            $path = $product->getUrlKey()
                ? $this->prepareProductUrlKey($product)
                : $this->prepareProductDefaultUrlKey($product);
        }

        $path = $category === null
            ? $path
            : $this->categoryUrlPathGenerator->getUrlPath($category) . '/' . $path;

        return substr($path, 0, 255);
    }
}

De esta manera, internamente coincide con la longitud del campo db y no intenta crear un nuevo 301 cuando no es necesario.

(este es un proceso terriblemente lento y es extraño que incluso vuelva a calcular las URL cuando se cambia el nombre de un gato como se menciona aquí # 9706)

teniendo el mismo problema en 2.1.4. jugué un poco con mi base de datos y lo que funcionó para mí fue ir a catalog_category_entity_varchar y busqué el entity_id en cuestión y eliminé solo el atributo de la clave de url en mi caso, el atributo_id 33 volvió al administrador archivó la clave de url con exactamente la misma clave que fué borrado. ahora puede realizar cambios y guardar esa categoría.

Antes de editar el archivo principal de Magento Magento\UrlRewrite\Model\Storage\DbStorage , puede registrar en esta clase el parámetro $data de la función insertMultiple() , y comprobar qué valor tiene $data['request_path'] antes de subir La excepción.
Puede darte una pista de qué URL está duplicada.

Estoy en 2.1.6 y gracias al comentario de @erikhansen "URL de producto con clave duplicada" pude resolverlo. De hecho, era una clave de URL duplicada, por lo que el error tiene mucho sentido; tampoco está permitido tener SKU duplicados.

No es un problema real de Magento para mí, solo el mensaje de error podría ser más claro cuál es la clave de URL duplicada.

Por lo que puedo recopilar, Magento hace una inserción por lotes con múltiples valores / filas, por lo que podría ser cualquiera de ellos. Modifiqué la captura de excepción para intentar insertar una por una e informar el registro infractor. Me resultó útil identificar la causa en una base de datos grande.

El 9 de junio de 2017, a las 20:39, codedge [email protected] escribió:

Estoy en 2.1.6 y gracias al comentario de @erikhansen "URL de producto con clave duplicada" pude resolverlo. De hecho, era una clave de URL duplicada, por lo que el error tiene mucho sentido; tampoco está permitido tener SKU duplicados.

No es un problema real de Magento para mí, solo el mensaje de error podría ser más claro cuál es la clave de URL duplicada.

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub o silencia el hilo.

Otra cosa que he encontrado útil para solucionar este error es editar la "clave de URL para la tienda especificada ya existe". mensaje de error para incluir una sección de la consulta problemática de MySQL. Consulte este Gist para obtener un parche que puede aplicar a su entorno de desarrollo / etapa.

Hasta ahora, los únicos errores que me quedan en esto tienen que ver con las categorías, y eso es simplemente porque la longitud compilada es superior a 256 caracteres. No estoy seguro de si eso se ha solucionado en 2.1.6, pero todavía estoy en 2.1.3.

@spyrule - Por el elemento 4 en mi comentario del 1 de abril :

Creo que la solución a esto fue cambiar "TIENDAS> Configuración> CATÁLOGO> Catálogo> Optimización de motores de búsqueda> Usar ruta de categorías para URL de productos" a "No" (que es la configuración predeterminada de Magento).

Obviamente, esta es una solución al problema principal, pero debería resolver su problema.

0
voto negativo

También me enfrentaba al mismo problema al agregar / editar categorías.

En primer lugar, encontré que había una identificación de atributo incorrecta en la tabla "catalog_category_entity_varchar" para url_key y url_path. Luego verifiqué el atributo_id exect de ambos atributos ('url_key' y 'url_path').

por ejemplo, en la tabla "catalog_category_entity_varchar" mostraba '117' y '118' pero la identificación exacta era '119' y '120'. Luego descubrí que había algunas filas en la tabla "catalog_category_entity_varchar" con estos (id correcto '119', '120').

Seguí los pasos a continuación para resolver el problema.

firstly I searched rows in "catalog_category_entity_varchar" where attribute id is in (117,118) and exported the data from table.
then I searched rows in "catalog_category_entity_varchar" where attribute id is in (117,118,119,120) and deleted these data (rows) from table.
then I just opened exported file in notpadd++ then I changed attribute ids 117 with 119 and 119 with 120 and import the data again.

Asegúrese de realizar una copia de seguridad de la base de datos antes de realizar los pasos anteriores.

Tiene el mismo problema. Ninguna de las soluciones propuestas funciona para mi caso. El otro problema es que la categoría tiene muchos productos. Intenté reemplazar insertMultiple call con insertOnDuplicate pero obtuve otro error:

[2017-07-05 14:18:08] main.CRITICAL: Exception: Notice: Undefined index: category_id in magento/module-catalog-url-rewrite/Model/Category/Plugin/Storage.php on line 49 in magento/framework/App/ErrorHandler.php:61

agregar verificación de existencia de índice ayuda y ahora la categoría se guarda bien.

Ticket interno para ver. 2.1 - MAGETWO-66481

¡¡¡FINALMENTE!!!

@cpartica @buskamuza, ¿ puede solucionar este problema en la rama 2.1.x también?

@Koc , hay un ticket interno para ello como se mencionó anteriormente. Desafortunadamente, no puedo decir nada sobre la línea de tiempo, ya que debería priorizarse.

@cpartica ¿Puede proporcionar un parche para 2.1.x? ¿O exportarlo a 2.1.8?

Hola chicos,

Probemos mi problema de soluciones # 7298.

Espero que esto ayude.
Gracias.

@cpartica También me gustaría ver un parche que podamos aplicar a 2.1.x. Este problema está causando un sinfín de problemas para el sitio de comercio electrónico de mi cliente.

de acuerdo, por favor chicos, solucionen esto. Pesadilla SEO

El domingo 23 de julio de 2017 a las 10:12 p.m., Christopher Staley <
[email protected]> escribió:

@cpartica https://github.com/cpartica También me gustaría ver un parche
que podemos aplicar a 2.1.x. Este problema está causando un dolor sin fin a mi
sitio de comercio electrónico del cliente.

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/magento/magento2/issues/6671#issuecomment-317275173 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AV1NbbFcEZKrWTmHuPY675qUQhLI9iw6ks5sQ5sygaJpZM4KBPCb
.

¿Alguien ha descubierto cómo aplicar MAGETWO-66480 a 2.1.7?

@dverkade Noté que tienes una solicitud de extracción para solucionar esto aquí:
https://github.com/magento/magento2/pull/10356

¿Es eso aplicable a v2.1.x?

Hola @ christopher-s,

Hemos creado los cambios como correcciones básicas para nosotros mismos y luego los hemos reelaborado para crear el PR. Existe alguna diferencia en la forma en que se manejan las reescrituras de URL entre Magento 2.1 y 2.2, por lo que el código es un poco diferente, pero puede ver mis cambios en el PR y crear una solución para Magento 2.1 si lo desea. Por favor, voten a favor / les guste el PR, porque hay una gran discusión en curso y creo que cuanta más gente esté de acuerdo con los cambios y se involucre en la discusión, convencerá al equipo central para que lo considere más seriamente.

@dverkade, ¿ la corrección está incluida en la última versión (2.1.9)?

No se publicó como una solución en 2.1.9 KB, y el equipo de ingeniería simplemente falló en las pruebas G1. Entonces yo diría que no.

@sanjayjethva , gracias por tu informe.
El problema ya está solucionado en 2.2.0

¿Fue útil esta página
0 / 5 - 0 calificaciones