From 3710d78683f3624f562190a1c4a53d0a2905bef1 Mon Sep 17 00:00:00 2001 From: Multiservicios Austral Date: Tue, 13 Feb 2024 16:43:12 -0300 Subject: [PATCH] Hide out of stock products --- ps_facetedsearch.php | 25 +++++++++++++++++++++---- src/Product/Search.php | 10 ++++++++++ views/templates/admin/manage.tpl | 17 +++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/ps_facetedsearch.php b/ps_facetedsearch.php index f3e1d12e5..8a252824b 100644 --- a/ps_facetedsearch.php +++ b/ps_facetedsearch.php @@ -151,13 +151,10 @@ public function getContext() protected function getDefaultFilters() { - return [ + $filters = [ 'layered_selection_subcategories' => [ 'label' => 'Sub-categories filter', ], - 'layered_selection_stock' => [ - 'label' => 'Product stock filter', - ], 'layered_selection_condition' => [ 'label' => 'Product condition filter', ], @@ -176,6 +173,17 @@ protected function getDefaultFilters() 'label' => 'Product extras filter', ], ]; + // if we are not showing out of stock products, we do not show the Availability filter + if (Configuration::get('PS_LAYERED_FILTER_HIDE_OUT_OF_STOCK') === '0'){ + $filters = array_merge( + $filters,[ + 'layered_selection_stock' => [ + 'label' => 'Product stock filter', + ] + ] + ); + } + return $filters; } public function install() @@ -207,6 +215,7 @@ public function install() Configuration::updateValue('PS_ATTRIBUTE_ANCHOR_SEPARATOR', '-'); Configuration::updateValue('PS_LAYERED_FILTER_PRICE_ROUNDING', 1); Configuration::updateValue('PS_LAYERED_FILTER_SHOW_OUT_OF_STOCK_LAST', 0); + Configuration::updateValue('PS_LAYERED_FILTER_HIDE_OUT_OF_STOCK', 0); Configuration::updateValue('PS_LAYERED_FILTER_BY_DEFAULT_CATEGORY', 0); Configuration::updateValue('PS_USE_JQUERY_UI_SLIDER', 1); Configuration::updateValue('PS_LAYERED_DEFAULT_CATEGORY_TEMPLATE', 0); @@ -246,6 +255,7 @@ public function uninstall() Configuration::deleteByName('PS_LAYERED_FILTER_CATEGORY_DEPTH'); Configuration::deleteByName('PS_LAYERED_FILTER_PRICE_ROUNDING'); Configuration::deleteByName('PS_LAYERED_FILTER_SHOW_OUT_OF_STOCK_LAST'); + Configuration::deleteByName('PS_LAYERED_FILTER_HIDE_OUT_OF_STOCK'); Configuration::deleteByName('PS_LAYERED_FILTER_BY_DEFAULT_CATEGORY'); $this->getDatabase()->execute('DROP TABLE IF EXISTS ' . _DB_PREFIX_ . 'layered_category'); @@ -710,12 +720,18 @@ public function getContent() Configuration::updateValue('PS_LAYERED_FILTER_CATEGORY_DEPTH', (int) Tools::getValue('ps_layered_filter_category_depth')); Configuration::updateValue('PS_LAYERED_FILTER_PRICE_ROUNDING', (int) Tools::getValue('ps_layered_filter_price_rounding')); Configuration::updateValue('PS_LAYERED_FILTER_SHOW_OUT_OF_STOCK_LAST', (int) Tools::getValue('ps_layered_filter_show_out_of_stock_last')); + Configuration::updateValue('PS_LAYERED_FILTER_HIDE_OUT_OF_STOCK', (int) Tools::getValue('ps_layered_filter_hide_out_of_stock')); Configuration::updateValue('PS_LAYERED_FILTER_BY_DEFAULT_CATEGORY', (int) Tools::getValue('ps_layered_filter_by_default_category')); Configuration::updateValue('PS_USE_JQUERY_UI_SLIDER', (int) Tools::getValue('ps_use_jquery_ui_slider')); Configuration::updateValue('PS_LAYERED_DEFAULT_CATEGORY_TEMPLATE', (int) Tools::getValue('ps_layered_default_category_template')); $this->psLayeredFullTree = (int) Tools::getValue('ps_layered_full_tree'); + // if we are not showing out of stock products, we do not show the Availability filter + if ((int) Tools::getValue('ps_layered_filter_hide_out_of_stock') === 1) { + $this->getDatabase()->execute('DELETE FROM`' . _DB_PREFIX_ . 'layered_category` WHERE `type` = "availability"'); + } + $message = '
' . $this->trans('Settings saved successfully', [], 'Modules.Facetedsearch.Admin') . '
'; $this->invalidateLayeredFilterBlockCache(); } elseif (Tools::getValue('deleteFilterTemplate')) { @@ -802,6 +818,7 @@ public function renderAdminMain() 'limit_warning' => $this->displayLimitPostWarning(21 + count($attributeGroups) * 3 + count($features) * 3), 'price_use_rounding' => (bool) Configuration::get('PS_LAYERED_FILTER_PRICE_ROUNDING'), 'show_out_of_stock_last' => (bool) Configuration::get('PS_LAYERED_FILTER_SHOW_OUT_OF_STOCK_LAST'), + 'hide_out_of_stock' => (bool) Configuration::get('PS_LAYERED_FILTER_HIDE_OUT_OF_STOCK'), 'filter_by_default_category' => (bool) Configuration::get('PS_LAYERED_FILTER_BY_DEFAULT_CATEGORY'), 'use_jquery_ui_slider' => (bool) Configuration::get('PS_USE_JQUERY_UI_SLIDER'), 'default_category_template' => Configuration::get('PS_LAYERED_DEFAULT_CATEGORY_TEMPLATE'), diff --git a/src/Product/Search.php b/src/Product/Search.php index 8e85c9e2b..38f188057 100644 --- a/src/Product/Search.php +++ b/src/Product/Search.php @@ -322,6 +322,16 @@ private function addSearchFilters($selectedFilters) break; } } + // Show only products in stock + if (Configuration::get('PS_LAYERED_FILTER_HIDE_OUT_OF_STOCK')=== '1'){ + $operationsFilter[] = [ + ['quantity', [0], '>'], + ]; + $this->getSearchAdapter()->addOperationsFilter( + self::STOCK_MANAGEMENT_FILTER, + $operationsFilter + ); + } } /** diff --git a/views/templates/admin/manage.tpl b/views/templates/admin/manage.tpl index 8aaac3670..495f8ea20 100644 --- a/views/templates/admin/manage.tpl +++ b/views/templates/admin/manage.tpl @@ -262,6 +262,23 @@ +
+ +
+ + + + + + + +
+
+