Burnago Posted April 15, 2020 Share Posted April 15, 2020 Hello, I have got an issue beacause I can't build webcode to my presta 1.7.6.1. I use presta modules ps specials and featured products. ps specials shows products on my home page listed from the most expensive. How can I correct php file to display products randomly? Would be nice to add cookie length to keep displayed products for a time even after browser renew. Have anyone some advices? Here is my webcode: use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever; if (!defined('_PS_VERSION_')) { exit; } class Ps_Specials_2 extends Module implements WidgetInterface { private $templateFile; public function __construct() { $this->name = 'ps_specials_2'; $this->author = 'PrestaShop'; $this->version = '1.0.1'; $this->need_instance = 0; $this->ps_versions_compliancy = array( 'min' => '1.7.0.0', 'max' => _PS_VERSION_ ); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->trans('Specials block 2', array(), 'Modules.Specials2.Admin'); $this->description = $this->trans('Displays your products that are currently on sale in a dedicated block.', array(), 'Modules.Specials2.Admin'); $this->templateFile = 'module:ps_specials_2/views/templates/hook/ps_specials_2.tpl'; } public function install() { $this->_clearCache('*'); Configuration::updateValue('BLOCKSPECIALS_SPECIALS_2_NBR', 8); return parent::install() && $this->registerHook('actionProductAdd') && $this->registerHook('actionProductUpdate') && $this->registerHook('actionProductDelete') && $this->registerHook('actionObjectSpecificPriceCoreDeleteAfter') && $this->registerHook('actionObjectSpecificPriceCoreAddAfter') && $this->registerHook('actionObjectSpecificPriceCoreUpdateAfter') && $this->registerHook('displayHome'); } public function uninstall() { $this->_clearCache('*'); return parent::uninstall(); } public function hookActionProductAdd($params) { $this->_clearCache('*'); } public function hookActionProductUpdate($params) { $this->_clearCache('*'); } public function hookActionProductDelete($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreDeleteAfter($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreAddAfter($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreUpdateAfter($params) { $this->_clearCache('*'); } public function _clearCache($template, $cache_id = null, $compile_id = null) { parent::_clearCache($this->templateFile); } public function getContent() { $output = ''; if (Tools::isSubmit('submitSpecials2')) { Configuration::updateValue('BLOCKSPECIALS_SPECIALS_2_NBR', (int)Tools::getValue('BLOCKSPECIALS_SPECIALS_2_NBR')); $this->_clearCache('*'); $output .= $this->displayConfirmation($this->trans('The settings have been updated.', array(), 'Admin.Notifications.Success')); } return $output.$this->renderForm(); } public function renderForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->trans('Settings', array(), 'Admin.Global'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'text', 'label' => $this->trans('Products to display', array(), 'Modules.Specials2.Admin'), 'name' => 'BLOCKSPECIALS_SPECIALS_2_NBR', 'class' => 'fixed-width-xs', 'desc' => $this->trans('Define the number of products to be displayed in this block on home page.', array(), 'Modules.Specials2.Admin'), ), ), 'submit' => array( 'title' => $this->trans('Save', array(), 'Admin.Actions'), ), ), ); $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $helper->default_form_language = $lang->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $helper->identifier = $this->identifier; $helper->submit_action = 'submitSpecials2'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } public function getConfigFieldsValues() { return array( 'BLOCKSPECIALS_SPECIALS_2_NBR' => Tools::getValue('BLOCKSPECIALS_SPECIALS_2_NBR', Configuration::get('BLOCKSPECIALS_SPECIALS_2_NBR')), ); } public function renderWidget($hookName = null, array $configuration = []) { if (!$this->isCached($this->templateFile, $this->getCacheId('ps_specials_2'))) { $variables = $this->getWidgetVariables($hookName, $configuration); if (empty($variables)) { return false; } $this->smarty->assign($variables); } return $this->fetch($this->templateFile, $this->getCacheId('ps_specials_2')); } public function getWidgetVariables($hookName = null, array $configuration = []) { $products = $this->getSpecialProducts(); if (!empty($products)) { return array( 'products' => $products, 'allSpecialProductsLink' => Context::getContext()->link->getPageLink('prices-drop'), ); } return false; } private function getSpecialProducts() { $products = Product::getPricesDrop( (int)Context::getContext()->language->id, 0, (int)Configuration::get('BLOCKSPECIALS_SPECIALS_2_NBR') ); $assembler = new ProductAssembler($this->context); $presenterFactory = new ProductPresenterFactory($this->context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $this->context->link ), $this->context->link, new PriceFormatter(), new ProductColorsRetriever(), $this->context->getTranslator() ); $products_for_template = array(); if (is_array($products)) { foreach ($products as $rawProduct) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $this->context->language ); } } return $products_for_template; } } Link to comment Share on other sites More sharing options...
roxanacaz123 Posted November 18, 2020 Share Posted November 18, 2020 Interested too, for another module (homeonsaletab). I came to the conclusion that the secret is here: (int)Context::getContext()->language->id, 0, - this 0, if modified to 1 or 2 for example renders other products on the main page. I have no clue what this 0 represents though... I have to modify here: public function getProducts() { $nProducts = Configuration::get('HOME_OS_NBR'); $products_for_template = Product::getPricesDrop((int)$this->context->language->id, 2, (int)$nProducts); return $products_for_template; } Link to comment Share on other sites More sharing options...
roxanacaz123 Posted November 20, 2020 Share Posted November 20, 2020 Solved! Added to classes/product.php - PS 1.7.6 // Implicit declaration of constant called department with value 'date_upd' define('date_upd', 'date_upd'); An modified this code: public static function getPricesDrop( $id_lang, $page_number = 0, $nb_products = 10, $count = false, $order_by = null, $order_way = null, $beginning = false, $ending = false, Context $context = null ) to public static function getPricesDrop( $id_lang, $page_number = 0, $nb_products = 10, $count = false, $order_by = date_upd, $order_way = null, $beginning = false, $ending = false, Context $context = null ) Wanted to also modify order_way to descending, but there's no need apparently, it it by default showing the latest modified product. Hope this helps someone and hopefully it won't break anything in the shop :)). Link to comment Share on other sites More sharing options...
pili lario Posted December 13, 2020 Share Posted December 13, 2020 do you have the installation zip for the module ps_specials block module for prestashop 1.7.6.4 ? i am looking for it and i cannot find it anywhere. Thanks Link to comment Share on other sites More sharing options...
roxanacaz123 Posted December 15, 2020 Share Posted December 15, 2020 I sthis what you need? ps_specials-master.zip Link to comment Share on other sites More sharing options...
Juan Rios1 Posted April 6, 2021 Share Posted April 6, 2021 On 12/15/2020 at 12:50 AM, roxanacaz123 said: I sthis what you need? ps_specials-master.zip 20.88 kB · 6 downloads It says it's not in the correct format when I try to upload it. Are there any steps I'm missing? Link to comment Share on other sites More sharing options...
Gadem Posted May 4, 2021 Share Posted May 4, 2021 Not Work in 1.7.7.x 😕 use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever; if (!defined('_PS_VERSION_')) { exit; } class Ps_Specials extends Module implements WidgetInterface { private $templateFile; public function __construct() { $this->name = 'ps_specials'; $this->author = 'PrestaShop'; $this->version = '1.0.1'; $this->need_instance = 0; $this->ps_versions_compliancy = array( 'min' => '1.7.0.0', 'max' => _PS_VERSION_ ); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->trans('Specials block', array(), 'Modules.Specials.Admin'); $this->description = $this->trans('Displays your products that are currently on sale in a dedicated block.', array(), 'Modules.Specials.Admin'); $this->templateFile = 'module:ps_specials/views/templates/hook/ps_specials.tpl'; } public function install() { $this->_clearCache('*'); Configuration::updateValue('BLOCKSPECIALS_SPECIALS_NBR', 8); return parent::install() && $this->registerHook('actionProductAdd') && $this->registerHook('actionProductUpdate') && $this->registerHook('actionProductDelete') && $this->registerHook('actionObjectSpecificPriceCoreDeleteAfter') && $this->registerHook('actionObjectSpecificPriceCoreAddAfter') && $this->registerHook('actionObjectSpecificPriceCoreUpdateAfter') && $this->registerHook('displayHome'); } public function uninstall() { $this->_clearCache('*'); return parent::uninstall(); } public function hookActionProductAdd($params) { $this->_clearCache('*'); } public function hookActionProductUpdate($params) { $this->_clearCache('*'); } public function hookActionProductDelete($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreDeleteAfter($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreAddAfter($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreUpdateAfter($params) { $this->_clearCache('*'); } public function _clearCache($template, $cache_id = null, $compile_id = null) { parent::_clearCache($this->templateFile); } public function getContent() { $output = ''; if (Tools::isSubmit('submitSpecials')) { Configuration::updateValue('BLOCKSPECIALS_SPECIALS_NBR', (int)Tools::getValue('BLOCKSPECIALS_SPECIALS_NBR')); $this->_clearCache('*'); $output .= $this->displayConfirmation($this->trans('The settings have been updated.', array(), 'Admin.Notifications.Success')); } return $output.$this->renderForm(); } public function renderForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->trans('Settings', array(), 'Admin.Global'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'text', 'label' => $this->trans('Products to display', array(), 'Modules.Specials.Admin'), 'name' => 'BLOCKSPECIALS_SPECIALS_NBR', 'class' => 'fixed-width-xs', 'desc' => $this->trans('Define the number of products to be displayed in this block on home page.', array(), 'Modules.Specials.Admin'), ), ), 'submit' => array( 'title' => $this->trans('Save', array(), 'Admin.Actions'), ), ), ); $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $helper->default_form_language = $lang->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $helper->identifier = $this->identifier; $helper->submit_action = 'submitSpecials'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } public function getConfigFieldsValues() { return array( 'BLOCKSPECIALS_SPECIALS_NBR' => Tools::getValue('BLOCKSPECIALS_SPECIALS_NBR', Configuration::get('BLOCKSPECIALS_SPECIALS_NBR')), ); } public function renderWidget($hookName = null, array $configuration = []) { if (!$this->isCached($this->templateFile, $this->getCacheId('ps_specials'))) { $variables = $this->getWidgetVariables($hookName, $configuration); if (empty($variables)) { return false; } $this->smarty->assign($variables); } return $this->fetch($this->templateFile, $this->getCacheId('ps_specials')); } public function getWidgetVariables($hookName = null, array $configuration = []) { $products = $this->getSpecialProducts(); if (!empty($products)) { return array( 'products' => $products, 'allSpecialProductsLink' => Context::getContext()->link->getPageLink('prices-drop'), ); } return false; } private function getSpecialProducts() { $products = Product::getPricesDrop( (int)Context::getContext()->language->id, 0, (int)Configuration::get('BLOCKSPECIALS_SPECIALS_NBR') ); $assembler = new ProductAssembler($this->context); $presenterFactory = new ProductPresenterFactory($this->context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $this->context->link ), $this->context->link, new PriceFormatter(), new ProductColorsRetriever(), $this->context->getTranslator() ); $products_for_template = array(); if (is_array($products)) { foreach ($products as $rawProduct) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $this->context->language ); } } return $products_for_template; } } Link to comment Share on other sites More sharing options...
Gadem Posted May 4, 2021 Share Posted May 4, 2021 hace 8 minutos, Gadem dijo: Not Work in 1.7.7.x 😕 use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever; if (!defined('_PS_VERSION_')) { exit; } class Ps_Specials extends Module implements WidgetInterface { private $templateFile; public function __construct() { $this->name = 'ps_specials'; $this->author = 'PrestaShop'; $this->version = '1.0.1'; $this->need_instance = 0; $this->ps_versions_compliancy = array( 'min' => '1.7.0.0', 'max' => _PS_VERSION_ ); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->trans('Specials block', array(), 'Modules.Specials.Admin'); $this->description = $this->trans('Displays your products that are currently on sale in a dedicated block.', array(), 'Modules.Specials.Admin'); $this->templateFile = 'module:ps_specials/views/templates/hook/ps_specials.tpl'; } public function install() { $this->_clearCache('*'); Configuration::updateValue('BLOCKSPECIALS_SPECIALS_NBR', 8); return parent::install() && $this->registerHook('actionProductAdd') && $this->registerHook('actionProductUpdate') && $this->registerHook('actionProductDelete') && $this->registerHook('actionObjectSpecificPriceCoreDeleteAfter') && $this->registerHook('actionObjectSpecificPriceCoreAddAfter') && $this->registerHook('actionObjectSpecificPriceCoreUpdateAfter') && $this->registerHook('displayHome'); } public function uninstall() { $this->_clearCache('*'); return parent::uninstall(); } public function hookActionProductAdd($params) { $this->_clearCache('*'); } public function hookActionProductUpdate($params) { $this->_clearCache('*'); } public function hookActionProductDelete($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreDeleteAfter($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreAddAfter($params) { $this->_clearCache('*'); } public function hookActionObjectSpecificPriceCoreUpdateAfter($params) { $this->_clearCache('*'); } public function _clearCache($template, $cache_id = null, $compile_id = null) { parent::_clearCache($this->templateFile); } public function getContent() { $output = ''; if (Tools::isSubmit('submitSpecials')) { Configuration::updateValue('BLOCKSPECIALS_SPECIALS_NBR', (int)Tools::getValue('BLOCKSPECIALS_SPECIALS_NBR')); $this->_clearCache('*'); $output .= $this->displayConfirmation($this->trans('The settings have been updated.', array(), 'Admin.Notifications.Success')); } return $output.$this->renderForm(); } public function renderForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->trans('Settings', array(), 'Admin.Global'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'text', 'label' => $this->trans('Products to display', array(), 'Modules.Specials.Admin'), 'name' => 'BLOCKSPECIALS_SPECIALS_NBR', 'class' => 'fixed-width-xs', 'desc' => $this->trans('Define the number of products to be displayed in this block on home page.', array(), 'Modules.Specials.Admin'), ), ), 'submit' => array( 'title' => $this->trans('Save', array(), 'Admin.Actions'), ), ), ); $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $helper->default_form_language = $lang->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $helper->identifier = $this->identifier; $helper->submit_action = 'submitSpecials'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } public function getConfigFieldsValues() { return array( 'BLOCKSPECIALS_SPECIALS_NBR' => Tools::getValue('BLOCKSPECIALS_SPECIALS_NBR', Configuration::get('BLOCKSPECIALS_SPECIALS_NBR')), ); } public function renderWidget($hookName = null, array $configuration = []) { if (!$this->isCached($this->templateFile, $this->getCacheId('ps_specials'))) { $variables = $this->getWidgetVariables($hookName, $configuration); if (empty($variables)) { return false; } $this->smarty->assign($variables); } return $this->fetch($this->templateFile, $this->getCacheId('ps_specials')); } public function getWidgetVariables($hookName = null, array $configuration = []) { $products = $this->getSpecialProducts(); if (!empty($products)) { return array( 'products' => $products, 'allSpecialProductsLink' => Context::getContext()->link->getPageLink('prices-drop'), ); } return false; } private function getSpecialProducts() { $products = Product::getPricesDrop( (int)Context::getContext()->language->id, 0, (int)Configuration::get('BLOCKSPECIALS_SPECIALS_NBR') ); $assembler = new ProductAssembler($this->context); $presenterFactory = new ProductPresenterFactory($this->context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $this->context->link ), $this->context->link, new PriceFormatter(), new ProductColorsRetriever(), $this->context->getTranslator() ); $products_for_template = array(); if (is_array($products)) { foreach ($products as $rawProduct) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $this->context->language ); } } return $products_for_template; } } Wrong Path, it works fine! 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