web-dev-qa-db-ja.com

サードパーティのライブラリをMagentoに追加する方法は?

ライブラリはmagentoと統合する必要はありません。ほとんどの場合、APIと通信するラッパーです。

このライブラリを使用して、コントローラーまたはモデル内からこれらのAPI呼び出しを実行できるようにしたいと思います。

ライブラリはどこに置くことができますか?それらをオートローダーに追加するにはどうすればよいですか?

21
john

Webサイトのルートディレクトリにある/ libフォルダを調べます。 From Magento Base Directories

Magentoのライブラリフォルダは、モジュールベースではないMagentoコードが存在する場所です。これには、Magentoの実行を可能にする大量のシステムコードと、多数のサードパーティライブラリ(Zend Frameworkを含む)が含まれます。ライブラリは、ファイルを自動ロードしようとしたときにMagentoが検索する最後のコードプールでもあります。

つまり、ライブラリがzendファイルの命名規則をサポートしている場合、ライブラリクラスはmagentoオートローダーによって検出およびロードされます。それ以外の場合は、Mage :: getBaseDir( ‘lib’)を使用して/ libディレクトリのパスを取得し、次のように記述できます。

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

完全に機能するソリューションとして、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 );
        }
    }

}

そして確かにあなたのライブラリはlibプールにあるべきです!このソリューションは@JeroenVermeulenによって提供されており、彼に感謝します:)

9
Mohamed23gharbi