Polskie wsparcie PrestaShop
PrestaShop => Konfiguracja => Wątek zaczęty przez: kuras w Wrzesień 06, 2011, 03:41:15 pm
-
Witajcie
Chyba jest problem w PS z sortowaniem cech, prawda?
Nie można nad tym panować tak jak np. kiedyś nad kolejnością kategorii w stylu 01., 02., 03....
Oto rozwiązanie.
Robimy nazwy cech z liczbami które porządkują nam kolejność, np.
020.Waga
010.Rozmiar
030.Wykończenie
Wgrywamy plugin do katalogu smarty pod nazwą modifier.sortby.php
<?php
#
# sorts an array of named arrays by the supplied fields
# code by dholmes at jccc d0t net
# taken from http://au.php.net/function.uasort
# modified by cablehead, messju and pscs at http://www.phpinsider.com/smarty-forum
function array_sort_by_fields(&$data, $sortby){
static $sort_funcs = array();
if (empty($sort_funcs[$sortby]))
{
$code = "\$c=0;";
foreach (split(',', $sortby) as $key)
{
$d = '1';
if (substr($key, 0, 1) == '-')
{
$d = '-1';
$key = substr($key, 1);
}
if (substr($key, 0, 1) == '#')
{
$key = substr($key, 1);
// $code .= "if ( ( \$c = (\$a['$key'] - \$b['$key'])) != 0 ) return $d * \$c;\n";
$code .= "if ( \$a['$key'] > \$b['$key']) return $d * 1;\n";
$code .= "if ( \$a['$key'] < \$b['$key']) return $d * -1;\n";
}
else
{
$code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return $d * \$c;\n";
}
}
$code .= 'return $c;';
$sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
}
else
{
$sort_func = $sort_funcs[$sortby];
}
uasort($data, $sort_func);
}
#
# Modifier: sortby - allows arrays of named arrays to be sorted by a given field
#
function smarty_modifier_sortby($arrData,$sortfields) {
array_sort_by_fields($arrData,$sortfields);
return $arrData;
}
?>
Teraz wchodzimy do pliku odpowiadającego za wygląd strony z produktem (product.tpl) i zmieniamy linijkę taką:
{foreach from=$features item=feature}
na taką:
{foreach from=$features|@sortby:"name" item=feature}
I mamy sortowanie po nazwach z przykładu:
010.Rozmiar
020.Waga
030.Wykończenie
Pozostaje nam wycięcie początku...
Znajdujemy kod odpowiedzialny za wyświetlenie nazwy:
{$feature.name|escape:'htmlall':'UTF-8'}
zmieniamy go na kod wycinający:
{$feature.name|escape:'htmlall':'UTF-8'|regex_replace:'/[0-9]+./':''}
Gotowe :-)
Proszę sprawdzić czy działa.
ps. dłubiemy tylko w plikach tpl oraz dodajemy plugin do katalogu smarty... więc po aktualizacji nic nie powinno zginąć :-)
-
Mi nie działa.... Zrobiłem wszystko wg opisu i nic... :(
Nie wycina 010. 020. sprzed nazw cech, pokazują mi się te liczby w sklepie a kolejność nadal przypadkowa >:(
PrestaShop™ 1.4.4.1 | PrestaShopPL v. 1.4.4.1
-
Już jest ok - działa :D Trzeba włączyć re-kompilację plików szablonów w Panel administracyjny --> Ustawienia -->Optymalizacja - Wymuszaj kompilację na tak...
-
a teraz po zmianie dostawcy:
Deprecated: Function split() is deprecated in /homez.441/hydrokra/www/tools/smarty/plugins/modifier.sortby.php on line 14 co zrobić z tym?? :(
-
define('_PS_DISPLAY_COMPATIBILITY_WARNING_', false);
w /config/config.inc.php
-
czy ten skrypt działa z presta 1.4.8.2?
-
Również nie działa sprawdzane na 1.4.4.1 Ma ktoś jakieś rozwiązanie?