Pregunta

Me pregunto qué significa "inc".En mi caso particular, todas las reescrituras tienen establecido inc=1.

mysql> describe enterprise_url_rewrite;
+----------------+----------------------+------+-----+---------+----------------+
| Field          | Type                 | Null | Key | Default | Extra          |
+----------------+----------------------+------+-----+---------+----------------+
| url_rewrite_id | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| request_path   | varchar(255)         | NO   | MUL | 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    |                |
| store_id       | smallint(5) unsigned | NO   |     | NULL    |                |
| entity_type    | smallint(5) unsigned | NO   |     | NULL    |                |
+----------------+----------------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)

¡Gracias!

¿Fue útil?

Solución

Todo lo siguiente se centra en las URL de productos almacenadas en esta tabla; sin embargo, lo mismo se aplica también a las categorías.Esto es simplemente porque los productos son lo que estaba depurando y para ejemplos sencillos.

Sólo hay dos lugares donde puedo encontrar este valor usado.

1.Incrementando el contador

Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_RefreshAbstract::_refreshUrlRewrite

En ese método hay una consulta para actualizar la reescritura de la URL, tiene un poco de código PHP como:

$insert .= sprintf(' ON DUPLICATE KEY UPDATE %1$s = %1$s + 1',
$this->_getTable('enterprise_urlrewrite/url_rewrite') . '.inc');

Esto ayuda a generar una consulta realmente divertida como

INSERT INTO `enterprise_url_rewrite` (`request_path`, `target_path`, 
`guid`, `is_system`, `identifier`, `value_id`, `store_id`, 
`entity_type`) SELECT `uk`.`value` AS `request_path`, 
CONCAT('catalog/product/view/id/', uk.entity_id) AS `target_path`, 
'66af826f9f0df53191c06afe93c03159' AS `guid`, 1 AS `is_system`, 
`uk`.`value` AS `identifier`, `uk`.`value_id`, `uk`.`store_id`, 3 AS
`entity_type` FROM `catalog_product_entity_url_key` AS `uk` WHERE 
(uk.entity_id IN ('19472')) ON DUPLICATE KEY UPDATE 
enterprise_url_rewrite.inc = enterprise_url_rewrite.inc + 1

Lo que hay que tener en cuenta está justo al final, esto incrementará el contador si hay algún error de restricción de integridad.

En el caso de que los productos entren en esta consulta, significa que después de esta consulta le faltará la entrada correspondiente en enterprise_catalog_product_rewrite.Puedes comprobar qué productos faltan buscando select entity_id, sku from catalog_product_entity where entity_id not in(select product_id from enterprise_catalog_product_rewrite);.

Esto se debe a que la ruta de solicitud ya existe en enterprise_url_rewrite para el tipo de entidad/tienda dado, debería ver el inc El número aumenta cada vez que se ejecuta esta consulta si hay una infracción de restricción para esa entidad.

Esta lógica está en la clase abstracta y este método no se anula en ninguno de sus métodos secundarios, lo que significa que es consistente para

  • Registro de cambios (Mview / Actualización programada)
  • Fila (Actualizar al guardar)
  • Actualizar (reindexación completa)

Esto significa que todas las reindexaciones de URL tienen la misma lógica alternativa de "si se produce un error, incrementa el contador".

2.Usando el valor de incremento

Las dos siguientes llamadas parent::_getUrlRewriteSelectSql

  • Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh_Row::_getUrlRewriteSelectSql
  • Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh_Changelog::_getUrlRewriteSelectSql

que se define comoEnterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh::_getUrlRewriteSelectSql

¿Es el único otro lugar que puedo ver que usa el .inc valor en la base de datos.

Estos básicamente llaman un insertFromSelect declaración, y se ve realmente retorcido como:

SELECT CONCAT(r.identifier, CASE  WHEN ur.inc IS NULL OR `m`.`value` = 1 THEN '' 
ELSE CONCAT('-', ur.inc) END) AS `request_path`, `r`.`target_path`,
'65912c647bc5f65fc0f59df5f6477d05' AS `guid`, 0 AS `is_system`, 
CONCAT(r.identifier, CASE  WHEN ur.inc IS NULL OR `m`.`value` = 1 
THEN '' ELSE CONCAT('-', ur.inc) END) AS `identifier`, 
`r`.`redirect_id` AS `value_id`, `r`.`store_id`, 1 AS `entity_type`
FROM `enterprise_url_rewrite_redirect` AS `r` LEFT JOIN
enterprise_url_rewrite` AS `ur` ON ur.identifier = r.identifier
AND ur.store_id = r.store_id AND ur.entity_type = 1 LEFT JOIN 
`enterprise_index_multiplier` AS `m` ON ur.identifier IS NOT NULL

La parte clave que veo esCASE WHEN ur.inc IS NULL ORmetro.valor= 1 THEN '' ELSE CONCAT('-', ur.inc) END).Si el incremento es nulo, no aplique ningún valor de incremento; de lo contrario, concatenelo al final de la URL.Esta consulta se introduce en la lógica del paso 1, donde intenta _refreshUrlRewrite pero potencialmente con un incremento numérico al final.

En conjunto, creo que esta lógica existe para realizar un seguimiento del número que se aplicará al final de la URL cuando se encuentre un duplicado.

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