Magento: ข้อผิดพลาดร้ายแรง: คลาส 'Mage_Giftcards_Helper_Data' ไม่พบใน… / app / Mage.php ที่บรรทัด 546


16

ฉันได้ติดตั้งส่วนขยายหนึ่งโมดูลซึ่งมีข้อผิดพลาดร้ายแรง

"ข้อผิดพลาดร้ายแรง: คลาส 'Mage_Giftcards_Helper_Data' ไม่พบใน .... / app / Mage.php ที่บรรทัด 546" ในผู้ดูแลระบบ

ฉันได้อ้างอิงลิงค์นี้อีกครั้ง/programming//a/9191286/2919940และลิงก์นี้เช่นกันที่/magento//a/7133/3693

แต่ฉันมี

<global>
<helpers>
        <giftcards>
            <class>Webtex_Giftcards_Helper</class>
        </giftcards>
    </helpers>
</global>

ในของฉันconfig.xmlและฉันมีชั้นนี้

class Webtex_Giftcards_Helper_Data extends Mage_Core_Helper_Data{
// my methods
}

ประกาศที่/app/code/local/Webtex/Giftcards/Helper/Data.phpเส้นทาง

ฉันได้ปิดการใช้งานคอมไพเลอร์และล้างแคชโดยการทำvar/cacheไดเรกทอรีว่าง

ฉันพบทุกหนทุกแห่งที่config.xmlควรมีคลาสตัวช่วยกำหนดและ Data.php ควรประกาศคลาสตัวช่วยนั้น

แต่ฉันมีทั้งสองอย่างในกรณีของฉันข้อผิดพลาดนี้มีเหตุผลอะไรบ้าง ฉันได้ทดสอบโมดูลนั้นในการติดตั้ง Magento ใหม่ของฉันเช่นกัน

เวอร์ชั่นวีโอไอพีคือ 1.7.0.2

โปรดให้ความช่วยเหลือสำหรับข้อผิดพลาดนี้หรือไม่? หากมีความขัดแย้งของชื่อชั้นเรียนเราจะแก้ปัญหาได้อย่างไร?

ขอบคุณ


แจ้งให้เราทราบหากมีข้อมูลเพิ่มเติมใด ๆ ที่คุณต้องการจากคำตอบของฉันหรือหากคุณมีการปรับปรุง
philwinkle

คำตอบ:


20

นี่เป็นเรื่องปกติเมื่ออ้างอิงผู้ช่วยที่หายไป ในหลายกรณีชื่อคลาสนั้นมีรูปแบบไม่ถูกต้องหรือชื่อย่อของคุณอ้างอิงไม่ถูกต้องซึ่งเป็นสาเหตุที่ Magento มองหามันในเส้นทางMage_Giftcards_Helper_Data(ดูตัวอย่างที่ 1 ด้านล่าง) MyCompany_MyModuleสำหรับตัวอย่างต่อไปนี้ผมได้ตั้งค่าโมดูลที่เรียกว่า

นี่เป็นเพียงไม่กี่วิธีที่คุณสามารถควบคุมผู้ช่วยได้:


นามแฝงคลาสตัวช่วยเหลือไม่ถูกต้อง:

ฉันอ้างอิงผู้ช่วยของฉันเป็น:

$helper = Mage::helper('mycompany');

ฉันได้รับข้อผิดพลาด:

Fatal error: Class 'Mage_Mycompany_Helper_Data' not found

เกิดอะไรขึ้น

นามแฝงคลาสผู้ช่วยของฉันถูกกำหนดเป็นmymodule:

<helpers>
    <mymodule>
        <class>MyCompany_MyModule_Helper</class>
    </mymodule>
</helpers>

การเปลี่ยนรหัสย่อของฉันMage::helper('mymodule')เป็นผลลัพธ์ที่ต้องการ


ชื่อคลาสที่มีรูปแบบไม่ถูกต้อง

ฉันอ้างอิงผู้ช่วยของฉัน (ถูกต้องในเวลานี้):

$helper = Mage::helper('mymodule');

ฉันได้รับ:

Fatal error: Class 'MyCompany_MyModule_Helper_Data' not found

เกิดอะไรขึ้น

คำจำกัดความของชั้นเรียนของฉันไม่มี "_Data":

class MyCompany_MyModule_Helper extends Mage_Core_Helper_Abstract
{


}

ผู้ช่วย / ที่กำหนดเอง:

สิ่งนี้คล้ายกับสิ่งที่เกิดขึ้นเมื่อคุณพยายามอ้างถึงคลาสตัวช่วยภายในไฟล์ที่ไม่มีชื่อ "Data.php"

ฉันอ้างอิงผู้ช่วยของฉันเป็น:

$helper = Mage::helper('custom');

เส้นทางตัวช่วยโมดูลของฉันถูกกำหนดเป็น:

<helpers>
    <mymodule>
        <class>MyCompany_MyModule_Helper</class>
    </mymodule>
</helpers>

ฉันมีไฟล์คลาสในแอพ / รหัส / local / MyCompany / MyModule / Helper / Custom.php

ฉันได้รับข้อผิดพลาด:

Fatal error: Class 'Mage_Custom_Helper_Data' not found

เกิดอะไรขึ้น

คุณต้องระบุคลาสตัวช่วยอื่น ๆ ในโมดูลเฉพาะเป็นพา ธ ย่อยไปยังชื่อย่อของตัวช่วยโมดูลของคุณ สิ่งนี้คล้ายกับการทำงานของบล็อกและรุ่น - แต่ในระดับสูงสุดไม่มีโฟลเดอร์ย่อย

ฉันแก้ไขข้อผิดพลาดนี้โดยอ้างอิงไฟล์คลา Custom.php helper ของฉันเช่น:

$helper = Mage::helper('mymodule/custom');

ตรวจสอบการเชื่อมโยงต่อไปนี้มันอาจจะยังมีปัญหาของการขาดหายไปช่วยเหลือ stackoverflow.com/questions/19590164/...
Neeraj Garg

4

สิ่งนี้จะเกิดขึ้นเมื่อคุณติดตั้งส่วนขยายพร้อมเปิดใช้งานคอมไพเลอร์นี่คือสิ่งที่คุณต้องทำ

1 แอพขั้นตอน / etc / module / โมดูลที่คุณติดตั้งเมื่อไม่นานมานี้ปิดการใช้งานโมดูล

2 ขั้นตอนเข้าสู่ระบบผู้ดูแลระบบ / เครื่องมือคอมไพเลอร์ปิดการใช้งานคอมไพเลอร์อัปโหลดรหัสอีกครั้งมันจะทำงานได้ดีจากนั้นคุณสามารถรวบรวมรหัสของคุณอีกครั้ง

โชคดี


1
  1. ตรวจสอบให้แน่ใจว่าไฟล์Data.phpอยู่ใต้ของคุณ

codepool/extension_name/module_name/Helper/Data.php

  1. หาก Data.php มีอยู่ในไดเรกทอรีที่กล่าวถึงข้างต้นให้เปิดไฟล์นั้นและคัดลอกชื่อคลาสโดยทั่วไปชื่อคลาสที่มีความหมายในการตั้งชื่อวีโอไอพีเช่น

packagename_modulename_foldername (ตัวช่วยหรือบล็อก) _ ชื่อไฟล์ (Data.php)

<?php

class package_module_Helper_Data{

}
  1. ย้ายไปที่โฟลเดอร์ root ของ magento และตรวจสอบให้แน่ใจว่ามีpackage_module_Helper_Data.phpอยู่

includes/src/

  1. หากคุณไม่เห็นให้สร้างไฟล์ php ด้วยชื่อนั้น (ซึ่งคุณได้รับจากข้อผิดพลาด) ภายใต้ไดเรกทอรีsrc
  2. คัดลอกเนื้อหาของ Data.php และวางในไฟล์ที่สร้างขึ้นใหม่นั่นคือทั้งหมด ฉันแน่ใจว่ามันจะช่วยคุณ
  3. แม้ว่าคุณจะได้รับข้อผิดพลาดหรือวีโอไอพีที่แสดงอะไรเกี่ยวกับส่วนขยายเพียงแค่ปิดการใช้งานโหมดการรวบรวมภายใต้ระบบวีโอไอพี -> เครื่องมือ -> การรวบรวม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.