如何将第三方库添加到magento?

joh*_*ohn 21 php zend-framework magento zend-autoloader magento-1.7

该库不需要与magento集成,它主要是与API通信的包装器.

我希望能够使用此库并在控制器或模型中进行这些API调用.

我在哪里可以放图书馆?如何将它们添加到自动装带器?

Dmy*_*kin 49

查看网站根目录中的/ lib文件夹.来自Magento基地目录:

Magento的库文件夹是基于非模块的Magento代码所在的位置.这包括允许Magento运行的大量系统代码,以及许多第三方库(包括Zend Framework).该库也是Magento在尝试自动加载文件时将搜索的最后一个代码池.

因此,换句话说,如果您的库支持zend文件命名约定 - 将由magento autoloader找到并加载库类.否则,您可以使用Mage :: getBaseDir('lib')获取/ lib目录的路径并编写类似的内容

require_once(Mage::getBaseDir('lib') . '/EZComponents/Base/src/base.php');
Run Code Online (Sandbox Code Playgroud)


Moh*_*rbi 9

作为一个完美运行的解决方案:您可以扩展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 );
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

当然你的图书馆应该在lib池中!这个解决方案由@Jeroen Vermeulen提供,我感谢他:)

  • 它完美地运作!! 谢谢 !用于将Bpost库(https://github.com/tijsverkoyen/bpost)与Magento一起使用.类例:https://github.com/tijsverkoyen/bpost/blob/master/Bpost/Order/Box/AtHome.php (2认同)