как добавить стороннюю библиотеку в magento? - PullRequest
21 голосов
/ 21 июня 2011

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

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

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

Ответы [ 2 ]

49 голосов
/ 21 июня 2011

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

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

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

require_once(Mage::getBaseDir('lib') . '/EZComponents/Base/src/base.php');
9 голосов
/ 07 апреля 2014

Как решение, которое работает идеально: вы можете расширить 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, и я благодарю его:)

...