我正在向已经活跃的 Magento 网站添加一个额外的网站/店面。
在开发站点上进行设置时,我注意到每当我为多商店添加 .htaccess 代码时,所有产品都会从类别视图中消失。但是,我仍然可以通过直接链接访问产品,例如 my-domain.com/category/product。
这是我正在使用的 .htaccess 代码:
## Storefronts
# Main Store
SetEnvIf Host www\.my-domain\.com MAGE_RUN_CODE=main-store_code
SetEnvIf Host www\.my-domain\.com MAGE_RUN_TYPE=website
SetEnvIf Host ^my-domain\.com MAGE_RUN_CODE=main-store_code
SetEnvIf Host ^my-domain\.com MAGE_RUN_TYPE=website
# Second Store
SetEnvIf Host second-store\.my-domain\.com MAGE_RUN_CODE=second_store_code
SetEnvIf Host second-store\.my-domain\.com MAGE_RUN_TYPE=website
我已经将子域设置为使用根 Magento 安装作为其基本目录。多商店工作,我可以更改主题、设置、产品等。
我已经仔细检查了这里看到的所有内容,至少 5 次以上:接受的答案有一个类别故障排除清单
有没有人知道什么可能导致产品在前端可用但不在类别视图中?我们正在运行 Magento Enterprise 1.12.0.2
编辑:到目前为止,我们已经尝试过:
- 产品被分配到目录中的正确类别/商店。
- 产品已启用。(我们尝试了批量启用/禁用)
- 产品有数量。
- 产品设置为“有货”
- 管理库存操作系统设置为关闭
- 显示缺货设置为是。
- 正在使用多网站,并且产品已分配到目标网站。
- 我们已刷新、删除然后禁用缓存
- 我们已经通过管理员和命令行重新索引了所有内容。
- 我们执行了各种 var_dumps 来检查正确的商店 ID
- 我们检查了 USER_NOT_LOGGED_IN 的数据库组。它应该是 0。
- 如果您直接导航到它们,产品就会知道它们所在的商店和功能。
- 我们已经运行了一个数据库修复工具
- 我们已经运行数据库与新的数据库工具进行比较。(这发现了两个小的索引问题)我们再次重新索引但没有运气。
- 我们已禁用缓存关闭的所有非必要模块。
我们只是得到一个“没有符合选择的产品”。类别视图中的错误。
编辑#2 这些是 OSdave 指出的 list.php 故障排除中的 SQL 语句:
我认为注意到默认商店没有在前端使用也是有利的。它只是我们用来进口产品的基地。在上面的 .htaccess 文件中可以看到可见的店面。
#Base store (1)(this works):
2013-10-03T14:12:48+00:00 DEBUG (7): SELECT `e`.*, `cat_index`.`position` AS `cat_index_position`, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price` FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.visibility IN(2, 4) AND cat_index.category_id='3'
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0 ORDER BY `cat_index`.`position` ASC LIMIT 10
#This is from the store2 store (MAGE_RUN_CODE=main-store_code):
2013-10-03T13:35:38+00:00 DEBUG (7): SELECT `e`.*, `cat_index`.`position` AS `cat_index_position`, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price` FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=2 AND cat_index.visibility IN(2, 4) AND cat_index.category_id='3'
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '2' AND price_index.customer_group_id = 0 AND price_index.stock_id = 15 ORDER BY `cat_index`.`position` ASC LIMIT 10
#This is from the store3 store (RUN_CODE=second_store_code):
2013-10-03T14:48:05+00:00 DEBUG (7): SELECT `e`.*, `cat_index`.`position` AS `cat_index_position`, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price` FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=3 AND cat_index.visibility IN(2, 4) AND cat_index.category_id='37'
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '2' AND price_index.customer_group_id = 0 AND price_index.stock_id = 1 ORDER BY `cat_index`.`position` ASC LIMIT 9
我正在研究差异。乍一看,我注意到网站 ID 可能已关闭。
编辑#3 我比较了所有三个查询并与它们一起玩了一下。我发现我的 catalog_product_index_price 表似乎缺少我 90% 的产品和不是 store id=1 的每个产品
我可以通过 SQL 查询提取商店 ID 为 1 的任何产品。其他一切都失败了。我已经手动验证了正在传递的值。产品根本不存在于 catalog_product_index_price 表中。
现在怎么办?我已经尝试过数据库修复工具...
编辑#4 Stock_ID 来自 Multi-Warehouse 一个我们用来管理运输区域的 innoexts 插件。