{"id":36965381,"url":"https://github.com/webitproff/marketprofilter-cotonti","last_synced_at":"2026-01-13T19:58:33.318Z","repository":{"id":328754458,"uuid":"1116450332","full_name":"webitproff/marketprofilter-cotonti","owner":"webitproff","description":"Flexible filtering of products and services in category lists by custom parameters or characteristics, within a specific category or across the entire catalog. For Cotonti Siena CMF","archived":false,"fork":false,"pushed_at":"2025-12-16T04:13:12.000Z","size":132,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-18T00:29:51.167Z","etag":null,"topics":["cotonti","filter","marketplace"],"latest_commit_sha":null,"homepage":"https://abuyfile.com/market/cotonti/plugs/market-pro-filter","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webitproff.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-14T21:56:44.000Z","updated_at":"2025-12-16T04:13:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/webitproff/marketprofilter-cotonti","commit_stats":null,"previous_names":["webitproff/marketprofilter-cotonti"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/webitproff/marketprofilter-cotonti","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webitproff%2Fmarketprofilter-cotonti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webitproff%2Fmarketprofilter-cotonti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webitproff%2Fmarketprofilter-cotonti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webitproff%2Fmarketprofilter-cotonti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webitproff","download_url":"https://codeload.github.com/webitproff/marketprofilter-cotonti/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webitproff%2Fmarketprofilter-cotonti/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28398588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cotonti","filter","marketplace"],"created_at":"2026-01-13T19:58:32.681Z","updated_at":"2026-01-13T19:58:33.310Z","avatar_url":"https://github.com/webitproff.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Product filter **\"Market PRO Filter\"**  \n\n## 🇬🇧  Flexible product filtering in category lists by individual parameters or characteristics.  \n\nProperties for selection can be common for all products or class-based—for a specific category.  \nField types: `select`, `radio`, `checkbox`, and `range`.  \nParameter names and their values used for filtering are specified in the plugin admin panel, and each supports multilingualism. When editing a product, we mark the required characteristic values of existing parameters for filtering.  \nParameter names can be generic for all products, as well as specialized (class-based).\n\n\n[![Version](https://img.shields.io/badge/version-2.2.1-green.svg)](https://github.com/webitproff/marketprofilter-cotonti/releases)\n[![Cotonti Compatibility](https://img.shields.io/badge/Cotonti_Siena-0.9.26-orange.svg)](https://github.com/Cotonti/Cotonti)\n[![PHP](https://img.shields.io/badge/PHP-8.4-purple.svg)](https://www.php.net/releases/8_4_0.php)\n[![MySQL](https://img.shields.io/badge/MySQL-8.0-blue.svg)](https://www.mysql.com/)\n[![Bootstrap v5.3.8](https://img.shields.io/badge/Bootstrap-v5.3.8-blueviolet.svg)](https://getbootstrap.com/)\n[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://github.com/webitproff/marketprofilter-cotonti/blob/main/LICENSE)\n\n\u003cimg src=\"https://raw.githubusercontent.com/webitproff/marketprofilter-cotonti/refs/heads/main/Market-PRO-product-filter-plugin-Cotonti-by-webitproff.webp\" alt=\"Market PRO Filter plugin Cotonti CMF by webitproff\"\u003e\n\n---\n### [Demo](https://abuyfile.com/ru/market/cotonti/plugs)\n### [Support](https://abuyfile.com/forums/cotonti/custom/plugs/marketprofilter)\n### [Source code on GitHub](https://github.com/webitproff/marketprofilter-cotonti)\n### [Releases](https://github.com/webitproff/marketprofilter-cotonti/releases)\n---\n## Examples\n\n### 1. Common parameters\n\n**1.1. Parameter name (value group name)** — *Delivery Methods*  \nSuch parameters are not bound to any specific category and apply to all products in the catalog.\n\n**1.2. Parameter values**: *Self pickup*, *Courier*, *SuperDelivery Transport Company*\n\nResulting structure:\n\n```text\n/Common parameters/     # such parameters are not assigned to a specific category\n│\n├── Delivery methods/            # 1st parameter (value group name)\n│   ├── Self pickup                  # 1st value/property\n│   ├── City courier                 # 2nd value/property\n│   ├── Carrier pigeon               # 3rd value/property\n│   ├── Airmail Crash Lines          # 4th value/property\n│   └── SuperDelivery transport company  # 5th value/property\n│\n├── Country of manufacture/       # 2nd parameter (value group name)\n│   ├── Domestic manufacturer          # 1st value/property\n│   ├── China                          # 2nd value/property\n│   ├── Taiwan                         # 3rd value/property\n│   ├── India                          # 4th value/property\n│   └── Turkey                         # 5th value/property\n```\n\n---\n\n### 2. Class-based parameters\n\nHere, the term *class-based* refers to product classification within a specific category.  \nWithin that category, a product has a set of characteristic group names, as well as names and values of properties by which it is classified.\n\nLet us take the **Laptops** category as an example.\n\n**2.1. Parameter name (value group name)** — *Brand/Manufacturer*  \nSimilarly, we create value groups such as: *RAM Capacity*, *SSD Capacity (Storage)*, *Screen Diagonal*, *Processor Family*, *Processor Generation*, *Video Memory*, etc.\n\n**2.2. Parameter values**  \nWithin our class (laptops), each characteristic group has its own set of values inherent to each laptop, and these values are used for filtering in the product list.\n\nSchematic structure:\n\n```text\n/Class-based parameters/     # parameters assigned to a specific category — laptops\n│\n├── Brand/Manufacturer /\n│   ├── Lenovo\n│   ├── ASUS\n│   ├── DELL\n│   ├── MSI\n│   └── Samsung\n│\n├── RAM Capacity /\n│   ├── less than 4 GB\n│   ├── 4 GB\n│   ├── 8 GB\n│   ├── 16 GB\n│   ├── 32 GB\n│   └── more than 32 GB\n│\n├── SSD Capacity (Storage) /\n│   ├── less than 128 GB\n│   ├── 128 GB\n│   ├── 246 GB\n│   ├── 512 GB\n│   └── more than 512 GB\n│\n├── GPU Video Memory /\n│   ├── Integrated in CPU\n│   └── Discrete\n```\n\nThus, we can see how the filter structure is built for a specific classification within a category, and that general-purpose parameters can also be applied.\n\n---\n\n## 3. Basics of product filter operation\n\n### 3.1 Category requirement\n\nThe **Market PRO** product module requires specifying a category when publishing a product.\n\nAt the same time, the module allows retrieving a product list without selecting a category—the main catalog.  \nThis is a significant advantage of the module within the Cotonti CMF engine. For example, OpenCart CMS does not support this approach.  \nThis is also beneficial for SEO, as a single link can provide search engines with access to new content.\n\n---\n\n### 3.2 Product filtering without categories (common parameters)\n\nIn the product catalog, under the category list or in any convenient place, we place the filter block.  \nUntil a category is selected, filtering is available only by common parameters.\n\nPreviously discussed examples include *Delivery Methods* and *Country of Manufacture*. In a marketplace, you might add a *Seller* group with local sellers or retail chains. Characteristic groups can be arbitrary: *promotion*, *discounted*, *product condition*, *unique product*, etc.\n\n**Example product**:  \nA laptop that is new, with a metal case replacing a plastic one at the seller’s request, individual engraving, manufactured in Taiwan, and delivered via *SuperDelivery*.\n\n#### Filtering results\n\n**3.2.1**  \n`[New product] + [Unique product] + [Taiwan] + [SuperDelivery]`  \n→ The laptop appears in the catalog.\n\n**3.2.2**  \n`[New product] + [Unique product]`  \n→ The laptop also appears in the results.\n\n**3.2.3**  \n`[New product] + [Unique product] + [Taiwan] + [Airmail Crash Lines]`  \n→ The laptop does **not** appear.\n\n---\n\n### Why the product was excluded\n\nOnly products that have the selected parameter values appear in filter results.  \nThe laptop does not have the value *Airmail Crash Lines*, therefore it is excluded.\n\nFiltering logic:\n\n- `a + b` → the product has both values `(a + b)`\n- `a + b + c` → the product has all three values `(a + b + c)`\n- `a + b + c + d` → the product has all four values `(a + b + c + d)`\n\n---\n\n## Filtering logic visualization\n\n```text\n+-----------------------------------------+\n| Product                                 |\n+-----------------------------------------+\n         │\n         ▼\n  Different filters (filter_*)\n  ┌─────────────┬─────────────┐\n  │ filter_color│ filter_size │ ...\n  └─────────────┴─────────────┘\n         │\n         │  Logic: AND\n         ▼\n  Product must match ALL filters\n         │\n         ▼\n  Within one parameter:\n  ┌───────────────────────────┐\n  │ checkbox: red, blue       │\n  └───────────────────────────┘\n         │\n         │  Logic: OR\n         ▼\n  At least one value matches\n         │\n         ▼\n  Select / Radio / Range\n  (single value or range)\n         │\n         │  Logic: AND for range\n         ▼\n  Condition met or not\n         │\n         ▼\n+-----------------------------------------+\n| Included in final selection?            |\n| - Yes: all AND conditions are met       |\n| - No: any condition fails or parameter  |\n|   does not belong to the product        |\n+-----------------------------------------+\n```\n\n---\n\n**Market PRO Filter** is a simple and intuitive product filter plugin for **Cotonti CMF**, supporting multilingual parameter and value names, and offering high flexibility for use across different product and service categories.\n```\n/**\n * Market PRO Filter plugin for CMF Cotonti Siena v.0.9.26, PHP v.8.4+, MySQL v.8.0+\n * Date=2025-12-14\n * @package marketprofilter\n * @version 2.2.1\n * @author webitproff\n * @copyright Copyright (c) webitproff 2025 https://github.com/webitproff/\n * @license BSD\n */\n```\n---\n\n\n# 🇷🇺 Фильтр товаров **«Market PRO Filter»**  \nГибкая фильтрация товаров в списках категорий по индивидуальным параметрам и характеристикам.  \nПараметры выборки могут быть общими для всех товаров либо классовыми — для конкретной категории.  \nТипы полей: `select`, `radio`, `checkbox`, `range`.  \nНазвания параметров и их значения, по которым выполняется фильтрация, задаются в административной панели плагина и поддерживают мультиязычность. При редактировании товара выбираются необходимые значения характеристик существующих параметров для фильтрации.  \nНазвания параметров могут быть как общими для всех товаров, так и профильными (классовыми).\n\n---\n\n## Примеры\n\n### 1. Общие параметры\n\n**1.1. Название параметра (имя группы значений)** — *Способы доставки*  \nТакие параметры не привязываются к конкретной категории и применяются ко всем товарам каталога.\n\n**1.2. Значения параметра**: *Самовывоз*, *Курьер*, *Транспортная компания SuperDelivery*\n\nИтоговая структура:\n\n```text\n/Общие параметры/     # параметры не привязываются к конкретной категории\n│\n├── Способы доставки/            # 1-й параметр (группа значений)\n│   ├── Самовывоз                   # 1-е значение параметра\n│   ├── Курьер по городу            # 2-е значение параметра\n│   ├── Почтовым голубем            # 3-е значение параметра\n│   ├── Авиапочта Crash Lines       # 4-е значение параметра\n│   └── Трансп. компания SuperDelivery  # 5-е значение параметра\n│\n├── Страна производства/         # 2-й параметр (группа значений)\n│   ├── Отечественный производитель   # 1-е значение параметра\n│   ├── Китай                         # 2-е значение параметра\n│   ├── Тайвань                       # 3-е значение параметра\n│   ├── Индия                         # 4-е значение параметра\n│   └── Турция                        # 5-е значение параметра\n```\n\n---\n\n### 2. Классовые параметры\n\nПод термином *классовые параметры* понимается классификация товара в рамках конкретной категории.  \nТовар в этой категории имеет набор групповых характеристик, а также имена и значения свойств, по которым он классифицируется.\n\nВ качестве примера рассмотрим категорию **«Ноутбуки»**.\n\n**2.1. Название параметра (имя группы значений)** — *Бренд / Производитель*  \nАналогично создаются и другие группы значений, например: *Объём ОЗУ (RAM)*, *Объём SSD (Storage)*, *Диагональ экрана*, *Семейство процессоров*, *Поколение процессора*, *Видеопамять* и т.д.\n\n**2.2. Значения параметров**  \nВ рамках класса (ноутбуки) каждая группа характеристик имеет собственный набор значений, присущих каждому товару. Эти же значения используются для фильтрации товаров в списке.\n\nСхематично структура выглядит так:\n\n```text\n/Классовые параметры/     # параметры привязываются к конкретной категории — ноутбуки\n│\n├── Бренд / Производитель /\n│   ├── Lenovo\n│   ├── ASUS\n│   ├── DELL\n│   ├── MSI\n│   └── Samsung\n│\n├── Объём ОЗУ (RAM) /\n│   ├── менее 4 GB\n│   ├── 4 GB\n│   ├── 8 GB\n│   ├── 16 GB\n│   ├── 32 GB\n│   └── более 32 GB\n│\n├── Объём SSD (Storage) /\n│   ├── менее 128 GB\n│   ├── 128 GB\n│   ├── 246 GB\n│   ├── 512 GB\n│   └── более 512 GB\n│\n├── Видеопамять GPU /\n│   ├── Интегрированная в CPU\n│   └── Дискретная\n```\n\nТаким образом, можно понять, как формируется структура фильтра товаров под конкретную классификацию в рамках одной категории, а также как к таким товарам применяются параметры общего характера.\n\n---\n\n## 3. Основы работы фильтра товаров\n\n### 3.1 Обязательность категории\n\nМодуль товаров **Market PRO** требует указывать категорию при публикации товара.\n\nПри этом модуль позволяет получать список товаров и без выбора категории — основной каталог.  \nЭто является существенным преимуществом движка **Cotonti CMF**. Например, в OpenCart CMS подобная логика отсутствует.  \nДополнительно это даёт преимущество в SEO-оптимизации, когда по одной ссылке поисковая система получает доступ к новому контенту.\n\n---\n\n### 3.2 Фильтрация товаров без учёта категорий (по общим параметрам)\n\nВ каталоге товаров, под списком категорий либо в любом удобном месте, размещается блок фильтра.  \nДо тех пор, пока категория не выбрана, фильтрация доступна только по общим параметрам.\n\nРанее были рассмотрены примеры *Способы доставки* и *Страна производства*. Для маркетплейсов можно добавить группу *Продавец* со списком локальных продавцов или торговых сетей. Группы характеристик могут быть любыми: *акция*, *уценка*, *состояние товара*, *уникальный товар* и т.д.\n\n**Пример товара:**  \nНовый ноутбук, у которого по заказу продавца пластиковый корпус заменён на металлический, выполнена индивидуальная гравировка, страна производства — Тайвань, доставка — *SuperDelivery*.\n\n#### Результаты фильтрации\n\n**3.2.1**  \n`[Новый товар] + [Уникальный товар] + [Тайвань] + [SuperDelivery]`  \n→ ноутбук отображается в каталоге.\n\n**3.2.2**  \n`[Новый товар] + [Уникальный товар]`  \n→ ноутбук также присутствует в результатах фильтрации.\n\n**3.2.3**  \n`[Новый товар] + [Уникальный товар] + [Тайвань] + [Авиапочта Crash Lines]`  \n→ ноутбук отсутствует в результатах.\n\n---\n\n### Почему товар был исключён\n\nВ результатах фильтрации отображаются только те товары или услуги, которые имеют выбранные значения параметров.  \nВ данном случае у ноутбука отсутствует значение *Авиапочта Crash Lines*, поэтому он был исключён.\n\nЛогика фильтрации:\n\n- `a + b` → товар имеет оба значения `(a + b)`\n- `a + b + c` → товар имеет все три значения `(a + b + c)`\n- `a + b + c + d` → товар имеет все четыре значения `(a + b + c + d)`\n\n---\n\n## Схема логики фильтра\n\n```text\n+-----------------------------------------+\n| Товар                                   |\n+-----------------------------------------+\n         │\n         ▼\n  Разные фильтры (filter_*)\n  ┌─────────────┬─────────────┐\n  │ filter_color│ filter_size │ ...\n  └─────────────┴─────────────┘\n         │\n         │  Логика: AND («И»)\n         ▼\n  Товар должен соответствовать\n  ВСЕМ выбранным фильтрам\n         │\n         ▼\n  Внутри одного параметра:\n  ┌───────────────────────────┐\n  │ checkbox: красный, синий  │\n  └───────────────────────────┘\n         │\n         │  Логика: OR («ИЛИ»)\n         ▼\n  Подходит хотя бы одно значение\n         │\n         ▼\n  Select / Radio / Range\n  (одно значение или диапазон)\n         │\n         │  Логика: AND для диапазона\n         ▼\n  Условие выполнено или нет\n         │\n         ▼\n+-----------------------------------------+\n| Входит в итоговую выборку?               |\n| - Да: выполнены все условия AND          |\n| - Нет: хотя бы одно условие не выполнено |\n|   или параметр не принадлежит товару    |\n+-----------------------------------------+\n```\n\n---\n\n**Market PRO Filter** — это простой и наглядный плагин фильтра товаров для **Cotonti CMF**, поддерживающий мультиязычные названия групп характеристик и значений, а также обладающий высокой гибкостью применения в различных категориях товаров и услуг.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebitproff%2Fmarketprofilter-cotonti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebitproff%2Fmarketprofilter-cotonti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebitproff%2Fmarketprofilter-cotonti/lists"}