Причиной, по которой вашему модулю нужен вспомогательный класс, является аргумент module
в файле system.xml :
<cashondelivery translate="label" module="cashondelivery">
Magento передает аргумент module
в Mage::helper()
заводской метод.Это, в свою очередь, завершает идентификатор класса до cashondelivery/data
.
Mage::helper('cashondelivery');
// identical to Mage::helper('cashondelivery/data');
Теперь Magento проверяет префикс класса для использования, ища отсутствующий узел global/helpers/cashondelivery/class
.
Пока довольно просто, но здесь это может быть немного запутанным для некоторых.
Если Magento не находит префикс вспомогательного класса, пытается создать его префиксом id класса с mage_
и добавлением _helper
.
Таким образом, вы получите mage_cashondelivery_helper
в качестве префикса класса и mage_cashondelivery_helper_data
в качестве полного имени класса.
Автозагрузчик превращает это в Mage / Cashondelivery / Helper / Data.php , который не может быть найден, и, следовательно, является исключением, которое вы испытываете.
Помимо создания класса Companyname_Cashondelivery_Helper_Data
, вам необходимо добавить сопоставление группы классов в файл config.xml следующим образом:
<global>
<helpers>
<cashondelivery>
<class>Companyname_Cashondelivery_Helper</class>
</cashondelivery>
</helpers>
</global>
Эта группа классов сопоставляется с префиксом классаэто все, что вам не хватает.