app / code / core / Mage / Core / functions.php에서 Magento 함수를 재정의하는 방법


Answers

다음 이유 때문에 app / code / local /Mage/Core/functions.php에 파일을 복사해서는 안됩니다.

  1. 전체 파일을 복사해야 변경 사항을 확인하는 것이 더 어려워집니다.

  2. 향후 업그레이드에서는 새로운 버전의 파일을 복사하여 변경 사항을 다시 구현하지 않는 한 사용할 수없는 새로운 기능을 도입 할 수 있습니다.

  3. 향후 업그레이드는 새로운 버전의 파일을 복사하고 변경 사항을 다시 구현해야한다는 사실을 기억하지 않는 한 핵심적인 버그를 해결할 수 있습니다.

  4. 포인트 2 & 3과 관련하여 각 업그레이드는 우리가해야 할 변화를 재검토하는 것을 의미하는 일의 방식을 바꿀 수 있습니다. 경우에 따라서는 오버라이드 된 메소드에 대해서도 마찬가지지만, 최소한 변경 사항이 어디에서 발생하는지 쉽게 식별 할 수 있습니다.

  5. 다른 사람이 같은 기술을 사용하기를 원하면 어떻게합니까? 핵심 코드와 무엇이 무엇인지 식별 ​​할 수 있다는 것은 점점 더 복잡해지고 있습니다.

  6. 코어 파일을 복사하면 원래 코드를 복사 한 소프트웨어 버전에서 "보증"되는 것을 효과적으로 막을 수 있으므로 코드를 "모듈"로 유지하는 것은 더욱 어려워집니다. 그것은 또한이 작품을 재사용하는 것이 훨씬 더 어렵다는 것을 의미합니다.

  7. 우리 네임 스페이스 밖에서 코드가 변경된 이유를 확인합니다. 즉, "Example_Module"과 관련된 모든 개발이 네임 스페이스에 있습니다.

/ app / code / core / local / Example / Module

app / code / core / local / Mage에 복사 된 코드는 알 수없는 기능 등을 지원하기 위해 변경 한 것임을 나타냅니다.

또한 Magento는 때때로 버그를 수정하는 패치를 릴리스합니다. 패치는 패치없이 복사 된 파일을 코어 안의 파일로만 패치합니다.

대신 내가 원하는 것을 할 수있는 함수를 작성하고 대신 새 함수를 호출하는 함수를 재정의하는 것이 좋습니다.

Question

이 파일에서 함수를 재정의해야합니다.

app / code / core / Mage / Core / functions.php

문제는 이것이 코어이므로 관련 클래스가 없다는 것입니다. 아마도 코어가 모듈조차도 아니기 때문일 것입니다. 누구든지 클래스없이 파일의 함수를 재정의하는 방법을 알고 있습니까?

어떤 도움을 주시면 감사하겠습니다.




1. UOPZ

core에서 functions.php 파일을 복사 및 유지할 필요없이이를 수행하는 방법이 있지만 확장 uopz ( pecl install uopz )가 포함 된 경우 magento의 함수 이름을 foo 에서 foo_uopzOLD 로 바꿀 수 있고 자신 만의 ( https : //secure.php.net/uopz )

그것은 효과적이고 자홍 (Magento)에 매우 유용합니다. 보통 변경할 수없는 것에 부딪칩니다. Uopz는 이러한 경우에 매우 유용합니다.

pros : works;), Magento를 업데이트 할 때마다 다시 실행하지 않아도됩니다 (올바르게 작동하는 경우 내부에서 foo_uopzOLD 를 호출 할 수 있으므로 어떤 경우에는 이전 버전과의 호환성을 보장 할 수 있기 때문에).

단점 : 조금 암묵적입니다.

2. 작성자 post-install-cmd

위의 파일이 마음에 들지 않지만 작곡가를 사용하면 원하는 파일을 패치 할 수 있습니다.

"scripts": {
    "post-install-cmd": "patch -p0 < change-core-functions.patch"
 }

전문가 : 명시 적 (패치 실패 - 작곡가 설치가 실패한 경우) 및 명시 적이므로 - 당신은 magento를 업그레이드 할 때마다 패치를 다시 방문하여 수정할 수 있습니다

단점 : 코어 파일을 수정 했으므로 .gitignore에 추가하려고합니다.

3. 추악한 솔루션 (위의 것보다 못생긴)

위의 어느 것도 가능하지 않은 경우 (실제로 작곡가와 시도해보십시오. 사용하지 않을 이유가 없습니다). 하지만 당신이 정말로 생각할 수있는 유일한 방법은 없을 때 - app / local / Mage / Core / functions.php를 생성합니다 - 당신이 필요로하는이 하나의 함수를 정의하십시오 - 원본을로드하십시오 /app/core/Mage/Core/functions.php - surround 모든 function foo() {...} with

if(!function_exists("foo"){ 
  function foo() {...}
}
  • 너의 의자를 잡고
  • 이 SOB를 eval 하십시오;)