Korzystam z dwóch modułów które były w preście od początku. Jeden z nich to moduł wyświetlający produkty w promocji - ps specials oraz drugi - featured products wyświetlający produkty z danej kategorii.
Głównie chciałem się zająć tym modułem ps specials.
Zależy mi na tym aby produkty które wyświetlają się na stronie głównej pojawiały się albo losowo z uwzględnieniem czasu ważności plików cookies (o odświeżeniu przeglądarki i po wejściu na stronę ponownie były niezmienione przez jakiś czas) albo przesortowane pod względem czasu do końca promocji. Wszystko zależy od tego które rozwiązanie jest prostsze.
Czy ktoś wykonywał taką drobną modyfikację? Przeszukałem internet ale proponowane rozwiązania nie są do tego modułu.
Jeżeli ktoś ma jakiś pomysł było by miło
Wersja presty 1.7.6.1. Domena bluewear.online.
Oto plik php modułu:
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;
}
}
Question
Burnago
Dzień dobry,
Korzystam z dwóch modułów które były w preście od początku. Jeden z nich to moduł wyświetlający produkty w promocji - ps specials oraz drugi - featured products wyświetlający produkty z danej kategorii.
Głównie chciałem się zająć tym modułem ps specials.
Zależy mi na tym aby produkty które wyświetlają się na stronie głównej pojawiały się albo losowo z uwzględnieniem czasu ważności plików cookies (o odświeżeniu przeglądarki i po wejściu na stronę ponownie były niezmienione przez jakiś czas) albo przesortowane pod względem czasu do końca promocji. Wszystko zależy od tego które rozwiązanie jest prostsze.
Czy ktoś wykonywał taką drobną modyfikację? Przeszukałem internet ale proponowane rozwiązania nie są do tego modułu.
Jeżeli ktoś ma jakiś pomysł było by miło
Wersja presty 1.7.6.1. Domena bluewear.online.
Oto plik php modułu:
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
0 answers to this question
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