21

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

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

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

4

2 に答える 2

49

Webサイトのルートディレクトリにある/libフォルダを調べます。Magentoベースディレクトリから:

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

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

require_once(Mage::getBaseDir('lib') . '/EZComponents/Base/src/base.php');
于 2011-06-20T22:01:43.187 に答える
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 );
        }
    }

}

そして確かにあなたのライブラリはlibプールにあるはずです! このソリューションは@Jeroen Vermeulenによって提供されています。彼に感謝します:)

于 2014-04-06T20:18:50.103 に答える