akiyatkin / showcase
Requires
- akiyatkin/fs: ~1
- akiyatkin/seo: ~1
- infrajs/ans: ~1
- infrajs/catalog: ~1
- infrajs/config: ~1
- infrajs/db: ~1
- infrajs/event: ~1
- infrajs/excel: ~1
- infrajs/lang: ~1
- infrajs/layer-seojson: ~1
- infrajs/load: ~1
- infrajs/mark: ~1
- infrajs/once: ~1
- infrajs/path: ~1
- infrajs/rest: ~1
- infrajs/rubrics: ~1
- infrajs/sequence: ~1
README
数据 - 数据表 Prices - 价格表 Catalog - 数据和价格 Showcase - 前端API接口
新版本
开发标准实体和API,以便与之交互。
ENTITIES(对于任何表格,都应理解其实际实体,包括可能表示其他实体之间的关系的实体)
-
prices (price_id, price, price_nick) fix - producer_id, time, order, count, duration, ans
-
catalog (catalog_id, catalog, catalog_nick) fix - producer_id, time, order, count, duration, ans
-
groups (group_id, group_nick, group) fix - parent_id, icon, catalog_id, order
-
producers (producer_id, producer_nick, producer) fix - logo
-
models! (model_id, article, article_nick) fix - producer_id, group_id, catalog_id
-
items (item_num, item, item_nick) fix - model_id
-
values (value_id, value, value_nick)
-
props (prop_id, prop, prop_nick) fix - type
-
iprops! [model_id, item_num, prop_id] fix - number, text, value_id, order, price_id
====
如果删除了列,并且物品的props消失了,则除了那些具有price_id的props外,所有模型props都会被删除。
需要准确知道哪些属性属于mitem,哪些属于model。
价格配置(producer, isglob, isaccurate, catalogkeytpl, pricekeytpl, priceprop, catalogprop在配置中)true, false - pricekey_value全局,true, true - pricekey_id按priceprop_id, catalogprop_id,全局搜索false, false - pricekey_value对producer唯一,false, true - pricekey_id按priceprop_id, catalogprop_id,对producer唯一parse - 替换为更新价格,删除为删除价格
-showcase/
应用所有更新 重连所有文件
数据 文件 文件/已上传动作 asdf.xlsx ----/date 应用 asdf.xlsx date/date 应用 asdf.xlsx date/date 应用 asdf.xlsx date/date 应用
价格 文件 文件/已上传动作 asdf.xlsx ----/date 应用 asdf.xlsx date/date 应用 asdf.xlsx date/date 应用 asdf.xlsx date/date 应用
配置 ~prices.json
<pre>
showcase: {
"src":"~catalog/tables/",
"numbers":["Цена"],
"filters":{ //Если указано то для этих свойств для строк и bool создаётся string_nick, заполняется filters
"светильники-и-прожектора":["источник-света","степень-защиты"]
},
prices: {
name: {
"producer":"RPM",
"price_key":"....",
"catalog_key":"..."
"priceprop":"Артикул",
"catalogprop":"Код"
}
}
}
</pre>
-showcase/search -showcase/pos/producer/article -showcase/groups -showcase/producers 每隔24小时删除96小时前的标签
Showcase::parseNew();
例如,长组名“汽车记录仪 #avtoreg”来自描述中的名称。Id encod(全部) title是划线前的部分。
根据生产者计算与文件的关系。
- 导出生产者的所有产品。
- 索引所有与生产者相关的文件,文件名被视为产品(按逗号分隔的多个产品)和关联数组中的产品位置更新数据库。对于这些选项,指定price_id 1,则文件在更新数据时不会被删除。
图片、文件、文件、插图
图片、文件 - 文件名模板 插图 - 互联网中插图路径,直接进入images
justonevalue
numbers和values默认按逗号分割。可以通过在justonevalue属性中指定属性来取消某些属性的这种行为。
specprice(已弃用)
目录中的位置属性specprice会使目录价格优先于价格表价格
start和starts
指定开始标题的行号,默认值和特定工作表中的starts:{name: 10, name: 4}
skip
包含解释为什么某些价格表中的位置未接受并保留无价格的位置的数组。指定给生产者。
cleararticle
从价格中清除生产者名称的代码
"producers":{
"RusGuard":{
"skipcost":20,
"skipimage":0,
"skip":{
"Лист Программного обеспечения. Артикулы находятся в описании и автоматически не достаются":18,
"Лист ACS-202 нет цен, только Звоните":2
}
}
},
示例选项 ~showcase.json
{
"numbers":["Цена (опт 1)", "Цена (опт 2)","Цена (розница)","Код"],
"values":["Ед.","Применяемость","Наличие на складе","Доп. ВПР (ТЛТ)"],
"texts":["Описание","Наименование"],
"justonevalue":["Наименование"],
"groups":{
},
"filters":{
"светильники-и-прожектора":["источник-света","степень-защиты"]
},
"catalog":{
"Nokia":{
},
"El-car":{
"producer":"ЭЛКАР"
}
},
"prices":{
"El-car":{
"synonyms": {
"Опт":["опт"],
"Розница":["розница","Розничная цена, руб"]
},
"patterns":["article"],
"props":["Артикул","Производитель"],
"producer":false,
"priceprop":"Код",
"catalogprop":"Код"
},
"Amatek": {
"start":4,
"synonyms": {
"Опт":["опт"],
"Розница":["розница","Розничная цена, руб"]
},
"price":"{Path.encode(Модель)}",
"catalog":"{article}",
"ignore":["расшифровка обозначений","Выбор модели HVR 2018", "Выбор модели HVR 2019", "Выбор модели HVR 2017","Режимы HVR","Режимы NVR"]
},
"RVi": {
"start":2,
"synonyms":{
"Розничная цена":["РОЗНИЧНАЯ ЦЕНА"]
},
"ignoreart":["1-4-Объективы"],
"merge":true,
"price":"{Path.encode(Наименование)}",
"catalog":"{article}",
"ignore":["Оглавление","Совместимость доп. аксессуаров", "Совместимость доп. аксессуаров","!АКЦИИ","Выбор модели HVR","Оглавление"]
},
"Ritm": {
"start":7,
"price":"{Path.encode(Номенклатура)}",
"catalog":"{article}"
},
"Nice": {
"price":"{Path.encode(Артикул)}",
"catalog":"{article}",
"ignore":["Старт","Откатные ворота","Распашные ворота","Шлагбаумы","Секционные ворота","Радиоуправление","Внутривальные приводы","Прайс-лист на запчасти"]
},
"Линия": {
"start":7,
"head":["Артикул","","Описание","Цена"],
"price":"{Path.encode(Артикул)}",
"catalog":"Линия-{article}",
"ignore":["Лист2"]
},
"Optimus": {
"ignore":["Содержание"],
"start":2,
"price":"{код|Код}",
"catalog":"{КодПрайса}"
},
"Tantos": {
"start":6,
"ignoreart":["мониторы-с-кнопочным-управлением",
"мониторы-с-сенсорным-экраном",
"ts-exit-выводится-из-ассортимента",
"катушка-для-ts-el2369st-ss-и-ts-el2370ss"],
"synonyms": {
"Наименование":["Наименование товаров"],
"Опт.":["опт."],
"Розн.":["розн."]
},
"ignore":["Разъёмы и соединители"],
"start":6,
"price":"{~lower(Path.encode(Наименование))}",
"catalog":"{~lower(article)}"
},
"O-ZERO": {
"ignore":["Главная"],
"start":2,
"price":"{Path.encode(Наименование)}",
"catalog":"{article}"
}
}
}
SEO
通过akiyatkin/seo插件配置目录首页的SEO。对于其他页面,将自动生成。页面:组、生产者、位置
事件
Showcase-position.onshow
$pos - 完全描述位置
展示位置.onsearch
$pos - 搜索中位置的描述
Showcase-catalog.onload
处理从Excel加载的数据,在将其添加到数据库之前 $obj = ['model_id' => $model_id, 'pos' => &$pos, 'name' => $catalog_name ];
Showcase-prices.oncheck (已废弃 - 这个功能可以在 onload 中执行)
可能返回 false 并取消将该行从价格表中添加。可以添加一个已经存在于 props 中的属性来添加。
Showcase-prices.onload
在事件中添加已经存在于 props 中的所需属性。