Как добавить стороннюю библиотеку в magento?

Библиотека не нуждается в интеграции с magento, это в основном оболочка, которая взаимодействует с API.

Я хотел бы иметь возможность использовать эту библиотеку и делать эти вызовы API из контроллера или модели.

Где я могу поставить библиотеку? Как мне добавить их в автозагрузчик?

2 ответа

Решение

Посмотрите в папку /lib в корневом каталоге вашего сайта. Из каталогов Magento Base:

В папке библиотеки Magento находится немодульный код Magento. Сюда входит большой объем системного кода, который позволяет запускать Magento, а также ряд сторонних библиотек (включая Zend Framework). Библиотека также является последним пулом кода, который Magento будет искать при попытке автозагрузки файла.

Другими словами, если ваша библиотека поддерживает соглашение об именах файлов Zend - классы библиотеки будут найдены и загружены автозагрузчиком magento. В противном случае вы можете получить путь к вашему каталогу /lib с помощью Mage::getBaseDir('lib') и написать что-то вроде

require_once(Mage::getBaseDir('lib') . '/EZComponents/Base/src/base.php');

Как решение, которое работает идеально: вы можете расширить varien_event_observer, создать свою собственную функцию автозагрузчика и, используя событие controller_front_init_before, поместить этот автозагрузчик перед стеком __autoload. этот пример интеграции диспетчера событий солярия и симфонии может объяснить это:

class JeroenVermeulen_Solarium_Model_Observer_Autoloader extends Varien_Event_Observer {

    /**
     * This an observer function for the event 'controller_front_init_before'.
     * It prepends our autoloader, so we can load the extra libraries.
     *
     * @param Varien_Event_Observer $event
     */
    public function controllerFrontInitBefore( $event ) {
        spl_autoload_register( array($this, 'load'), true, true );
    }

    /**
     * This function can autoloads classes starting with:
     * - Solarium
     * - Symfony\Component\EventDispatcher
     *
     * @param string $class
     */
    public static function load( $class )
    {
        if ( preg_match( '#^(Solarium|Symfony\\\\Component\\\\EventDispatcher)\b#', $class ) ) {
            $phpFile = Mage::getBaseDir('lib') . '/' . str_replace( '\\', '/', $class ) . '.php';
            require_once( $phpFile );
        }
    }

}

и, конечно, ваши библиотеки должны быть в пуле библиотек! это решение предоставлено @Jeroen Vermeulen, и я благодарю его:)

Другие вопросы по тегам