在Magento中覆盖没有自定义模块的块核心文件

Overwrite block core file without custom module in Magento

我只是想知道我是否可以在本地代码池中创建产品块(即 \app\code\local\Mage\Catalog\Block\Product.php)而不只制作我的自定义模块放置这个单个文件?

如果是这样,这个本地代码池块调用还是核心一个调用?如果是本地的,请告诉我原因。

如果您将 code/core 文件复制到 code/local 存储库,核心文件将被本地文件覆盖。

这是因为 app/Mage 中指定的加载系统文件的包含路径顺序。php:

$paths = array();
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
$paths[] = BP . DS . 'lib';

因此在您的情况下,系统将按以下顺序搜索 Product.php:

  1. app/code/local/Mage/Catalog/Block/Product.php
  2. app/code/community/Mage/Catalog/Block/Product.php
  3. app/code/core/Mage/Catalog/Block/Product.php
  4. lib/Mage/Catalog/Block/Product.php

如果系统找不到这些文件中的任何一个,就会抛出错误。