PHPackages                             infrajs/catalog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. infrajs/catalog

ActiveLibrary[File &amp; Storage](/categories/file-storage)

infrajs/catalog
===============

Catalog based on files docx and xlsx

v1.0.68(4y ago)01.9k6Smarty

Since Nov 1Pushed 3y ago5 watchersCompare

[ Source](https://github.com/infrajs/catalog)[ Packagist](https://packagist.org/packages/infrajs/catalog)[ RSS](/packages/infrajs-catalog/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (7)Dependencies (13)Versions (68)Used By (6)

catalog используется с infrajs
==============================

[](#catalog-используется-с-infrajs)

Каталог не использует базу данных. Имеет ограничение в ~1000 полных описаний на самом простом хостинге. При использовании memсache и хороших серверов ограничение можно подвинуть.

Установка через composer
------------------------

[](#установка-через-composer)

```
{
	"require":{
		"infrajs/catalog":"~1"
	}
}
```

Подключение слоя по адресу /catalog
-----------------------------------

[](#подключение-слоя-по-адресу-catalog)

```
{
	"crumb":"catalog",
	"external":"-catalog/catalog.layer.json"
}
```

Excel документы в папке `data/catalog/` будут интерпретироваться, как данные для каталога, где имя Excel Документа это имя Производителя. В папках `data/catalog/{producer}/{article}/` должны лежать картинки и docx файлы с полным описанием позиций каталога.

Фильтры
-------

[](#фильтры)

Для автоматически сфомированных фильтров необходим отдельный слой

```
{
	"external":"-catalog/filters.layer.json",
}
```

Список позиций можно фильтровать по разным параметрам. Фильтрация реализуется с помощью магиченской метки-параметра в адресной строке `&m=key:param1=value1:param2=value2`. Где `key` хэш уже переданных на сервер параметров, а `param1` и `param2` это только что добавленные параметры. Метка `m` должна передаваться во все php файлы, которые работают с выборкой. В описании слоя это делается подстановокой в шаблоне `...file.php?m={infra.Crumb.get.m}`Ответ сервера содержит уже новый хэш `mark` включающий и только что переданные параметры.

В скрипте весь набор параметров с новыми и старыми получается методом `$md=Catalog::initMark($ans);` где `$md` ассоциативный массив со всеми параметрами. В `$ans` будет добавлено свойство `mark` которое будет содержать хэш с новыми параметрами для использования в следующих ссылках. `initMark` настроена на работу с параметром `&m=` из адресной строки.

Список доступных параметров указан в `config.catalog.filters`, кроме указанных есть предопределённые

```
{
    "count":10,
	"reverse":false,
	"sort":false,
	"producer":{},
	"group":{},
	"search":false,
	"more":{},
	"cost":{}
}
```

Работа с данными
----------------

[](#работа-с-данными)

Данные каталога получаются с помощью `$data = Catalog::init();` Дальнейшая работа осуществляется средствами `Xlsx::runGroups`, `Xlsx::runPoss` из расширения [infrajs/excel](https://github.com/infrajs/excel)

У позиции значения `Производитель` и `Артикул` имеют свои копии с удалёнными некоторыми символами, которые нельзя использовать в адресной строке `producer` и `article`. У групп `descr.Наименование` и `title`.

Уникальность позиции определяется парой `producer` и `article` эти параметры используются для ссылки на страницу полного описания позиции `catalog/producer/article`.

Конфиг [infrajs/config](https://github.com/infrajs/config)
----------------------------------------------------------

[](#конфиг-infrajsconfig)

```
{
	"nds":false,
	"dir":"~catalog/",
	"cache":["~catalog/"],
	"title":"Каталог",
	"md":{ },
	"filename":"Производитель",
	"columns":[],
	"alwaysshowposs":true, //Показывать позиции, когда есть вложенные группы
	"filgroupsissort":false, //Сортировка значений фильтров по возрастанию
	"filgroups":[], //группы из параметров позиций
	"countonpage":10, //Количество позиций на странице по умолчаню
	"pageset":false, //Показывать кнопку сортировки
	"ignorelistname":true,//Имя листа не используется в качестве группы
	"showmore":true,//Параметры показываются в коротком описании позиции
	"listreverse":false, //Новые позиции в конце таблицы
	"searchingroups":true, //При использовании слоя с иерархией групп показывать строку поиска
	"foldwhen"=>30, //Скрывать значения фильтра если их больше
	"filteroneitem"=>true, //Показывать ли фильтр в котором только один пункт, который true для всей выборке
	"filtershowhard" => array(), //Фильтры, которые всегда показываются
	"filtermemory" => true, //При переходах по хлебным крошкам выбранные фильтры сохраняются
	"filterslimitpercent" = 10, //Процент позиций у которых должен быть указан параметр, чтобы он показался в фильтрах
	"filters":{
		"producer":{
			"posid":"producer",
			"posname":"Производитель",
			"title":"Производитель",
			"separator":false
		},
		"cost":{
			"posid":"Цена",
			"posname":"Цена",
			"title":"Цена",
			"separator":false //Символ который разделяет несколько значения в одной ячейки, например ","
		}
	}
}
```

Специальные колонки
-------------------

[](#специальные-колонки)

Колонки из Excel, которые индивидуально обрабатываются в шаблонах и не должы попадать в массив more и автоматически показываться в списке параметров нужно указать в config.column

### Предопределённые специальные колонки

[](#предопределённые-специальные-колонки)

- Наименование
- Файлы
- Артикул
- Производитель
- Цена
- Описание
- Скрыть фильтры в полном описании
- Фото (Название файла с картинкой в папке images)
- prod2 (альтернтивная папка с производителем, где в images искать картинки)

Описание группы
---------------

[](#описание-группы)

Описание группы это данные указанные над таблицей. Описание может занимать только две колонки. Имя параметра и значение параметра. Предусмотрены следующие параметры.

- Наименование - полное наименование группы или то наименование, которое должно показываться посетителю.
- Картинка - и значение **Большая** У всех позиций данной группы первая картинка в описании будет развёрнута на всю страницу.
- Артикул - и значение **Cкрытый**

Колонка Скрыть фильтры в полном описании
----------------------------------------

[](#колонка-скрыть-фильтры-в-полном-описании)

При добавлении в excel колонки **Скрыть фильтры в полном описании** со значением *true* например "скрыть" на странице позиции, данные используемые для фильтра не показываются в отдельной таблице. Предпологается что все параметры перечислены вручную в полном описании - документ Word.

Колонка Файлы
-------------

[](#колонка-файлы)

Указывается путь относительно папки каталога. Путь ведёт на папку или файл, который также нужно привязать к позиции.

Добавить свои фильтры
---------------------

[](#добавить-свои-фильтры)

При добавлении сових фильтров нужно скорректировать конфиг, например так:

```
{
	"columns":["ИД","Наличие","Акция"],
	"md":{
		"action":false
	},
	"filters":{
		"producer":{
			"posid":"producer",
			"posname":"Производитель",
			"title":"Производитель",
			"separator":false
		},
		"action":{
			"posid":"action",
			"posname":"action",
			"title":"Товары на акции",
			"separator":false
		},
		"cost":{
			"posid":"Цена",
			"posname":"Цена",
			"title":"Цена",
			"separator":false
		}
	}
}
```

Поддерживается ручная корректировка SEO
---------------------------------------

[](#поддерживается-ручная-корректировка-seo)

Для ручной корректировки SEO необходимо в папку позиции добавить файл seo.json Пример файла seo.json:

```
{
	"title": "Позиция у которой заголовок seo создан вручную",
	"description": "Описание добавленное вручную"
}
```

Как сделать своё оформление для параметра фильтрации
----------------------------------------------------

[](#как-сделать-своё-оформление-для-параметра-фильтрации)

1. Нужно добавить для каталога (infrajs/catalog) новую зависимость. Так как сам каталог не знает о ней, нужно изменить в конфиге каталога опцию dependencies. Сделать это можно в момент установки расширия в update.php через sys-конфиг или в корневом конфиге проекта. [Пример через расшиение](https://github.com/akiyatkin/catalog-range/blob/master/update.php). В этом случае расширение точно подключится при обращении к каталогу. Без этой части при обращении к REST обработчикам каталога расширение не будет инициализироваться и подписки расширение с новым дизайном фильтров не сработают.
2. Нужно сделать подписку на событие `Catalog.option`, которое срабатывает для всех параметров и по данным параметрам определить нужный фильтр и далее подготовить переменные для шаблона, которые сохранить в `$param['block']`. [Пример](https://github.com/akiyatkin/catalog-range/blob/master/infra.php).
3. В подписке, в переменной `$param['block']['layout']` указать имя шаблона, который должен выводить этот фильтр.
4. В конфиге каталога нужно добавить путь до шаблона, который должен подключаться вместе с фильтрами "filtertpl":\["-path/to/layout.tpl"\]. Шаблон должен содержать подшаблон с именем layout-{layout}, где layout имя указанное в подписке в `$param['block']['layout']`. Можно это сделать подменив конфиг в корне проекта или в отдельном расширении, как [здесь](https://github.com/akiyatkin/catalog-range/blob/master/update.php).

Как выбрать диапазон значений параметра
---------------------------------------

[](#как-выбрать-диапазон-значений-параметра)

В фильтрах у каждого параметра предсмотрены специальные значения

1. minmax=min/max - указывается диапазон значений
2. no=1 - все позиции у которых значение не указанно
3. yes=1 - все позиции у которых значение указанно

Псевод группы filgroups сгенерированные на оснвое парамеров
-----------------------------------------------------------

[](#псевод-группы-filgroups-сгенерированные-на-оснвое-парамеров)

Описание групп хранится в свойстве conf.filgroups имя параметра и шаблон группы на его основе.

Класс gagarin
-------------

[](#класс-gagarin)

При клике показывает следующий за ним Html-элемент или тот который указан в атрибуте data-div. По умолчанию показываемый элемент должен быть скрыт display:none. Действие пользователя запоминается в sessionStorage

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity78

Established project with proven stability

 Bus Factor1

Top contributor holds 97.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~35 days

Recently: every ~96 days

Total

67

Last Release

1494d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/341a8ef8a06866ad99b1bbcf0216fd8e331b076b1690a7d992c386192674b787?d=identicon)[akiyatkin](/maintainers/akiyatkin)

---

Top Contributors

[![akiyatkin](https://avatars.githubusercontent.com/u/953753?v=4)](https://github.com/akiyatkin "akiyatkin (574 commits)")[![oduvanio](https://avatars.githubusercontent.com/u/11479446?v=4)](https://github.com/oduvanio "oduvanio (12 commits)")[![Drakon5999](https://avatars.githubusercontent.com/u/5617158?v=4)](https://github.com/Drakon5999 "Drakon5999 (3 commits)")[![ange187](https://avatars.githubusercontent.com/u/13964595?v=4)](https://github.com/ange187 "ange187 (1 commits)")[![julianester](https://avatars.githubusercontent.com/u/20738046?v=4)](https://github.com/julianester "julianester (1 commits)")

### Embed Badge

![Health badge](/badges/infrajs-catalog/health.svg)

```
[![Health](https://phpackages.com/badges/infrajs-catalog/health.svg)](https://phpackages.com/packages/infrajs-catalog)
```

###  Alternatives

[knplabs/gaufrette

PHP library that provides a filesystem abstraction layer

2.5k39.8M123](/packages/knplabs-gaufrette)[google/cloud-storage

Cloud Storage Client for PHP

34390.8M125](/packages/google-cloud-storage)[illuminate/filesystem

The Illuminate Filesystem package.

15261.6M2.6k](/packages/illuminate-filesystem)[superbalist/flysystem-google-storage

Flysystem adapter for Google Cloud Storage

26320.6M30](/packages/superbalist-flysystem-google-storage)[creocoder/yii2-flysystem

The flysystem extension for the Yii framework

2931.7M62](/packages/creocoder-yii2-flysystem)[flowjs/flow-php-server

PHP library for handling chunk uploads. Works with flow.js html5 file uploads.

2451.6M15](/packages/flowjs-flow-php-server)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
