Jump to content
  • 0

Sortowanie w module homefeatured


qwarantanna

Question

Witam,

 

mam problem (tak mi się wydaje) z sortowaniem produktów na mojej stronie głównej w module "produkty polecane" czyli "homefeatured"

Widniejące tam produkty są sortowane według ich wpisywania a nowo dodawane są na samym końcu jeśli w ogóle się zmieszczą w limicie 20 sztuk (bo na tyle ustawiłem ilość produktów polecanych).

Pytanie zatem: jak w module polecane produkty wyświetlać nowe produkty na samej górze?

 

Edytowałem plik homefeatured.php i dodałem 'date_upd','DESC' w odpowiednim miejscu

 

Dodam także, że w kategoriach wszystko jest jak trzeba - problem mam tylko z główna stroną.

 

Jakieś rady, sugestie?

 

Zastosowałem ten trick i działa http://mypresta.eu/en/art/tips-and-tricks/how-to-display-products-randomly-in-prestashop-home-featured-module.html

brakuje mi jedynie aby "nowe" były na samej górze zawsze

Edited by qwarantanna (see edit history)
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

plik homefeatured.php

 

<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2014 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
 
if (!defined('_PS_VERSION_'))
exit;
 
class HomeFeatured extends Module
{
protected static $cache_products;
 
public function __construct()
{
$this->name = 'homefeatured';
$this->tab = 'front_office_features';
$this->version = '1.5';
$this->author = 'PrestaShop';
$this->need_instance = 0;
 
$this->bootstrap = true;
parent::__construct();
 
$this->displayName = $this->l('Featured products on the homepage');
$this->description = $this->l('Displays featured products in the central column of your homepage.');
}
 
public function install()
{
$this->_clearCache('*');
Configuration::updateValue('HOME_FEATURED_NBR', 8);
 
if (!parent::install()
|| !$this->registerHook('header')
|| !$this->registerHook('addproduct')
|| !$this->registerHook('updateproduct')
|| !$this->registerHook('deleteproduct')
|| !$this->registerHook('categoryUpdate')
|| !$this->registerHook('displayHomeTab')
|| !$this->registerHook('displayHomeTabContent')
)
return false;
 
return true;
}
 
public function uninstall()
{
$this->_clearCache('*');
 
return parent::uninstall();
}
 
public function getContent()
{
$output = '';
$errors = array();
if (Tools::isSubmit('submitHomeFeatured'))
{
$nbr = (int)Tools::getValue('HOME_FEATURED_NBR');
if (!$nbr || $nbr <= 0 || !Validate::isInt($nbr))
$errors[] = $this->l('An invalid number of products has been specified.');
else
{
Tools::clearCache(Context::getContext()->smarty, $this->getTemplatePath('homefeatured.tpl'));
Configuration::updateValue('HOME_FEATURED_NBR', (int)$nbr);
}
if (isset($errors) && count($errors))
$output .= $this->displayError(implode('<br />', $errors));
else
$output .= $this->displayConfirmation($this->l('Your settings have been updated.'));
}
 
return $output.$this->renderForm();
}
 
public function hookDisplayHeader($params)
{
$this->hookHeader($params);
}
 
public function hookHeader($params)
{
if (isset($this->context->controller->php_self) && $this->context->controller->php_self == 'index')
$this->context->controller->addCSS(_THEME_CSS_DIR_.'product_list.css');
$this->context->controller->addCSS(($this->_path).'homefeatured.css', 'all');
}
 
public function _cacheProducts()
{
if (!isset(HomeFeatured::$cache_products))
{
$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = (int)Configuration::get('HOME_FEATURED_NBR');
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'date_upd','DESC');
}
 
if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products))
return false;
}
 
public function hookDisplayHomeTab($params)
{
if (!$this->isCached('tab.tpl', $this->getCacheId('homefeatured-tab')))
$this->_cacheProducts();
 
return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('homefeatured-tab'));
}
 
public function hookDisplayHome($params){
$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = (int)(Configuration::get('HOME_FEATURED_NBR'));
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10));
 
shuffle($products);
 
$this->smarty->assign(array(
'products' => $products,
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'homeSize' => Image::getSize('home_default'),
));
return $this->display(__FILE__, 'homefeatured.tpl');
}
 
public function hookDisplayHomeTabContent($params)
{
return $this->hookDisplayHome($params);
}
 
public function hookAddProduct($params)
{
$this->_clearCache('*');
}
 
public function hookUpdateProduct($params)
{
$this->_clearCache('*');
}
 
public function hookDeleteProduct($params)
{
$this->_clearCache('*');
}
 
public function hookCategoryUpdate($params)
{
$this->_clearCache('*');
}
 
public function _clearCache($template, $cache_id = NULL, $compile_id = NULL)
{
parent::_clearCache('homefeatured.tpl');
parent::_clearCache('tab.tpl', 'homefeatured-tab');
}
 
public function renderForm()
{
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs'
),
'description' => $this->l('To add products to your homepage, simply add them to the root product category (default: "Home").'),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Number of products to be displayed'),
'name' => 'HOME_FEATURED_NBR',
'class' => 'fixed-width-xs',
'desc' => $this->l('Set the number of products that you would like to display on homepage (default: 8).'),
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
 
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$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;
$this->fields_form = array();
$helper->id = (int)Tools::getValue('id_carrier');
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitHomeFeatured';
$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(
'HOME_FEATURED_NBR' => Tools::getValue('HOME_FEATURED_NBR', Configuration::get('HOME_FEATURED_NBR')),
);
}
}
Link to comment
Share on other sites

  • 0

Jeśli dobrze zrozumiałem to nowe produkty mają się wyświetlać od góry więc sprawdź to (pisane na szybko bez sprawdzania poprawności):

<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.or...ses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2014 PrestaShop SA
*  @license    http://opensource.or...ses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
 
if (!defined('_PS_VERSION_'))
exit;
 
class HomeFeatured extends Module
{
protected static $cache_products;
 
public function __construct()
{
$this->name = 'homefeatured';
$this->tab = 'front_office_features';
$this->version = '1.5';
$this->author = 'PrestaShop';
$this->need_instance = 0;
 
$this->bootstrap = true;
parent::__construct();
 
$this->displayName = $this->l('Featured products on the homepage');
$this->description = $this->l('Displays featured products in the central column of your homepage.');
}
 
public function install()
{
$this->_clearCache('*');
Configuration::updateValue('HOME_FEATURED_NBR', 8);
 
if (!parent::install()
|| !$this->registerHook('header')
|| !$this->registerHook('addproduct')
|| !$this->registerHook('updateproduct')
|| !$this->registerHook('deleteproduct')
|| !$this->registerHook('categoryUpdate')
|| !$this->registerHook('displayHomeTab')
|| !$this->registerHook('displayHomeTabContent')
)
return false;
 
return true;
}
 
public function uninstall()
{
$this->_clearCache('*');
 
return parent::uninstall();
}
 
public function getContent()
{
$output = '';
$errors = array();
if (Tools::isSubmit('submitHomeFeatured'))
{
$nbr = (int)Tools::getValue('HOME_FEATURED_NBR');
if (!$nbr || $nbr <= 0 || !Validate::isInt($nbr))
$errors[] = $this->l('An invalid number of products has been specified.');
else
{
Tools::clearCache(Context::getContext()->smarty, $this->getTemplatePath('homefeatured.tpl'));
Configuration::updateValue('HOME_FEATURED_NBR', (int)$nbr);
}
if (isset($errors) && count($errors))
$output .= $this->displayError(implode('<br />', $errors));
else
$output .= $this->displayConfirmation($this->l('Your settings have been updated.'));
}
 
return $output.$this->renderForm();
}
 
public function hookDisplayHeader($params)
{
$this->hookHeader($params);
}
 
public function hookHeader($params)
{
if (isset($this->context->controller->php_self) && $this->context->controller->php_self == 'index')
$this->context->controller->addCSS(_THEME_CSS_DIR_.'product_list.css');
$this->context->controller->addCSS(($this->_path).'homefeatured.css', 'all');
}
 
public function _cacheProducts()
{
if (!isset(HomeFeatured::$cache_products))
{
$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = (int)Configuration::get('HOME_FEATURED_NBR');
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position');
}
 
if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products))
return false;
}
 
public function hookDisplayHomeTab($params)
{
if (!$this->isCached('tab.tpl', $this->getCacheId('homefeatured-tab')))
$this->_cacheProducts();
 
return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('homefeatured-tab'));
}
 
public function hookDisplayHome($params){
$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = (int)(Configuration::get('HOME_FEATURED_NBR'));
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10), 'date_upd','DESC');
 

 
$this->smarty->assign(array(
'products' => $products,
'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
'homeSize' => Image::getSize('home_default'),
));
return $this->display(__FILE__, 'homefeatured.tpl');
}
 
public function hookDisplayHomeTabContent($params)
{
return $this->hookDisplayHome($params);
}
 
public function hookAddProduct($params)
{
$this->_clearCache('*');
}
 
public function hookUpdateProduct($params)
{
$this->_clearCache('*');
}
 
public function hookDeleteProduct($params)
{
$this->_clearCache('*');
}
 
public function hookCategoryUpdate($params)
{
$this->_clearCache('*');
}
 
public function _clearCache($template, $cache_id = NULL, $compile_id = NULL)
{
parent::_clearCache('homefeatured.tpl');
parent::_clearCache('tab.tpl', 'homefeatured-tab');
}
 
public function renderForm()
{
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs'
),
'description' => $this->l('To add products to your homepage, simply add them to the root product category (default: "Home").'),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Number of products to be displayed'),
'name' => 'HOME_FEATURED_NBR',
'class' => 'fixed-width-xs',
'desc' => $this->l('Set the number of products that you would like to display on homepage (default: 8).'),
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
 
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$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;
$this->fields_form = array();
$helper->id = (int)Tools::getValue('id_carrier');
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitHomeFeatured';
$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(
'HOME_FEATURED_NBR' => Tools::getValue('HOME_FEATURED_NBR', Configuration::get('HOME_FEATURED_NBR')),
);
}
}
Link to comment
Share on other sites

  • 0

wstawiłem - efekt http://www.e-tobak.pl i wg mnie pasuje i fajnie działa.  Poprzednio miałem rotację na produktach polecanych, to dobre dla odwiedzających i dla widoczności w Google.

Jak zatem utrzymać to co jest teraz (nowe produkty na górze) + reszta polecanych losowo pokazywana z puli produktów powiązanych z kategorią "Home" ?  

Link to comment
Share on other sites

  • 0

Najprościej to dwa moduły polecanych produktów zainstalować. Górny by wyświetlał to co teraz, a nowy dolny losowe produkty.

 

Zauważyłem ze ta moja modyfikacja działa na zasadzie najnowszy produkt, czyli jeśli edytujesz jakiś istniejący produkt to zapewne wskoczy na górę.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...