在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:
- app/code/local/Mage/Catalog/Block/Product.php
- app/code/community/Mage/Catalog/Block/Product.php
- app/code/core/Mage/Catalog/Block/Product.php
- lib/Mage/Catalog/Block/Product.php
如果系统找不到这些文件中的任何一个,就会抛出错误。
我只是想知道我是否可以在本地代码池中创建产品块(即 \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:
- app/code/local/Mage/Catalog/Block/Product.php
- app/code/community/Mage/Catalog/Block/Product.php
- app/code/core/Mage/Catalog/Block/Product.php
- lib/Mage/Catalog/Block/Product.php
如果系统找不到这些文件中的任何一个,就会抛出错误。