Рубрики
vam shop Заметки Новости Обучение

Пример работы с Composer в VamShop!

В VamShop 2 по умолчанию интегрирована удобная работа с Composer, с любыми библиотеками с https://packagist.org/

Готовых библиотек десятки тысяч, есть готовые варианты для решения практически любых задач, не надо изобретать свой велосипед, в 99% случаях уже есть готовое решение в виде php класса на https://packagist.org/

В данной статья расскажу кратко, что такое Composer, и покажу один из вариантов возможного применения Composer в VamShop на примере определения гео данных покупателя при оформлении заказа в VamShop.

Если коротко, то сделаем так, что на странице оформления заказа у покупателя уже будут автоматически заполнены поля Город, Регион, Страна на основе его IP адреса.

Для этого будет использовать библиотеку Sypex GEO API, а устанавливать эту библиотеку будем в VamShop с помощью Composer.

https://sypexgeo.net/ru/api/

Краткое содержание статьи:

1. Что такое Composer и для чего он нужен в VamShop.

2. Почему Composer — это быстро, просто, удобно.

3. Устанавливаем php библиотеку Sypex GEO API в VamShop.

4. Определяем Город, Регион, Страну покупателя и заполняем поля формы на странице оформления заказа.

1. Что такое Composer и для чего он нужен в VamShop.

Для начала, что такое Composer.

Информация с https://ru.wikipedia.org/wiki/Composer

Цитата

Composer — это пакетный менеджер уровня приложений для языка программирования PHP, который предоставляет средства по управлению зависимостями в PHP-приложении. Composer разработали и продолжают поддерживать два программиста Nils Adermann и Jordi Boggiano. Они начали разрабатывать Composer в апреле 2011, а первый релиз состоялся 1 марта 2012. Идея создания пакетных менеджеров уровня приложений не нова и его авторы вдохновлялись уже существовавшим на тот момент времени npm для Node.js.

Composer работает через интерфейс командной строки и устанавливает зависимости (например библиотеки) для приложения. Он также позволяет пользователям устанавливать PHP-приложения, которые доступны на packagist.org, который является его основным репозиторием, где содержатся все доступные пакеты.

т.е. с помощью Composer Вы можете легко и удобно добавлять/обновлять библиотеки в VamShop, нет необходимости заходить на сайт разработчика библиотеки, скачивать архив с кодом, распаковывать, копировать код из архива на сервер с установленным VamShop.

Нет необходимости подключать эту библиотеку в коде VamShop, всё уже автоматически будет подключено и готово к работе.

С Composer всё делается намного быстрее, а главное, при выходе новой версии библиотеки, опять же, не надо идти на сайт, скачивать новую версию, переписывать файлы.

Достаточно просто в консоли написать: composer update

и всё, Composer сам проверит, есть ли обновления и обновит, если нужно.

Это особенно важно, учитывая недавние примеры с phpMailer, библиотекой для отправки почты, в которой были найдены уязвимости.

Вот с помощью Composer обновить phpMailer можно было бы практически автоматически 🙂

Без «ручного» труда, закрыв тем самым найдённую уязвимость у себя на сайте.

2. Почему Composer — это быстро, просто, удобно.

Все библиотеки, доступные через composer находятся в едином хранилище https://packagist.org/

Точнее на этом сайте хранятся записи о всех добавленных в Composer библиотеках, сам код должен быть на https://github.com

Все используемые в VamShop через Composer библиотеки должны быть описаны в файле /app/composer.json

т.е. в этом файле опиписывается, с какими именно библиотеками с http://packagist.org мы хотели бы работать у себя в VamShop.

Подробное описание настроек composer.json можно найти на официальном сайте https://getcomposer.org/doc/ и https://getcomposer.org/doc/04-schema.md , в данной статье лишь будет показан пример загрузки и использования одной библиотеки.

В хранилище https://packagist.org/ находятся десятки тысяч удобных библиотек на любые случаи.

Нет необходимости писать свой велосипед, удобнее взять уже готовые решения.

В нашей статье нам нужна библиотека для работы с Sypex GEO API, для примера, ищем в поиске, и, допустим, возьмём вот этот вариант: https://packagist.org/packages/klev/sypex-geo

Первое, что нам нужно, это скачать эту библиотеку и подключить её в VamShop.

Как подключаение библиотеки происходило без использования composer:

1. Заходили на сайт автора библиотеки — https://github.com/klevunin/sxgeo

2. Скачивали архив с кодом к себе на комп.

3. Распаковывали.

4. Подключались к своему магазину через ftp, к примеру.

5. Переписывали библиотеку в /app/Vendor папку.

6. Подключали её через App::Import к магазину.

7. И только затем могли работать с этой библиотекой в магазине.

Как подключение библиотеки происходит с использоваеним Composer:

1. Подключаемся к своему магазину через ssh, нам нужен доступ к консоли для работы с Composer.

2. Заходим в папку /app нашего магазина и выполняем команду: composer update

Всё, composer скачает/обновит всё что необходимо и подговит весь код для работы с библиотеками.

Всё установленные через Composer библиотеки сразу же доступны по всему коду VamShop.

3. Устанавливаем php библиотеку Sypex GEO API в VamShop.

Давайте для примера установим через composer библиотеку для работы с Sypex GEO API — https://github.com/klevunin/sxgeo

Для этого нам надо с /app/composer.json добавить информацию о новой библиотеке, которую мы хотим добавить в VamShop.

Открываем файл /app/composer.json и после:

    "name": "vamshop",

добавляем:

    "minimum-stability": "dev",

Эта опция нам необходима для того что б composer смог скачать код библиотеки из github хранилища — https://github.com/klevunin/sxgeo

т.к. автор библиотеки не использует релизы в github и не прописывает номера версий, то использование опции minimum-stability является обязательным условием, иначе composer не поймёт, что именно выкачивать.

Затем ниже, в разделе requre, меняем:

    "require": {
        "simplepie/simplepie": "~1.5"
    },

на:

    "require": {
        "simplepie/simplepie": "~1.5",
        "klev/sypex-geo": "*"
    },

Всё, сохраняем файл /app/composer.json.

т.е. файл composer.json — это описание того, что будет делать composer, что мы от него хотим.

В данном случае мы хотим, что б composer загрузил нам библиотеку klev/sypex-geo

Всё, теперь через терминал (ssh) подключаемся к магазину, переходим в папку /app и в папке app выполняем компанду:

composer update

Данной командой мы загрузим нашу новую библиотеку klev/sypex-geo в папку /app/Vendor

Всё, как только появилась папка klev/syper-geo в /app/Vendor, мы можем работать с этой библиотекой в магазине, она уже подключена в движок VamShop, никаких правок больше делать не надо, никаких include, require и т.д.

4. Определяем Город, Регион, Страну покупателя и заполняем поля формы на странице оформления заказа.​

Теперь осталось самое простое, определить город, регион, страну по IP адресу покупателя и вывести эти значение на страницу оформления заказа.

Официальный сайт Sypex GEO API — https://sypexgeo.net/ru/api/

Итак, теперь будем работать со скачанной библиотекой и автоматически заполним поля Город, Регион, Страна на странице оформления заказа, ведь чем меньше кликов, действий делает покупатель при оформлении заказа, тем лучше, тем быстрее и удобнее будет процедура оформления заказа в Вашем магазине.

Открываем файл с модулем оформления заказа /app/Catalog/function.checkout.php

и после:

	App::import('Model', 'PaymentMethod');
		$PaymentMethod = new PaymentMethod();

Добавляем:

	$SxGeo = new Klev\SypexGeo\SxGeo();
	$ip = $_SERVER['REMOTE_ADDR'];
	$data = $SxGeo->getCityFull($ip);
	$city = $data['city']['name_ru'];
	$region = $data['region']['name_ru'];
	$country = $data['country']['name_ru'];

Это мы определяем город, регион страну по IP адресу посетителя и записываем данные в переменные $city, $region, $state.

Теперь чуть ниже добавляем переменные для шаблона, меняем:

	$assignments = array(
		'ship_methods' => $keyed_ship_methods,

на:

	$assignments = array(
		'ship_methods' => $keyed_ship_methods,
		'city' => $city,
		'region' => $region,
		'country' => $country,

и вставляем в шаблон страницы оформления заказа js код, который заполнит поля формы Город, Регион, Страна.

Для этого меняем:

{if $phone_mask != ""}
  $("#phone").mask("{$phone_mask}");
{/if}  

на:

{if $phone_mask != ""}
  $("#phone").mask("{$phone_mask}");
{/if}  

$("#bill_city").val("{$city}");

$("#bill_state option:selected").prop("selected", false);

$("#bill_state option")
    .filter(function(index) { return $(this).text() === "{$region}"; })
    .prop("selected", true);

$("#bill_country option:selected").prop("selected", false);

$("#bill_country option")
    .filter(function(index) { return $(this).text() === "{$country}"; })
    .prop("selected", true);

и вот что у нас в итоге получилось.

Страница оформления заказа по определния города, региона, страны:

5a04271e01ecd_Screenshotfrom2017-11-0912

и после:

Screenshot from 2017-11-09 13-31-09.png

т.е. поля Город, Регион, Страна заполняются автоматически, определяя город, регион и страну покупателя по IP адресу.

Как минимум, мы избавили Вашего покупателя от 3 лишник кликов мышкой при оформлении магазина.

Это лишь один небольшой пример использования Composer в VamShop.

Просто небольшая вводная статья, что такое Composer и как его можно применять в VamShop.

Добавить комментарий

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