Skip to content

Product Category

First-Pass Node Dossier

This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.

What It Is

ProductCategory is Pyle’s hierarchical category record for browse structure, storefront navigation, and category-level filter behavior. It can carry translated content, imagery, brand association, parent-child relationships, and curated attribute filters.

Parent hierarchy:

  • Catalog & Merchandising
  • Taxonomy
  • Product Category

Primary implementation paths:

  • packages/framework/src/Models/ProductCategory.php
  • packages/framework/src/Actions/ProductCategory
  • packages/framework/src/Http/Controllers/Api/Admin/ProductCategoriesController.php
  • packages/admin/src/Livewire/Admin/Settings/Categories

What Users Can Do With It

Direct capabilities

Admin users can:

  • create categories in Settings > Categories
  • edit names, descriptions, imagery, SEO content, slugs, and HTML content
  • assign parent categories
  • attach category attribute filters and control their featured/sort behavior
  • delete categories when they are not in use
  • create, update, and delete categories through the admin API
  • manage categories in bulk through Excel and ERP sync

Indirect capabilities

Other workflows use categories without making the category editor the only control point:

  • products can be assigned to categories
  • product types can be associated to categories through Excel
  • storefront browse paths and attribute filters depend on category configuration

Where It Is Managed

ChannelRoleNotes
Admin Settings UIDirectMain packaged category create/edit flow
Admin APIDirectCRUD plus search/filter/include support
Product admin flowsIndirectProducts choose a primary category and can sync category relations
StorefrontIndirectCategory pages are first-class shopper browse surfaces
Excel import/exportDirectCategory rows and category relationship sheets exist
ERP bridgeDirectCategory sync request and sync actions exist

Sources:

  • packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/CreateDialog.php
  • packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/EditDialog.php
  • packages/framework/src/Http/Controllers/Api/Admin/ProductCategoriesController.php
  • packages/framework/src/Http/Resources/Storefront/ProductCategoryResource.php
  • packages/framework/src/Actions/Import/Product/Sheets/ImportProductCategoryRows.php
  • packages/erp-bridge/src/Requests/ProductCategories/GetProductCategoriesRequest.php

Channel-Level Field Coverage

Admin create dialog

The packaged create dialog exposes:

  • parent_id
  • name
  • description
  • image_link

Source:

  • packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/CreateDialog.php

Admin edit dialog

The packaged edit dialog exposes:

  • parent_id
  • name
  • description
  • meta_title
  • meta_description
  • slug
  • image_link
  • html_content
  • product_attributes_filters

The attribute-filter workflow also exposes pivot-level behavior for:

  • featured
  • sort
  • sort_by

Source:

  • packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/EditDialog.php

Admin API

The admin API allows CRUD and list shaping around fields such as:

  • name
  • description
  • slug
  • SEO fields
  • product_manufacturer_id

It also supports including productManufacturer.

Source:

  • packages/framework/src/Http/Controllers/Api/Admin/ProductCategoriesController.php

Model fields that exist but are not clearly exposed in the inspected packaged category editor

Examples include:

  • active
  • product_manufacturer_id
  • cover_image_link
  • cover_image_link_2
  • icon_image_url
  • facet_filters
  • price_ranges_filters
  • filters
  • sort
  • brand_name_filter
  • product_type_filter
  • has_sample_filter
  • external_id
  • code

Several of these appear more strongly in import/export or sync flows than in the inspected packaged category dialogs.

Source:

  • packages/framework/src/Models/ProductCategory.php

Configuration And Data Model

Key model characteristics:

  • translatable
  • hierarchical through parent/child recursion
  • searchable
  • soft-deletable
  • ERP-syncable
  • activity-log aware

Important field groups:

Field GroupPurpose
hierarchyparent_id, descendants, path URLs
browse contenttranslated name, description, HTML content, imagery
SEOmeta title, meta description, meta keywords, slug
storefront controlsattribute filters, brand/type/sample filter flags
ownershipproduct_manufacturer_id, product type associations

The model also exposes computed path_urls for storefront routing.

Sources:

  • packages/framework/src/Models/ProductCategory.php
  • packages/framework/src/Actions/ProductCategory/CreateProductCategory.php
  • packages/framework/src/Actions/ProductCategory/UpdateProductCategory.php

Relationships

ProductCategory directly relates to:

  • parent
  • childs
  • products
  • productManufacturer
  • productTypes
  • productAttributesFilters
  • productVendors

Practical dependencies:

  • products rely on categories for browse placement
  • category pages rely on child and parent relationships
  • category filters rely on the category-to-attribute pivot metadata

Source:

  • packages/framework/src/Models/ProductCategory.php

Rules And Downstream Effects

Deletion rules:

  • a category cannot be deleted if products are attached through the many-to-many relation
  • a category cannot be deleted if products still use it as the direct product_category_id
  • a category cannot be deleted if it still has child categories

Practical downstream effects:

  • changing category filters affects storefront filtering behavior
  • changing hierarchy affects path-based storefront navigation
  • category keywords include type-related search behavior

Sources:

  • packages/framework/src/Actions/ProductCategory/DeleteProductCategory.php
  • packages/framework/src/Actions/ProductCategory/GenerateSearchKeywords.php
  • packages/framework/src/Http/Resources/Storefront/ProductCategoryResource.php

Integrations And Automation

Excel

Category-related bulk surfaces include:

  • product_categories
  • product_product_category
  • product_type_product_category
  • category attribute-filter export support

Source:

  • packages/admin/src/Livewire/Admin/Tools/Excel/ExportDialog/ProductExport.php
  • packages/framework/src/Actions/Exports/Product/Sheets/ProductCategoryAttributeFiltersSheet.php
  • packages/framework/src/Actions/Import/Product/Sheets/ImportProductCategoryRows.php
  • packages/framework/src/Actions/Import/Product/Sheets/ImportProductProductCategoryRows.php
  • packages/framework/src/Actions/Import/Product/Sheets/ImportProductTypeProductCategoryRows.php

ERP bridge

Product categories have dedicated ERP request and sync paths.

Source:

  • packages/erp-bridge/src/Requests/ProductCategories/GetProductCategoriesRequest.php
  • packages/framework/src/Services/ErpBridge/ProductCategory/ProductCategoryErpSyncService.php

Where It Appears To End Users

ProductCategory is first-class in the storefront.

The inspected storefront uses it for:

  • category landing pages
  • pretty path routing through path_urls
  • child-category browsing
  • category-level attribute filters
  • brand-scoped category browse pages

The inspected homepage category tiles are more configuration-driven than category-record-driven. In the home page component, they come from storefront.menu_items rather than a raw category query.

Sources:

  • packages/storefront/routes/web.php
  • packages/storefront/src/Livewire/Storefront/Home/Page.php
  • packages/storefront/src/Livewire/Storefront/Category/Page.php
  • packages/storefront/src/Livewire/Storefront/Brand/CategoryPage.php
  • packages/framework/src/Http/Resources/Storefront/ProductCategoryResource.php

Current Documentation Takeaways

The three most important operator-level facts are:

  1. ProductCategory is more than a label. It controls browse hierarchy, content, and filter behavior.
  2. The packaged category editor exposes rich filter and content configuration, but some model fields are still bulk or sync oriented.
  3. Category deletion is intentionally guarded because categories can own both products and child categories.

Open Questions

  • product_manufacturer_id is a real field and import concern, but it was not clearly exposed in the inspected packaged category dialogs.
  • Some filter-related model fields appear to be project- or import-oriented rather than strongly surfaced in the packaged settings UI.