Adrián Posted September 16, 2020 Share Posted September 16, 2020 Buenas, a ver si me podéis echar una mano. Recientemente han actualizado el módulo de Búsqueda por facetas (versión 3.6.0) y han incorporado un nuevo Orden "Best seller" que he traducido como "Top ventas" (Ver foto 1). Sin embargo no lo han definido en el Back office (configuración de pedido-paginación) y me gustaría establecer ese orden como predeterminado. Mi versión de PrestaShop es 1.7.6.7. He encontrado algunos archivos donde están escritos los cambios pero no logro incorporarlo. Si alguien puede ayudarme o aportar alguna idea estaré agradecido. Saludos. Link to comment Share on other sites More sharing options...
Pixefora D Posted September 18, 2020 Share Posted September 18, 2020 vete a /src/PrestaShopBundle/Form/Admin/Configure/ShopParameters/ProductPreferences/PaginationType.php Donde $builder ->add('products_per_page', IntegerType::class) ->add('default_order_by', ChoiceType::class, [ 'choices' => [ 'Product name' => 0, 'Product price' => 1, 'Product add date' => 2, 'Product modified date' => 3, 'Position inside category' => 4, 'Brand' => 5, 'Product quantity' => 6, 'Product reference' => 7, ], 'required' => true, ]) ->add('default_order_way', ChoiceType::class, [ 'choices' => [ 'Ascending' => 0, 'Descending' => 1, ], 'required' => true, 'choice_translation_domain' => 'Admin.Global', ]); Cambia por: $builder ->add('products_per_page', IntegerType::class) ->add('default_order_by', ChoiceType::class, [ 'choices' => [ 'Product name' => 0, 'Product price' => 1, 'Product add date' => 2, 'Product modified date' => 3, 'Position inside category' => 4, 'Brand' => 5, 'Product quantity' => 6, 'Product reference' => 7, 'Best Sellers' => 8 ], 'required' => true, ]) ->add('default_order_way', ChoiceType::class, [ 'choices' => [ 'Ascending' => 0, 'Descending' => 1, ], 'required' => true, 'choice_translation_domain' => 'Admin.Global', ]); No lo he probado, no se si habrá que cambiar algo más para que lo coja, pero por ahí puedes comenzar. Link to comment Share on other sites More sharing options...
Adrián Posted September 18, 2020 Author Share Posted September 18, 2020 Gracias por la información, pero ya lo intenté. Se añadía la opción nueva al Backoffice pero no hacía efecto, no se quedaba predefinido. También supongo que tengo que aportar otra configuración para que lo asocie pero no logro encontrar nada. Gracias por la aportación. Link to comment Share on other sites More sharing options...
Adrián Posted September 23, 2020 Author Share Posted September 23, 2020 Alguien tiene alguna idea?? Link to comment Share on other sites More sharing options...
Pixefora D Posted September 23, 2020 Share Posted September 23, 2020 Haz un override de frontcategorycontroller. Busca donde llama a la consulta para recuperar los productos. Es probable que esto esté en la clase de categorías. Categoría.php Ahí modifica el orderby para que sea por defecto los más vendidos. Un saludo Link to comment Share on other sites More sharing options...
Adrián Posted September 23, 2020 Author Share Posted September 23, 2020 11 minutes ago, Pixefora D said: Haz un override de frontcategorycontroller. Busca donde llama a la consulta para recuperar los productos. Es probable que esto esté en la clase de categorías. Categoría.php Ahí modifica el orderby para que sea por defecto los más vendidos. Un saludo Gracias, he llegado hasta el archivo pero no logro averiguar como habría que ponerlo exactamente, a ver si puedes echar una mano. Creo que este sería el apartado: /** Tools::strtolower is a fix for all modules which are now using lowercase values for 'orderBy' parameter */ $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'position'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'ASC'; $orderByPrefix = false; if ($orderyBy == 'id_product' || $orderyBy == 'date_add' || $orderyBy == 'date_upd') { $orderByPrefix = 'p'; } elseif ($orderyBy == 'name') { $orderByPrefix = 'pl'; } elseif ($orderyBy == 'manufacturer' || $orderyBy == 'manufacturer_name') { $orderByPrefix = 'm'; $orderyBy = 'name'; } elseif ($orderyBy == 'position') { $orderByPrefix = 'cp'; } if ($orderyBy == 'price') { $orderyBy = 'orderprice'; } $nbDaysNewProduct = Configuration::get('PS_NB_DAYS_NEW_PRODUCT'); if (!Validate::isUnsignedInt($nbDaysNewProduct)) { $nbDaysNewProduct = 20; } $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity' . (Combination::isFeatureActive() ? ', IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity' : '') . ', pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image` id_image, il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB("' . date('Y-m-d') . ' 00:00:00", INTERVAL ' . (int) $nbDaysNewProduct . ' DAY)) > 0 AS new, product_shop.price AS orderprice FROM `' . _DB_PREFIX_ . 'category_product` cp LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product` ' . Shop::addSqlAssociation('product', 'p') . (Combination::isFeatureActive() ? ' LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_shop` product_attribute_shop ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop=' . (int) $context->shop->id . ')' : '') . ' ' . Product::sqlStock('p', 0) . ' LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) $idLang . Shop::addSqlRestrictionOnLang('cl') . ') LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) $idLang . Shop::addSqlRestrictionOnLang('pl') . ') LEFT JOIN `' . _DB_PREFIX_ . 'image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=' . (int) $context->shop->id . ') LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) $idLang . ') LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE product_shop.`id_shop` = ' . (int) $context->shop->id . ' AND cp.`id_category` = ' . (int) $this->id . ($active ? ' AND product_shop.`active` = 1' : '') . ($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '') . ($idSupplier ? ' AND p.id_supplier = ' . (int) $idSupplier : ''); if ($random === true) { $sql .= ' ORDER BY RAND() LIMIT ' . (int) $randomNumberProducts; } else { $sql .= ' ORDER BY ' . (!empty($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . bqSQL($orderyBy) . '` ' . pSQL($orderWay) . ' LIMIT ' . (((int) $p - 1) * (int) $n) . ',' . (int) $n; } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql, true, false); if (!$result) { return array(); } if ($orderyBy == 'orderprice') { Tools::orderbyPrice($result, $orderWay); } // Modify SQL result return Product::getProductsProperties($idLang, $result); } Link to comment Share on other sites More sharing options...
Pixefora D Posted September 24, 2020 Share Posted September 24, 2020 Esto: $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'position'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'ASC'; Cambialo por esto: $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'sales'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'DESC'; Link to comment Share on other sites More sharing options...
Adrián Posted September 24, 2020 Author Share Posted September 24, 2020 35 minutes ago, Pixefora D said: Esto: $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'position'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'ASC'; Cambialo por esto: $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'sales'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'DESC'; Mucha gracias por las aportaciones pero aun sigue sin hacer el cambio, he modificado en PaginationType.php public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('products_per_page', IntegerType::class) ->add('default_order_by', ChoiceType::class, [ 'choices' => [ 'Product name' => 0, 'Product price' => 1, 'Product add date' => 2, 'Product modified date' => 3, 'Position inside category' => 4, 'Brand' => 5, 'Product quantity' => 6, 'Product reference' => 7, 'Best seller' => 8 Y en Category.php: $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'sales'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'DESC'; Luego establezco como predefinido Pero sigue sin salir ni hacer efecto No sé si has logrado hacerlo efectivo, he cambiado también a las demás opciones pero ninguna lo asocia. Link to comment Share on other sites More sharing options...
Pixefora D Posted September 24, 2020 Share Posted September 24, 2020 Me temo que no te puedo ayudar sin remangarme. No veo nada raro a simple vista, pero no he repasado los controladores para poder ver que sucede. En cualquier caso, ¿es posible que te lo esté ordenando por los más vendidos a pesar de que no te aparezca como seleccionado en el select? Un saludo Link to comment Share on other sites More sharing options...
Adrián Posted September 24, 2020 Author Share Posted September 24, 2020 6 minutes ago, Pixefora D said: Me temo que no te puedo ayudar sin remangarme. No veo nada raro a simple vista, pero no he repasado los controladores para poder ver que sucede. En cualquier caso, ¿es posible que te lo esté ordenando por los más vendidos a pesar de que no te aparezca como seleccionado en el select? Un saludo Nada, si fuera así no me importaría pero tampoco lo ordena, es complicado porque tendrá más cambios que hacer, he borrado caché y todo pero como al principio. Gracias de todas formas, seguiré investigando 😉 Un saludo. Link to comment Share on other sites More sharing options...
Adrián Posted October 18, 2020 Author Share Posted October 18, 2020 Este post sigue abierto por si a alguien se le ocurre alguna idea más. Gracias! Link to comment Share on other sites More sharing options...
ramherfer Posted November 18, 2020 Share Posted November 18, 2020 Quote Buenas, a ver si me podéis echar una mano. Recientemente han actualizado el módulo de Búsqueda por facetas (versión 3.6.0) y han incorporado un nuevo Orden "Best seller" que he traducido como "Top ventas" (Ver foto 1) Pues te agradecería, prácticamente hasta la eternidad, me indicaras como narices lo has traducido, por que no hay manera con la misma versión del módulo, encontrar donde traducirlo y es muy molesto (por lo menos para mi), ver todo en español y ver el "Best sellers" en la lista de organización de productos. Por favor. Un saludo, Ramiro Link to comment Share on other sites More sharing options...
Adrián Posted December 7, 2020 Author Share Posted December 7, 2020 On 11/18/2020 at 11:08 AM, ramherfer said: Pues te agradecería, prácticamente hasta la eternidad, me indicaras como narices lo has traducido, por que no hay manera con la misma versión del módulo, encontrar donde traducirlo y es muy molesto (por lo menos para mi), ver todo en español y ver el "Best sellers" en la lista de organización de productos. Por favor. Un saludo, Ramiro Hola Ramiro, disculpa el retraso, no sé si ya lo averiguaste, pero te lo dejo por si acaso: Ve a la ruta "public_html/modules/ps_facetedsearch/src/Product/SearchProvider.php" Y en ese archivo modificas la traducción en estas líneas: return [ $sortSalesDesc->setLabel( $translator->trans('Top Ventas', [], 'Modules.Facetedsearch.Shop') ), $sortPosAsc->setLabel( $translator->trans('Relevance', [], 'Modules.Facetedsearch.Shop') ), Saludos! Link to comment Share on other sites More sharing options...
DeProximidad Posted January 28, 2021 Share Posted January 28, 2021 On 12/7/2020 at 12:39 PM, Adrián said: Hola Ramiro, disculpa el retraso, no sé si ya lo averiguaste, pero te lo dejo por si acaso: Ve a la ruta "public_html/modules/ps_facetedsearch/src/Product/SearchProvider.php" Y en ese archivo modificas la traducción en estas líneas: return [ $sortSalesDesc->setLabel( $translator->trans('Top Ventas', [], 'Modules.Facetedsearch.Shop') ), $sortPosAsc->setLabel( $translator->trans('Relevance', [], 'Modules.Facetedsearch.Shop') ), Saludos! Muchas gracias por el aporte. Las dichosas vueltas... yo también estaba pegándome con el asunto de la traducción de Best Sellers. Resuelto, gracias. 1 Link to comment Share on other sites More sharing options...
tapichus Posted October 25, 2022 Share Posted October 25, 2022 Hola! Retomo este post.. sigo todos los pasos pero sigo sin visualizar los productos en más vendidos. Quiza alguien pueda aportar? Gracias! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now