Magento с использованием класса Composer в модуле


Я использую geoip2/geoip2:~2.0, но мне нужен доступ к данным GeoIP из класса модели magento.

use GeoIp2\Database\Reader; выдает ошибку. Я не уверен, как это назвать, чтобы иметь возможность использовать GeoIP.

Я знаю, что ответ будет легким, но 2 часа работы в Google не помогли.

** Редактировать ** Мой модуль устанавливает валюту в зависимости от географического местоположения, он расширяет Mage_Core_Model_Store

class Module_Currency_Model_Store extends Mage_Core_Model_Store
{

    public function getDefaultCurrencyCode()
    {

Текущий код использует переменную сервера $_SERVER["GEOIP_COUNTRY_CODE"]

Я хотел бы заменить на установку GeoIP с помощью композитора.

Для этого требуется следующий код:

require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php';
use GeoIp2\Database\Reader;

$reader = new Reader($_SERVER['DOCUMENT_ROOT'].'/geoip/GeoLite2-Country_20171205/GeoLite2-Country.mmdb');
$record = $reader->country( $_SERVER['REMOTE_ADDR'] );


$country_iso_code = $record->country->isoCode ;

Загрузчик вызывается в Mage.php, поэтому я не думаю, что это необходимо, но я не могу использовать

use GeoIp2\Database\Reader;

Я не знаю, как вызвать это из файла класса.

** РЕДАКТИРОВАТЬ ** Старый и новый неработающий код, требующий инструкции USE https://bitbucket.org/solvemyproblem/testmodule_currency/overview

Author: Darren, 2017-12-30

2 answers

Это должно помочь вам:

<?php

require_once $_SERVER['DOCUMENT_ROOT'] . 'vendor/autoload.php';
use GeoIp2\Database\Reader;

class Testmodule_Currency_Model_Store extends Mage_Core_Model_Store {

    public function getDefaultCurrencyCode() {

        $reader = new Reader($_SERVER['DOCUMENT_ROOT'] . 'vendor/GeoLite2-Country_20171205/GeoLite2-Country.mmdb');
        $record = $reader->country($_SERVER['REMOTE_ADDR']);

        var_dump($record->country->isoCode); die;
        // or do something else...

    }
}

Просто убедитесь, что ваш файл GeoLite2-Country.mmdb доступен по указанному адресу (в данном случае $_SERVER['DOCUMENT_ROOT'] . 'vendor/GeoLite2-Country_20171205/GeoLite2-Country.mmdb').

 1
Author: Christoph Farnleitner, 2018-01-01 23:06:58

Вам нужно будет добавить загрузчик композитора (vendor/autoload.php ) и зарегистрируйте его перед загрузчиком Magento. Это важно, потому что загрузчик Magento попытается включить файл, в котором, как он ожидает, будет находиться класс, который выдает ошибку, если этот файл не существует. Так что у более поздних загрузчиков вообще нет шансов.

Есть некоторые расширения с открытым исходным кодом, которые могут сделать это для вас, я могу порекомендовать https://github.com/magento-hackathon/Magento-PSR-0-Autoloader

Конфигурация согласно README:

Загрузчик композитора Magento

Вы также можете использовать это расширение для добавления загрузчика композитора.

Вам необходимо настроить путь к каталогу поставщиков в вашем <global/>-узел local.xml :

<composer_vendor_path><![CDATA[{{root_dir}}/vendor]]></composer_vendor_path>
 1
Author: Fabian Schmengler, 2020-06-15 08:30:17