mage2kishan / module-advanced-product-grid
Advanced Product Grid for Magento 2 admin - inline edit every column (text, select, multiselect, date, price, image, tier price), auto-discover EAV attributes, 20+ extra columns (thumbnail, categories, availability, low stock, qty sold, tier prices, storefront URL), tabbed Manage Columns panel with
Package info
github.com/mage2sk/module-advanced-product-grid
Type:magento2-module
pkg:composer/mage2kishan/module-advanced-product-grid
Requires
- php: ~8.1.0||~8.2.0||~8.3.0||~8.4.0
- mage2kishan/module-core: ^1.0
- magento/framework: ^103.0
- magento/module-backend: ^102.0
- magento/module-catalog: ^104.0
- magento/module-catalog-inventory: ^100.4
- magento/module-eav: ^102.1
- magento/module-store: ^101.1
- magento/module-ui: ^101.2
Requires (Dev)
None
Suggests
- magento/module-configurable-product: Enables the Parent SKU column when configurable products are in use.
- magento/module-inventory-api: Adds per-source Salable Qty + per-source Quantity columns when MSI is installed.
Provides
None
Conflicts
None
Replaces
None
README
Advanced Product Grid extends the standard product grid in the Magento 2 admin (Catalog > Products). It adds inline editing to the grid columns, discovers product attributes flagged "Use in Grid" and turns them into columns with filters and editors, adds computed columns such as image, availability, low stock, qty sold, tier prices and storefront link, provides a tabbed "Manage Columns" panel for showing, renaming and ordering columns, a "Mass Edit Attributes" mass action, and CSV/XML export limited to the visible columns.
It is intended for catalog managers and store administrators who update product data from the product grid instead of opening each product edit form. The module works in the admin area only and does not change the storefront.
Product page: Magento 2 Advanced Product Grid
Features
- Inline editing on the product grid using Magento's built-in grid editor. "Name", "SKU", "Price" and "Quantity" are editable out of the box; attributes discovered from EAV get a text, select, multiselect, date or image editor depending on their input type.
- Automatic discovery of every product attribute with "Use in Grid" enabled (text, textarea, select, multiselect, date, datetime, weight, price, boolean and media image inputs). Attributes enabled in the column manager or made visible in a saved bookmark are added as columns as well.
- Extra columns: "Image" (with hover View / Edit overlay), "Availability", "Backorders", "Low Stock", "Qty Sold", "Tier Prices" and "Frontend Link". Category data is loaded per row and rendered as chips.
- Popup editors for values that do not fit in a cell: textarea attributes, multiselect attributes (searchable checkbox list with "Select all" / "Clear all"), categories, tier prices (website, customer group, qty, fixed or percent) and product images (drag-and-drop upload, preview, remove).
- "Manage Columns" panel with the tabs Standard, Pricing, Inventory, SEO, Attributes and Extras. Per column: show/hide, custom label, "Edit" and "Filter" toggles and a numeric sort order. Overrides are stored in the database and applied to the admin user's grid bookmark. A "Reset all overrides" button clears them.
- Rename a column by double-clicking its header in the grid.
- "Mass Edit Attributes" mass action: choose any number of attributes grouped as Pricing, Inventory, Visibility, Content, SEO and Other, enter values, and apply them to the selected products.
- Filter handling for discovered attributes: multiselect filters use
finset, select and boolean filters useeq, text and textarea filters uselike. Filter classes are shipped for categories (including a "No Categories" option), availability, qty sold range and thumbnail added / not added; they are registered for the columnspanth_categories,panth_availability,panth_qty_soldandpanth_thumbnail. - "Qty Sold" column backed by its own indexer (
panth_product_grid_qty_sold) that aggregatessales_order_itemquantities for a configurable date window and set of order statuses. - Unsaved-changes guard: paging, page size, search, filters, toolbar actions, bookmarks, mass actions and export ask for confirmation while the grid has unsaved inline edits.
- CSV and XML export limited to the columns visible in the current bookmark, in their on-screen order, with select and multiselect values exported as option labels. Columns can be excluded from export per column (
in_exportflag). - Fixes bundled with the grid: correct labels for select values that contain commas (for example
INDEX,FOLLOW), store-scope aware sorting for "Country of Manufacture", and an explicitmaximumStocksToShowvalue for the MSI "Salable Quantity" column. - Horizontal scrolling for wide grids.
Compatibility
| Platform | Versions |
|---|---|
| Magento Open Source | 2.4.4 to 2.4.8 |
| Adobe Commerce | 2.4.4 to 2.4.8 |
| PHP | 8.1, 8.2, 8.3, 8.4 |
Composer constraints on Magento packages: magento/framework ^103.0, magento/module-backend ^102.0, magento/module-catalog ^104.0, magento/module-catalog-inventory ^100.4, magento/module-eav ^102.1, magento/module-store ^101.1, magento/module-ui ^101.2.
Requirements
- Magento Open Source or Adobe Commerce 2.4.4 to 2.4.8
- PHP 8.1, 8.2, 8.3 or 8.4 (
php: ~8.1.0||~8.2.0||~8.3.0||~8.4.0) mage2kishan/module-core^1.0 (modulePanth_Core; provides the "Panth Extensions" configuration tab and admin menu)- Suggested:
magento/module-inventory-api(MSI) andmagento/module-configurable-product; both are optional and the module loads afterMagento_ConfigurableProductwhen it is present
Installation
composer require mage2kishan/module-advanced-product-grid bin/magento module:enable Panth_Core Panth_AdvancedProductGrid bin/magento setup:upgrade bin/magento setup:di:compile bin/magento setup:static-content:deploy -f bin/magento cache:flush
setup:di:compile is only required in production mode. setup:static-content:deploy -f is needed because the module ships JavaScript, templates and LESS under view/adminhtml/web.
The "Qty Sold" column is empty until the indexer has run once:
bin/magento indexer:reindex panth_product_grid_qty_sold
Check that the module is enabled:
bin/magento module:status Panth_AdvancedProductGrid
Configuration
Admin path: Stores > Configuration > Panth Extensions > Product Grid Extended. All settings are global (default scope only).
General
| Setting | Default | What it does |
|---|---|---|
| Enable Extended Grid | Yes | Declared as the master switch for the extended grid. |
Inline Editing
| Setting | Default | What it does |
|---|---|---|
| Editing Mode | Multi Cell (Save / Cancel banner) | Options are "Single Cell (save on blur)" and "Multi Cell (Save / Cancel banner)". Shown only when "Enable Extended Grid" is Yes. |
| Warn About Unsaved Changes | Yes | Declared as the switch for the confirmation dialog shown when the admin changes page, filter, sort or runs a mass action with unsaved edits. Shown only when "Editing Mode" is Multi Cell. |
Note: in this version the module's PHP and JavaScript do not read the three settings above. The grid editor always runs in Magento's standard mode (edits are collected and sent when the editor's Save button is clicked) and the unsaved-changes confirmation is always active.
Column Behavior
| Setting | Default | What it does |
|---|---|---|
| Related / Up-sell / Cross-sell Display Count | 3 | Number of linked products to render in a cell before truncating. The value is passed to each grid row as panth_linked_products_max. |
| Low-stock Threshold | 5 | A product is flagged in the "Low Stock" column when stock is managed and its qty is at or below this number. |
Qty Sold Indexer
| Setting | Default | What it does |
|---|---|---|
| Enable Qty Sold Column | Yes | Declared as the switch for the qty-sold aggregation. |
| Date From | -90 days | Start of the aggregation window. Accepts a YYYY-MM-DD date or a relative strtotime expression. |
| Date To | now | End of the aggregation window, same formats as "Date From". |
| Order Statuses to Count | complete, processing | Only order items on orders in these statuses are counted. Changing the value invalidates the indexer. |
| Subtract Refunded Quantities | No | When Yes, qty_refunded is subtracted from qty_ordered per item. Changing the value invalidates the indexer. |
Save Behavior
| Setting | Default | What it does |
|---|---|---|
| Auto-flip Stock Status on Qty Change | Yes | When qty is edited in the grid, is_in_stock is set to 1 for qty > 0 and 0 for qty = 0, manage_stock is set to 1 and use_config_manage_stock to 0. |
| Show Qty as Integer | No | Rounds qty values to an integer for display in the grid. Stored values stay decimal. |
Export
| Setting | Default | What it does |
|---|---|---|
| Export Visible Columns Only | Yes | CSV and XML exports from the product grid contain only the columns visible in the current bookmark, in on-screen order, with option labels resolved. When No, Magento's standard export is used. |
Configuration paths: panth_product_grid/general/enabled, panth_product_grid/editing/mode, panth_product_grid/editing/confirm_navigation, panth_product_grid/columns/linked_products_qty, panth_product_grid/columns/low_stock_threshold, panth_product_grid/qty_sold/enabled, panth_product_grid/qty_sold/date_from, panth_product_grid/qty_sold/date_to, panth_product_grid/qty_sold/statuses, panth_product_grid/qty_sold/include_refunded, panth_product_grid/modification/qty_to_stock, panth_product_grid/modification/show_qty_integer, panth_product_grid/export/visible_columns_only.
With the default values the extended grid is active, qty edits update the stock status, the qty-sold window is the last 90 days of complete and processing orders, and exports contain only visible columns.
Usage
Opening the grid
Go to Catalog > Products, or use the admin menu entry Panth Extensions > Product Grid Extended > Open Extended Grid, which opens the same page. The Configuration menu entry under the same group opens the configuration section.
Inline editing
Click a cell in an editable column to open Magento's grid editor for that row. Edits are collected in the editor and saved together with its Save button; the request is posted to panth_product_grid/index/inlineEdit. Each attribute is applied through a save strategy and the product is then saved with the product repository:
qty: sets the stock quantity and, when "Auto-flip Stock Status on Qty Change" is Yes, the stock status.panth_availability: setsis_in_stockandmanage_stock("In Stock", "Out of Stock", "Manage Stock Disabled").panth_backorders: setsbackorders("No Backorders", "Allow Qty Below 0", "Allow Qty Below 0 and Notify Customer").category_ids: assigns the product to the given categories, or removes it from all categories when the value is empty.tier_price: replaces the product's tier prices with the submitted rows.weight: sets the weight and the "product has weight" flag.visibility: sets visibility; values outside the four Magento options fall back to "Catalog, Search".url_key: sets the URL key.image,small_image,thumbnail,swatch_image: assigns an existing or uploaded gallery file to that image role. Paths containing..segments, backslashes, control characters or a URL scheme are rejected.- Any other attribute: the value is written to the product; the sentinels
__use_default__and__empty__clear the value.
Only keys that the grid can show as editable columns are accepted: the virtual keys listed above and product attributes that are visible in the admin and have a text, textarea, price, weight, date, datetime, select, boolean or multiselect input. System keys such as entity_id, type_id, attribute_set_id, created_at, store_id, website_ids, url_path, custom_layout_update_file, media_gallery and quantity_and_stock_status, unknown keys and hidden attributes are rejected. Values are checked against the attribute type: prices, weights and quantities must be numbers of zero or more, dates must parse, select, boolean and multiselect values must be existing option values, text values must be scalars (at most 255 characters for varchar attributes), and required attributes cannot be emptied. A rejected change stops the save for that product and the error names the attribute. The entity_id value that Magento's grid editor sends with each row is ignored when it matches the row.
Before a save, the module checks that each edited attribute belongs to the product's attribute set and adds it to the set's default group if it is missing, so the value is persisted.
Edits are saved in the store scope given by the store_id request parameter; when the parameter is absent the default (global) scope is used. The popup editors load and save values in the store view selected in the grid's "Store View" filter, or in the default scope when no store view is selected.
Popup editors
Cells in the following columns open a popup instead of the inline editor: tier_price / "Tier Prices", category_ids / categories, description, short_description, image roles, and every product attribute whose input type is textarea or multiselect. The popup loads the current value and options from panth_product_grid/cellEdit/form, and saves through the same inline-edit endpoint. Image cells show a hover overlay: "View" triggers Magento's standard image preview, "Edit" opens the upload popup (JPG, JPEG, GIF, PNG and WebP; files are stored under the catalog product media directory; each upload must be a valid image).
Manage Columns
The "Columns" button on the grid toolbar opens the "Manage Columns" popup with the tabs Standard, Pricing, Inventory, SEO, Attributes and Extras. For each column you can toggle visibility, enter a custom label, toggle "Edit" (inline editable) and "Filter" (filter shown in the toolbar), and set a sort order. "Apply Changes" saves the overrides to panth_product_grid_column_config, updates the visibility and positions in the current admin user's product grid bookmark, and reloads the page. "Reset all overrides" deletes every stored override and the admin user's product grid bookmarks.
Columns that are hidden in the panel are still loaded into the data provider when they have an override row or are visible in any bookmark. The in_export flag stored per column is honoured by the export but the panel in this version does not expose a toggle for it.
Double-clicking a column header in the grid opens a "Rename Column" prompt that stores a custom label for that column.
Mass Edit Attributes
Select products, then choose "Mass Edit Attributes" from the Actions dropdown. A slide-in panel lists attributes grouped as Pricing, Inventory, Visibility, Content, SEO and Other (only user-defined or static attributes with text, textarea, price, weight, date, select or multiselect input, plus "Availability", "Backorders" and "Categories"). Tick the attributes to change, enter values, and click "Apply Changes". The values are applied to every selected product through the same save strategies as inline editing; multiselect and category values are entered as comma-separated lists. The same attribute and value checks as inline editing apply. Mass edits are saved in the store view selected in the grid's "Store View" filter; the default scope is used only when the filter is "All Store Views".
Qty Sold
The "Qty Sold" column reads from the table panth_product_grid_qty_sold, which is filled by the indexer "Product Qty Sold" (panth_product_grid_qty_sold). A full reindex truncates the table and re-aggregates sales_order_item.qty_ordered (minus qty_refunded when configured) for orders in the configured statuses and date window. In "Update on Save" mode the affected products are re-aggregated after an order is saved; in "Update by Schedule" mode changes to sales_order_item are picked up by the mview subscription, which is bound to the sales connection so it also works with a split sales database. New products get a zero row when they are first saved.
Export
With "Export Visible Columns Only" set to Yes, the CSV and XML export actions on the product grid write only the visible columns in their current order. Select and multiselect values are exported as their option labels. Columns whose in_export flag is 0 are skipped. Exports from other admin grids are not changed and use Magento's standard export.
Developer Notes
- Module name:
Panth_AdvancedProductGrid - Composer package:
mage2kishan/module-advanced-product-grid - PHP namespace:
Panth\AdvancedProductGrid - Admin route:
panth_product_grid(controllers underController/Adminhtml:Index/InlineEdit,CellEdit/Form,CellEdit/Upload,ColumnManager/ListColumns,ColumnManager/InlineEdit,ColumnManager/MassAction,ColumnManager/RenameFromGrid,ColumnManager/Reset,MassEdit/Form,MassEdit/Save,Thumbnail/GetModal,TierPrice/GetModal) - UI component: overlay of
product_listing(view/adminhtml/ui_component/product_listing.xml) withUi\Component\Listing\Columnsas the columns class;Ui\Component\Listing\ColumnFactorybuilds columns for discovered attributes;Ui\Component\Listing\AttributeRepositoryselects the attributes. - Plugins:
Plugin\Catalog\Ui\DataProvider\ProductDataProviderPlugin(adds attributes to the collection and computed row data),Plugin\Catalog\Ui\DataProvider\ProductDataProviderFilterPlugin(rewrites filter conditions per input type),Plugin\Ui\Model\Export\CsvExportandXmlExport(visible-column export),Plugin\Catalog\Model\Product\Attribute\Source\CountryofmanufactureSortingPlugin,Plugin\Mview\SalesConnectionPlugin. - Inline-edit extension point:
Model\InlineEdit\StrategyResolvermaps attribute codes toModel\InlineEdit\Strategy\StrategyInterfaceimplementations; add a strategy through thestrategiesargument inetc/di.xml.Model\InlineEdit\Processorruns the strategies and saves the product. After aurl_keyorvisibilitychange the processor dispatches the eventpanth_product_grid_url_rewrite_refreshwith the product; no observer for it is shipped. - Column overrides:
Model\ColumnConfigRepository(tablepanth_product_grid_column_config);Model\BookmarkVisibilityUpdaterwrites visibility and positions intoui_bookmark. - Indexer:
Model\Indexer\QtySold(etc/indexer.xml,etc/mview.xml); observersObserver\OrderSaveAfter(sales_order_save_after) andObserver\ProductSaveAfter(catalog_product_save_after);Model\Config\Backend\QtySoldInvalidateinvalidates the indexer when statuses or the refund setting change. - Mass edit:
Model\MassEdit\AttributeCatalogbuilds the attribute list for the mass edit panel. - JavaScript: RequireJS mixins in
view/adminhtml/requirejs-config.json paging, sizes, search, filters, toolbar, bookmarks, massactions, tree-massactions, export and the select column;js/model/unsaved-flag.jsholds the dirty state; the column manager, popup editors and rename prompt are bootstrapped fromview/adminhtml/templates/rename-header-init.phtml(added tohead.additionalof the product grid page only byview/adminhtml/layout/catalog_product_index.xml). - ACL resources (
etc/acl.xml, underPanth_Core::panth_extensions):Panth_AdvancedProductGrid::product_grid("Product Grid Extended"),Panth_AdvancedProductGrid::inline_edit("Inline Edit Products"),Panth_AdvancedProductGrid::tier_price("Edit Tier Prices"),Panth_AdvancedProductGrid::manage_gallery("Edit Product Gallery"),Panth_AdvancedProductGrid::column_manager("Manage Grid Columns", checked by the column manager controllers),Panth_AdvancedProductGrid::config("Configuration"). Every controller of the module also requiresMagento_Catalog::products. Inline edit and mass edit requests that change tier prices requirePanth_AdvancedProductGrid::tier_price, and requests that change an image role requirePanth_AdvancedProductGrid::manage_gallery. POST requests are validated with the admin form key. - Database tables (
etc/db_schema.xml):panth_product_grid_qty_sold(product_id, qty_sold, indexed_at) andpanth_product_grid_column_config(config_id, attribute_code, is_visible, is_editable, is_filterable, in_export, is_required, custom_label, sort_order, default_width, marker_color, editor_type_override, updated_at). Model\InlineEdit\ChangeValidatorholds the allow-list and type checks used byModel\InlineEdit\Processorfor inline edit, popup edit and mass edit.- Unit tests are included:
Test/Unit/Observer/OrderSaveAfterTest.phpandTest/Unit/Model/InlineEdit/ChangeValidatorTest.php.
Uninstallation
bin/magento module:disable Panth_AdvancedProductGrid composer remove mage2kishan/module-advanced-product-grid bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush
Disabling the module leaves the tables panth_product_grid_qty_sold and panth_product_grid_column_config, the panth_product_grid/* rows in core_config_data, the indexer state for panth_product_grid_qty_sold, product grid bookmark changes in ui_bookmark and attribute-set assignments created during inline editing in place. Remove them manually if they are no longer needed.
Support
- Product page: Magento 2 Advanced Product Grid
- Contact form: kishansavaliya.com/contact
- Email: kishansavaliyakb@gmail.com
- Issues: GitHub issues
License
Proprietary, as declared in composer.json. The package is published on Packagist and can be installed with Composer; see the product page for the terms of use.
Changelog
See CHANGELOG.md.
Links
- Website: kishansavaliya.com
- All extensions: Magento extensions catalogue
- GitHub: mage2sk/module-advanced-product-grid
- Packagist: mage2kishan/module-advanced-product-grid





