infrajs / catalog
Catalog based on files docx and xlsx
Installs: 1 872
Dependents: 10
Suggesters: 0
Security: 0
Stars: 0
Watchers: 6
Forks: 2
Open Issues: 0
Language:Smarty
Requires
- akiyatkin/form: ~1
- akiyatkin/load: ~1
- akiyatkin/showcase: ~1
- infrajs/doc: ~1
- infrajs/excel: ~1
- infrajs/imager: ~1
- infrajs/layer-config: ~1
- infrajs/layer-seojson: ~1
- infrajs/mark: ~1
- infrajs/path: ~1
- infrajs/rest: ~1
- infrajs/router: ~1
- infrajs/rubrics: ~1
- dev-master
- v1.0.68
- v1.0.67
- v1.0.66
- v1.0.65
- v1.0.64
- v1.0.63
- v1.0.62
- v1.0.61
- v1.0.60
- v1.0.59
- v1.0.58
- v1.0.57
- v1.0.56
- v1.0.55
- v1.0.54
- v1.0.53
- v1.0.52
- v1.0.51
- v1.0.50
- v1.0.49
- v1.0.48
- v1.0.47
- v1.0.46
- v1.0.45
- v1.0.44
- v1.0.43
- v1.0.42
- 1.0.41
- 1.0.40
- 1.0.39
- 1.0.38
- 1.0.37
- 1.0.36
- 1.0.35
- 1.0.34
- 1.0.33
- 1.0.32
- 1.0.31
- 1.0.30
- 1.0.29
- 1.0.28
- 1.0.27
- 1.0.26
- 1.0.25
- 1.0.24
- 1.0.23
- 1.0.22
- 1.0.21
- 1.0.20
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.16
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.2
- 1.0.1
This package is auto-updated.
Last update: 2024-12-13 17:02:01 UTC
README
Каталог не использует базу данных. Имеет ограничение в ~1000 полных описаний на самом простом хостинге. При использовании memсache и хороших серверов ограничение можно подвинуть.
Установка через composer
{ "require":{ "infrajs/catalog":"~1" } }
Подключение слоя по адресу /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
У позиции значения Производитель
и Артикул
имеют свои копии с удалёнными некоторыми символами, которые нельзя использовать в адресной строке producer
и article
.
У групп descr.Наименование
и title
.
Уникальность позиции определяется парой producer
и article
эти параметры используются для ссылки на страницу полного описания позиции catalog/producer/article
.
Конфиг infrajs/config
{ "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.json Пример файла seo.json:
{ "title": "Позиция у которой заголовок seo создан вручную", "description": "Описание добавленное вручную" }
Как сделать своё оформление для параметра фильтрации
- Нужно добавить для каталога (infrajs/catalog) новую зависимость. Так как сам каталог не знает о ней, нужно изменить в конфиге каталога опцию dependencies. Сделать это можно в момент установки расширия в update.php через sys-конфиг или в корневом конфиге проекта. Пример через расшиение. В этом случае расширение точно подключится при обращении к каталогу. Без этой части при обращении к REST обработчикам каталога расширение не будет инициализироваться и подписки расширение с новым дизайном фильтров не сработают.
- Нужно сделать подписку на событие
Catalog.option
, которое срабатывает для всех параметров и по данным параметрам определить нужный фильтр и далее подготовить переменные для шаблона, которые сохранить в$param['block']
. Пример. - В подписке, в переменной
$param['block']['layout']
указать имя шаблона, который должен выводить этот фильтр. - В конфиге каталога нужно добавить путь до шаблона, который должен подключаться вместе с фильтрами "filtertpl":["-path/to/layout.tpl"]. Шаблон должен содержать подшаблон с именем layout-{layout}, где layout имя указанное в подписке в
$param['block']['layout']
. Можно это сделать подменив конфиг в корне проекта или в отдельном расширении, как здесь.
Как выбрать диапазон значений параметра
В фильтрах у каждого параметра предсмотрены специальные значения
- minmax=min/max - указывается диапазон значений
- no=1 - все позиции у которых значение не указанно
- yes=1 - все позиции у которых значение указанно
Псевод группы filgroups сгенерированные на оснвое парамеров
Описание групп хранится в свойстве conf.filgroups имя параметра и шаблон группы на его основе.
Класс gagarin
При клике показывает следующий за ним Html-элемент или тот который указан в атрибуте data-div. По умолчанию показываемый элемент должен быть скрыт display:none. Действие пользователя запоминается в sessionStorage