Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alex19pov31/bitrix-linked-data
https://github.com/alex19pov31/bitrix-linked-data
Last synced: 23 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/alex19pov31/bitrix-linked-data
- Owner: alex19pov31
- Created: 2019-03-19T23:15:13.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-03-20T19:07:00.000Z (almost 6 years ago)
- Last Synced: 2024-03-26T16:44:13.244Z (10 months ago)
- Language: PHP
- Size: 14.6 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[![Latest Stable Version](https://poser.pugx.org/alex19pov31/bitrix-linked-data/v/stable)](https://packagist.org/packages/alex19pov31/bitrix-linked-data) [![Build Status](https://travis-ci.org/alex19pov31/bitrix-linked-data.svg?branch=master)](https://travis-ci.org/alex19pov31/bitrix-linked-data) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/alex19pov31/bitrix-linked-data/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/alex19pov31/bitrix-linked-data/?branch=master)
# Bitrix linked data
Хелпер для работы с часто используемыми данными - справочниками и т.д. Пердставляет из себя список именованных хранилищ данных. Предназначен для того чтобы избежать повторной выборки данных, вместо этого данные кешируется в статичном параметре класса хранилища и запрашиваются из него же.
## Установка
```bash
composer require alex19pov31/bitrix-linked-data
```## Работа с хранилищем
```php
use Alex19pov31\LinkedData\Storage;/**
* Возвращает хранилище данных
*
* test_data - имя хранилища
*/
$repository = Storage::getRepository('test_data');// Зашрузить данные в хранилище
$repository->putData([1,2,4,6]);// Добавить запись в хранилище с заданных ключом
$repository->addItem('key', 'data');// Проверка наличия данных в хранилище
$repository->isEmpty();// Количество записей
$repository->getCount();// Установить загрузчик данных (Alex19pov31\LinkedData\LoaderInterface)
$repository->setLoaderData($loader);// Инициализация данных хроанилища (если если установлен загрузчик)
$repository->init();// Вернуть все данные из хранилища
$this->getData();// Получение записи по ключу
$repository->getItemByKey($key);// Установить время кеширования (при инициализации данных)
$repository->cache($minutes);// Обновить кеш (отчищает текущий кеш и записывает текущие данные в кеш)
$repository->updateCache($minutes);
```## Загрузчики данных
Загрузчики содержат инструкции о том откуда и какие данные необходимо загружать в хранилище и имя хранилища. Есть 4 типа загрузкиков данных:
* DataEntityLoader - работает с классом DataManager.
* HLBlockLoader - работает с HL блоками.
* IblockLoader - работает с инфоблоками.
* SimpleLoader - произвольные данные.### DataEntityLoader
```php
use Alex19pov31\LinkedData\Loaders\DataEntityLoader;
use Bitrix\Iblock\IblockTable;
use Alex19pov31\LinkedData\Storage;/**
* Регистрация загрузчика данных без указания имени хранилища
*/
$dataManager = new IblockTable;
$loader = new DataEntityLoader($dataManager);
$loader->sort(['ID' => 'ASC'])
->filter(['FIELD1' => 'VALUE'])
->select(['ID', 'FIELD1', 'FIELD2']);/**
* Получение доступа к хранилищу по сгенерированному имени
*/
$tableName = IblockTable::getTableName(); // b_iblock
$repositoryName = DataEntityLoader::getRepositoryName($tableName); // table_b_iblock
$repository = Storage::getRepository($repositoryName);
``````php
use Alex19pov31\LinkedData\Loaders\DataEntityLoader;
use Bitrix\Iblock\IblockTable;
use Alex19pov31\LinkedData\Storage;/**
* Регистрация загрузчика данных с указанием имени хранилища
*/
$dataManager = new IblockTable;
$loader = new DataEntityLoader($dataManager, 'iblocks');
$loader->sort(['ID' => 'ASC'])
->filter(['FIELD1' => 'VALUE'])
->select(['ID', 'FIELD1', 'FIELD2']);/**
* Получение доступа к хранилищу по заданному имени
*/
$repository = Storage::getRepository('iblocks')->init();
$repository->isEmpty(); // false
$repository->getCount(); // 1
$repository->getData(); // [['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']]
$repository->getItemByKey(1); // ['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']
```### HLBlockLoader
```php
use Alex19pov31\LinkedData\Loaders\HLBlockLoader;
use Alex19pov31\LinkedData\Storage;/**
* Регистрация загрузчика данных без указания имени хранилища
*/
$loader = new HLBlockLoader('table_color');
$loader->sort(['ID' => 'ASC'])
->filter(['FIELD1' => 'VALUE'])
->select(['ID', 'FIELD1', 'FIELD2']);/**
* Получение доступа к хранилищу по сгенерированному имени
*/
$repositoryName = HLBlockLoader::getRepositoryName('table_name'); // hl_table_color
$repository = Storage::getRepository($repositoryName);
``````php
use Alex19pov31\LinkedData\Loaders\HLBlockLoader;
use Alex19pov31\LinkedData\Storage;/**
* Регистрация загрузчика данных с указанием имени хранилища
*/
$loader = new HLBlockLoader('table_color', 'colors');
$loader->sort(['ID' => 'ASC'])
->filter(['FIELD1' => 'VALUE'])
->select(['ID', 'FIELD1', 'FIELD2']);/**
* Получение доступа к хранилищу по заданному имени
*/
$repository = Storage::getRepository('colors')->init();
$repository->isEmpty(); // false
$repository->getCount(); // 1
$repository->getData(); // [['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']]
$repository->getItemByKey(1); // ['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']
```### IblockLoader
```php
use Alex19pov31\LinkedData\Loaders\IblockLoader;
use Alex19pov31\LinkedData\Storage;/**
* Регистрация загрузчика данных без указания имени хранилища
*/
$loader = new IblockLoader('iblock_code');
$loader->sort(['ID' => 'ASC'])
->filter(['FIELD1' => 'VALUE'])
->select(['ID', 'FIELD1', 'FIELD2']);/**
* Получение доступа к хранилищу по сгенерированному имени
*/
$repositoryName = IblockLoader::getRepositoryName('iblock_code'); // iblock_iblock_code
$repository = Storage::getRepository($repositoryName);
``````php
use Alex19pov31\LinkedData\Loaders\IblockLoader;
use Alex19pov31\LinkedData\Storage;/**
* Регистрация загрузчика данных с указанием имени хранилища
*/
$loader = new IblockLoader('iblock_code', 'iblock_data');
$loader->sort(['ID' => 'ASC'])
->filter(['FIELD1' => 'VALUE'])
->select(['ID', 'FIELD1', 'FIELD2']);/**
* Получение доступа к хранилищу по заданному имени
*/
$repository = Storage::getRepository('iblock_data')->init();
$repository->isEmpty(); // false
$repository->getCount(); // 1
$repository->getData(); // [['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']]
$repository->getItemByKey(1); // ['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']
```### SimpleLoader
```php
use Alex19pov31\LinkedData\Loaders\SimpleLoader;
use Alex19pov31\LinkedData\Storage;
use Bitrix\Main\Application;/**
* Регистрация загрузчика данных с указанием имени хранилища
*/
$loader = new SimpleLoader('repository_name');
$loader->setDataLoadCallback(function() {
$conn = Application::getInstance()->getConnection();
$res = $conn->query('select `ID`, `FIELD1`, `FIELD2` * FROM `b_iblock`')
return $res->fetchAll();
});
$loader->setItemLoadCallback(function($key) {
$conn = Application::getInstance()->getConnection();
$res = $conn->query('select `ID`, `FIELD1`, `FIELD2` * FROM `b_iblock` WHERE `ID` = '.$key)
return $res->fetch();
});/**
* Получение доступа к хранилищу по заданному имени
*/
$repository = Storage::getRepository('repository_name')->init();
$repository->isEmpty(); // false
$repository->getCount(); // 1
$repository->getData(); // [['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']]
$repository->getItemByKey(1); // ['ID' => 1, 'FIELD1' => 'VALUE', 'FIELD2' => '']
```