Pregunta

Lo que desencadena insertos/actualizaciones en el enterprise_url_rewrite tabla en EE 1.13? Tenemos un catálogo muy grande (aproximadamente 700,000 productos) y aproximadamente 500,000 de ellos no tienen correspondientes enterprise_url_rewrite entradas, a pesar de que tienen un url_key establecer en catalog_product_entity_varchar.

(Tenga en cuenta que enterprise_url_rewrite no es la misma tabla que core_url_rewrite)

URL empresarial reescribir

+----------------+----------------------+------+-----+---------+----------------+
| Field          | Type                 | Null | Key | Default | Extra          |
+----------------+----------------------+------+-----+---------+----------------+
| url_rewrite_id | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| request_path   | varchar(255)         | NO   | UNI | NULL    |                |
| target_path    | varchar(255)         | NO   |     | NULL    |                |
| is_system      | smallint(5) unsigned | NO   |     | NULL    |                |
| guid           | varchar(32)          | NO   |     | NULL    |                |
| identifier     | varchar(255)         | NO   | MUL | NULL    |                |
| inc            | int(10) unsigned     | NO   |     | 1       |                |
| value_id       | int(10) unsigned     | NO   | MUL | NULL    |                |
+----------------+----------------------+------+-----+---------+----------------+

URL de núcleo Reescritura

+----------------+----------------------+------+-----+---------+----------------+
| Field          | Type                 | Null | Key | Default | Extra          |
+----------------+----------------------+------+-----+---------+----------------+
| url_rewrite_id | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| store_id       | smallint(5) unsigned | NO   | MUL | 0       |                |
| id_path        | varchar(255)         | YES  | MUL | NULL    |                |
| request_path   | varchar(255)         | YES  | MUL | NULL    |                |
| target_path    | varchar(255)         | YES  | MUL | NULL    |                |
| is_system      | smallint(5) unsigned | YES  |     | 1       |                |
| options        | varchar(255)         | YES  |     | NULL    |                |
| description    | varchar(255)         | YES  |     | NULL    |                |
| category_id    | int(10) unsigned     | YES  | MUL | NULL    |                |
| product_id     | int(10) unsigned     | YES  | MUL | NULL    |                |
+----------------+----------------------+------+-----+---------+----------------+
¿Fue útil?

Solución 2

Resulta que el problema era que Magento está usando aún otra Tabla para almacenar claves de URL que ni siquiera conocíamos.

Durante el tiempo de importación-crunch, terminamos usando el importador Magmi (¡lo siento, todos!), Que está diseñado para 1.12 y abajo y, por supuesto, no sabe sobre el catalog_product_entity_url_key mesa. Los aproximadamente 100,000 productos con reescrituras de trabajo funcionaron porque se crearon utilizando un método más antiguo (más lento y más confiable).

Para proteger a las personas en el futuro de sus propios portapapeles, no pegaré el código que usé para sincronizar las dos tablas de URL sin índice, sino tomando las entity_id y value de catalog_product_entity_varchar donde el valueEl atributo es url_key e insertando en el catalog_product_entity_url_key Table hizo el truco.

Referencias: Borrar todas las reescrituras de URL - Enterprise

Otros consejos

Respuesta tardía pero podría ser útil. Sufrimos el mismo problema en las notas de lanzamiento de Magento EE (1.13) como resultado de cambiar al catálogo_product_entity_url_key para almacenar los valores URL_KEY.

Antes de usar MAGMI, los productos aleatorios importados a través del flujo de datos tenían URL como (/catalog/producto/ver/_cache_category/1/id//categoría//). Después de instalar Magmi, el problema se volvió más grave y todas las URL aparecieron así porque Magmi no es consciente de la nueva tabla catalog_product_entity_url_key y solo se inserta en catalog_product_entity_varchar.

Agregué el siguiente código dentro de la función (importitem) al archivo magmi/motines/magmi_productimportengine.php:

if (! $ this-> _ mismo) {// Actualizar acciones $ this-> updateStock ($ pid, $ item, $ isNew); }

// Fix product url_key after import
        if(isset($pid) && isset( $item['url_key'] ) && $item['url_key'] != "" ) {
            $store_ids = $this->getItemStoreIds($item);
            $new_url_key = $item['url_key'] . '-' . $pid;
            //if($isnew) {
                foreach ($store_ids as $store_id) {
                    try {
                        $cpeuk_sql = "INSERT INTO catalog_product_entity_url_key(
                            SELECT value_id, entity_type_id, attribute_id, store_id, entity_id, '" . $new_url_key ."' FROM catalog_product_entity_varchar
                            WHERE entity_id = " . $pid . " AND attribute_id = 97 AND store_id = " . $store_id .
                        ")";
                        $this->insert($cpeuk_sql);
                        // $this->log("Recover/Insert new url_key: ".$new_url_key, "startup");
                    } catch (\PDOException $e) {
                        $cpeuk_sql = "UPDATE catalog_product_entity_url_key SET value = '" . $new_url_key . "'
                            WHERE entity_id = " . $pid . " AND attribute_id = 97 AND store_id = " . $store_id;
                        $this->update($cpeuk_sql);
                        // $this->log("Recover/Update url_key: ".$new_url_key, "startup");
                    }
                }
            //}
        }
        ////

$ this-> touchProduct ($ pid);

Esto ha solucionado las URL para la mayoría de los elementos cargados y agrega la ID de producto a la URL para evitar URL duplicadas. Sin embargo, algunos de ellos solo obtienen la identificación del producto. (Eg /-1111). Hasta donde creo que esto no está relacionado con nuestra solución porque ignoramos agregar valores en blanco URL_KEY.

Tal vez hay una mejor solución, pero no tuvimos mucho tiempo para profundizar más en el código de Magmi.

Consulte mi comentario sobre cómo 1.13 EE usa desencadenantes MySQL para insertar datos planos en insertos/actualizaciones/etc.

Todavía puede usar la línea de comando para "forzar" una regeneración del índice a través de:

php shell/indexer.php reindexall (ver -- help) para opciones.

También me he encontrado con claves de URL duplicadas antes, Vinai ha escrito un buen script de shell para ayudar a solucionar este problema también:

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top