pastuhov / yii2-yml-catalog
YML (Yandex Market Language) generator.
Installs: 14 311
Dependents: 0
Suggesters: 0
Security: 0
Stars: 21
Watchers: 7
Forks: 16
Open Issues: 0
Type:yii2-extension
Requires
- php: >=5.3.0
- pastuhov/php-exec-command: 1.0.*
- pastuhov/php-file-stream: 1.0.*
- yiisoft/yii2: >=2.0.4
Requires (Dev)
- phpunit/dbunit: ~1.0
- phpunit/phpunit: 4.*
- scrutinizer/ocular: ~1.1
This package is not auto-updated.
Last update: 2024-11-09 19:13:13 UTC
README
Установка
Via Composer
$ composer require pastuhov/yii2-yml-catalog
Features
- легкий
- базируется на официальной документации https://yandex.ru/support/partnermarket/yml/about-yml.xml
Использование
-
Реализуем интерфейсы (примеры реализации всех классов смотри в директории
tests
) -
Создаем консольный контроллер:
namespace console\controllers; use pastuhov\ymlcatalog\actions\GenerateAction; use yii\console\Controller; /** * Class GenerateController */ class YmlController extends Controller { /** * @inheritdoc */ public function actions() { return [ 'generate' => [ 'class' => GenerateAction::className(), 'enableGzip' => true, # запаковать gzip-ом yml после генерации 'fileName' => 'yml-test.xml', # желаемое название файла 'publicPath' => '@runtime/public', # публичная директория (обычно корень веб сервера) 'runtimePath' => '@runtime', # временная директория 'keepBoth' => true, # опубликовать yml и .gz 'shopClass' => 'pastuhov\ymlcatalog\Test\models\Shop', 'currencyClass' => 'pastuhov\ymlcatalog\Test\models\Currency', 'categoryClass' => 'pastuhov\ymlcatalog\Test\models\Category', 'localDeliveryCostClass' => 'pastuhov\ymlcatalog\Test\models\LocalDeliveryCost', 'offerClasses' => [ 'pastuhov\ymlcatalog\Test\models\SimpleOffer' ], ], ]; } }
- Запускаем из консоли:
$ yii yml/generate
Дополнительно
Дополнительно с именем класса, реализации интерфейса, можно передавать следующие параметры:
- Объект класса ActiveQuery, или его наследника.
'categoryClass' => [ 'class' => 'pastuhov\ymlcatalog\Test\models\Category', 'query' => \pastuhov\ymlcatalog\Test\models\Category\Category::find(), ]
В данном случае, выборка данных будет производиться с помощью передаваемого ActiveQuery или его наследника; Позволяет использовать уже созданный объект, для выборки данных.
- Объект класса ActiveDataProvider, или его наследника.
'categoryClass' => [ 'class' => 'class' => 'pastuhov\ymlcatalog\Test\models\Category', 'dataProvider' => new ActiveDataProvider([ 'query' => Category::find(), 'pagination' => [ 'pageSize' => 1000, ] ]), ]
В данном случае, выборка данных будет производиться с помощью передаваемого ActiveDataProvider или его наследника;
Позволяет делать выборку данных с использованием постраничной пагинации.
Так-же может быть передан true, в качестве параметра, для автоматического создания объекта класса ActiveDataProvider со значением количества строк в странице равной 1000.
'categoryClass' => [ 'class' => 'class' => 'pastuhov\ymlcatalog\Test\models\Category', 'dataProvider' => new ActiveDataProvider([ 'query' => Category::find(), 'pagination' => true, ] ]
На больших объемах данных, выборка, с использованием ActiveQuery->batch(), расходует оперативную память, гораздо большую, чем значение установленное в конфигурацилнных файлах. (Скорее всего особенности работы библиотеки PDO).
Внимание: Использование ActiveDataProvider увеличивает время генерации выгрузки.
Преобразование символов " & > < ' в html-сущности
Яндекс Маркет ругается на символы " & > < '. Их нужно преобразовывать в html-сущности, чтобы проверка прайса проходила успешно. Чтобы это сделать, в модели необходимо реализовать интерфейс pastuhov\ymlcatalog\EscapedAttributes и определить метод getEscapedAttributes, который возвращает список необходимых для чистки атрибутов. В примере ниже мы указываем, что атрибут name необходимо фильтровать:
use pastuhov\ymlcatalog\EscapedAttributes; use pastuhov\ymlcatalog\SimpleOfferInterface; class SimpleOffer extends ActiveRecord implements SimpleOfferInterface, EscapedAttributes { ... public function getEscapedAttributes() { return [ 'name' ]; } ... }
Тестирование
$ composer test
или
$ phpunit
Проверить качество сгенерируемого файла можно следующими способами:
- Официальным валидатором https://old.webmaster.yandex.ru/xsdtest.xml
- При помощи
xmllint
(пример: xmllint --valid --noout yml-test.xml) - IDE PhpStorm также может помочь
Security
If you discover any security related issues, please email kirill@pastukhov.su instead of using the issue tracker.
Credits
License
GNU General Public License, version 2. Please see License File for more information.