1

我在 Magento CE 1.6.2 的每个页面上都调用了这个查询。为了找出从哪里调用它,我禁用了所有模块,删除了已完成的自定义,但它仍然被调用,这个查询减慢了页面加载时间,我想知道如何停止它从被执行。

下面给出了查询,为了简单起见,我删除了很多类别 id' 以保持 sql 简短。如果我能获得停止调用此查询的解决方案或提示,那就太好了。

SELECT `e`.*, IF(at_is_active.value_id > 0, at_is_active.value, at_is_active_default.value) AS `is_active`, IF(at_include_in_menu.value_id > 0, at_include_in_menu.value, at_include_in_menu_default.value) AS `include_in_menu`, `core_url_rewrite`.`request_path` FROM `catalog_category_entity` AS `e`
INNER JOIN `catalog_category_entity_int` AS `at_is_active_default` ON (`at_is_active_default`.`entity_id` = `e`.`entity_id`) AND (`at_is_active_default`.`attribute_id` = '119') AND `at_is_active_default`.`store_id` = 0
LEFT JOIN `catalog_category_entity_int` AS `at_is_active` ON (`at_is_active`.`entity_id` = `e`.`entity_id`) AND (`at_is_active`.`attribute_id` = '119') AND (`at_is_active`.`store_id` = 1)
INNER JOIN `catalog_category_entity_int` AS `at_include_in_menu_default` ON (`at_include_in_menu_default`.`entity_id` = `e`.`entity_id`) AND (`at_include_in_menu_default`.`attribute_id` = '934') AND `at_include_in_menu_default`.`store_id` = 0
LEFT JOIN `catalog_category_entity_int` AS `at_include_in_menu` ON (`at_include_in_menu`.`entity_id` = `e`.`entity_id`) AND (`at_include_in_menu`.`attribute_id` = '934') AND (`at_include_in_menu`.`store_id` = 1)
LEFT JOIN `core_url_rewrite` ON (core_url_rewrite.category_id=e.entity_id) AND (core_url_rewrite.is_system=1 AND core_url_rewrite.product_id IS NULL AND core_url_rewrite.store_id='1' AND id_path LIKE 'category/%') WHERE (`e`.`entity_type_id` = '9') AND (`e`.`entity_id` IN('105', '125', '284', '285', '286', '288', '289', '185', '463', '464', '465', '625')) AND (`e`.`entity_id` NOT IN('140', '145',  '530', '531', '775')) AND (IF(at_is_active.value_id > 0, at_is_active.value, at_is_active_default.value) = '1') AND (IF(at_include_in_menu.value_id > 0, at_include_in_menu.value, at_include_in_menu_default.value) = '1')

干杯阿琼

4

4 回答 4

1

这可能是由索引 catalogue_url 引起的

一个快速的解决方法是将所有索引设置为手动。

然后通过 cron 每小时运行这个 shell 脚本:

php shell/indexer.php --reindex catalog_product_attribute
php shell/indexer.php --reindex catalog_product_price
php shell/indexer.php --reindex tag_summary
php shell/indexer.php --reindex cataloginventory_stock
php shell/indexer.php --reindex catalogsearch_fulltext
php shell/indexer.php --reindex catalog_category_product
php shell/indexer.php --reindex catalog_category_flat
php shell/indexer.php --reindex catalog_product_flat 

它索引除 url 之外的所有内容。

然后每晚运行:

<?php

echo "clearing core_url_rewrite so that indexer can repopulate immediately\n";

require_once "/home/path/to/store/app/Mage.php";
umask( 0 );
Mage::App('default');

$resource = Mage::getSingleton('core/resource');

$writeConnection = $resource->getConnection('core_write');

$query = "TRUNCATE `core_url_rewrite`";

$writeConnection->query($query);

echo "cleared\n";

$start = time();

echo "reindexing catalog_url start \n";

$process = Mage::getSingleton('index/indexer')->getProcessByCode('catalog_url');
$process->reindexEverything();

$finish = time() - $start;

echo "reindexing catalog_url finished in ".$finish." seconds \n";

?>
于 2013-07-09T04:27:48.207 回答
0

top.phtml用定期更新的静态菜单版本替换代码。

menu.php在您的 magento 根文件夹中创建一个文件:

#!/usr/bin/php
<?php
    require_once('app/Mage.php');
    Mage::app();

        $block = new Mage_Catalog_Block_Navigation();
        $_menu = $block->renderCategoriesMenuHtml(0,'level-top');

        echo "
        <div class='nav-container'>
            <ul id='nav'>
                        $_menu
            </ul>
        </div>
        ";
?>

然后,在您的./shell目录中创建另一个文件create-category-menus.sh.

#!/bin/bash
/[path to magento root]/menu.php > /[path to magento root]/app/design/frontend/default/[template_name]/template/catalog/navigation/top.phtml.temp

rm -f /[path to magento root]/app/design/frontend/default/[template_name]/template/catalog/navigation/top.phtml

mv  /[path to magento root]/app/design/frontend/default/[template_name]/template/catalog/navigation/top.phtml.temp  /[path to magento root]/app/design/frontend/default/[template_name]/template/catalog/navigation/top.phtml

chown [webserver-user].[webserver-group]  /[path to magento root]/app/design/frontend/default/[template_name]/template/catalog/navigation/top.phtml

现在,只需create-category-menus.sh定期将 crontab 添加到您的 crontab 中,比如 15 分钟左右。

您可能需要为输出文件创建文件夹结构,这也假设您使用的是 linux 服务器。如果你不是,那么你应该是。:)

于 2012-08-16T20:44:32.427 回答
0

似乎是用于导航的查询。magento 默认主题将动态顶部导航的类别拉入:

/app/code/core/Mage/Catalog/Block/Navigation.php

renderCategoriesMenuHtml() 从(默认情况下)从以下位置调用:

基本/默认/模板/目录/导航/top.phtml

于 2012-07-10T21:12:32.607 回答
0

启用阻止 HTML 输出缓存。因此,菜单必须仅在第一个页面调用时呈现。由于 magento 1.7 这个块不再被缓存,缓存需要以编程方式启用。

于 2014-05-13T11:43:24.073 回答