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
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'
).
Вам нужно будет добавить загрузчик композитора (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>