JAKCRABBIT Posted October 23, 2011 Share Posted October 23, 2011 Pokud potřebujete srovnat například velikosti u atributů, postuju jednoduchý návod: V classes/Product.php najdeme: ORDER BY agl.`public_name`, al.`name`'); A nahradíme: ORDER BY ag.`id_attribute_group`, pa.`id_product_attribute`'); V controllers/ProductController.php najdeme: foreach ($groups AS &$group) natcasesort($group['attributes']); A nahradíme: // foreach ($groups AS &$group) // natcasesort($group['attributes']); V BO pak přidáme velikosti tak, jak chceme aby se nám řadily. Já je srovnal dle .csv importu, kde sem je měl srovnaný jak sem chtěl. 2 Link to comment Share on other sites More sharing options...
Maria_M Posted October 24, 2011 Share Posted October 24, 2011 nerozumiem, mne to bez upravy zoradzuje presne tak ako je to v administracii nie podla abecedy PS 1.4.4.1 Link to comment Share on other sites More sharing options...
jirik0201 Posted October 24, 2011 Share Posted October 24, 2011 jo, mě taky. to je celkem chyba, že tam vývojáři nedali šipky, kterýma se dá posouvat nahoru a dolů, tak jak je to všude. Link to comment Share on other sites More sharing options...
JAKCRABBIT Posted October 24, 2011 Author Share Posted October 24, 2011 nerozumiem, mne to bez upravy zoradzuje presne tak ako je to v administracii nie podla abecedy PS 1.4.4.1 Tak to netušim, proč tobě to funguje, ale co jsem koukal, tak tenhle problém trvá od 1.2.5. a neustále to někdo řeší na novou a novou verzi. Link to comment Share on other sites More sharing options...
dragonfly Posted October 24, 2011 Share Posted October 24, 2011 Thank you so much! Finally... Link to comment Share on other sites More sharing options...
Peha Posted November 1, 2011 Share Posted November 1, 2011 Another way to do this : add a smarty modifier in tools/smarty/plugins to sort any array in your tpl : {foreach from=$groups|sortby"-name, #id" key=id_attribute_group item=group} The '-' lets you sort in reverse order, and the # lets you sort numerically rather than as a string (you can have '-#id' as well to sort numerically in reverse order) you just need to add this file in tools/smarty/plugins modifier.sortby.php Link to comment Share on other sites More sharing options...
levvout Posted November 16, 2011 Share Posted November 16, 2011 Děkuju za tenhle návod. Pro srovnání atributů tak aby se zobrazili nejdřív ty skladem tam použiju v Products ve funkci getAttributeCombinaisons tohle: ORDER BY pa.quantity DESC'); Funguje to dobře. Pak mám ale výrobky, které nemám skladem ani jeden, takže pa.quantity je všude 0, ale mám tam v available_later u každého atributu jinou dostupnost. Např. 4-8 dní, vyprodáno. Potřebuju to v tomto případě srovnat podle abecedy, aby to vyprodáno bylo jako poslední. Tenhle zápis mi bohužel nefunguje: ORDER BY pa.quantity DESC, pa.`available_later` ASC') Zřejmě pokud je množství 0, tak to tuto funkci getAttributeCombinaisons nepoužívá nebo nevím. Můžete někdo poradit jak na to? Díky. EDIT: je tam jeste funkce public function getAttributesGroups($id_lang) a kdyz se to upravi i tam tak to pak funguje. Takze muj problem vyresen. Link to comment Share on other sites More sharing options...
simberak Posted January 10, 2012 Share Posted January 10, 2012 Ahoj Jackrabbite, přesně tohle teď řeším, bohužel mam velkej import přes xml a to pořadí se mi u jedný skupiny importuje samo jinak, než bych chtěl (a upravit ho nemůžu), a díky price impactu, který je na první pozici, se cena produktu zobrazuje větší, než ve skutečnosti je. Takže jediný co mě napadá je, že musim růčo upravit pořadí těch atributů v té skupině v databázi... Jenže ať se hrabu v db jak chci, tak tam nemůžu najít nic, jak jsou atributy v jednotlivých skupinách řazeny... Mohl by jsi mi poradit, jak to v db upravit? Popřípadně kdybys věděl třeba i jiný způsob, jak to seřadit? Díky moc EDIT: ještě mě napadlo další řešení, a to že bych někde nastavil, aby řadily atributy od nejlevnějšího po nejdražší (tzn. podle price impactu od +0 Kč do XX Kč). Tím pádem by pak produkt měl svou původní, základní cenu - a o to tu jde )) Díky Link to comment Share on other sites More sharing options...
JAKCRABBIT Posted January 10, 2012 Author Share Posted January 10, 2012 Řazení neurčuje DB, ale php. Zkus ten script od Peha, třebas ti pomůže. Link to comment Share on other sites More sharing options...
simberak Posted January 10, 2012 Share Posted January 10, 2012 Sakra ty jsi jak blesk! Díky! Až dorazim home, tak to testnu. Akorát teda nevim, co za fráze tam dát do toho kódu: {foreach from=$groups|sortby"-name, #id" key=id_attribute_group item=group} aby to řadilo podle výše price impactu (to asi najdu někde na začátku nějakýho php souboru, jak je pojemnovanej ten price impact v db to totiž v tabulce ps_product_attribute není pod sloupcem unit_price_impact, ale obyčejně pod price Link to comment Share on other sites More sharing options...
simberak Posted January 18, 2012 Share Posted January 18, 2012 Tak jsem to zmáknul nakonec podle toho tvýho návodu.... po třech hodinách Takže už mam atributy seřazený podle ceny od nejnižšího, už to má jen malej detail - ve výpisu produktů v kategoriích se u jednotl. produktů ukazuje pořád ta blbá cena s price impactem... a to je blbé Prosím, kde bych mohl najít kód, kde se počítá cena zobrazená právě v product listu? děkuju za help... Link to comment Share on other sites More sharing options...
paroled Posted May 2, 2012 Share Posted May 2, 2012 Hello, dont know if anyone is interested how to figure out this at this time but i have a solution with no need to change core files: Change your attribute names as described at post #5 next, change following code in product.tpl <option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'htmlall':'UTF-8'}">{$group_attribute|escape:'htmlall':'UTF-8'}</option> to <option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{if $groupName == '[color=#ff0000]group_6[/color]'}{$group_attribute|escape:'htmlall':'UTF-8'|substr:3:4}{else}{$group_attribute|escape:'htmlall':'UTF-8'}{/if}">{if $groupName == '[color=#ff0000]group_6[/color]'}{$group_attribute|escape:'htmlall':'UTF-8'|substr:3:4}{else}{$group_attribute|escape:'htmlall':'UTF-8'}{/if}</option> in this case, $groupName is group_6 - you can find out which $groupName is required in your case if you add {$groupName} just before the option tag was closed (</option>) then clear cache and on product page in dropdown menu you will find your groupname beside the size... it works fine in 1.4.x but i think in previous versions it will work also Regards Link to comment Share on other sites More sharing options...
menace Posted July 12, 2012 Share Posted July 12, 2012 Tak jsem vyzkoušel oba způsoby a ani jeden nefunguje (( Link to comment Share on other sites More sharing options...
JAKCRABBIT Posted July 13, 2012 Author Share Posted July 13, 2012 Tak to máš blbý. Link to comment Share on other sites More sharing options...
ganador Posted July 20, 2012 Share Posted July 20, 2012 (edited) All this didn't work for me... (prestashop 1.4.7.0) Problem was the sizes appeared in a dropdown "Size" in the wrong order. I didn't wanted to change the attribute text and I'm no smarty specialist. In the table ps_attribute_lang I'm having the sizes in the following structure: id_attribute, id_lang, name 23, 1, 'S / 71-77 cm / 28-31 inch ' 23, 2, 'S / 71-77 cm / 28-31 inch ' 23, 3, 'S / 71-77 cm / 28-31 inch ' 23, 4, 'S / 71-77 cm / 28-31 inch ' 23, 5, 'S / 71-77 cm / 28-31 inch ' 24, 1, 'M / 78-87 cm / 32-34 inch ' 24, 2, 'M / 78-87 cm / 32-34 inch ' 24, 3, 'M / 78-87 cm / 32-34 inch ' 24, 4, 'M / 78-87 cm / 32-34 inch ' 24, 5, 'M / 78-87 cm / 32-34 inch ' 25, 1, 'L / 88-95 cm / 35-37 inch ' 25, 2, 'L / 88-95 cm / 35-37 inch ' 25, 3, 'L / 88-95 cm / 35-37 inch ' 25, 4, 'L / 88-95 cm / 35-37 inch ' 25, 5, 'L / 88-95 cm / 35-37 inch ' 26, 1, 'XL / 96-103 cm / 38-40 inch ' etc. Commenting out "natcasesort" (see below) and changing the ORDER BY part in the SQL-Query in classes\Product.php .... public function getAttributesGroups($id_lang) from this ORDER BY agl.`public_name`, al.`name`' to that ORDER BY agl.`public_name`, a.`id_attribute`, al.`name`' solved my problem Debugging the SQL in MySQL QueryMgr. gave me an Idea how the data is structured. This is clearly a custom solution that may not fit to everyone's situation but maybe it helps ... Don't forget to comment out line 333 in controllers\ProductController.php ... public function process() foreach ($groups AS &$group) //natcasesort($group['attributes']); Edited July 20, 2012 by ganador (see edit history) Link to comment Share on other sites More sharing options...
JAKCRABBIT Posted July 24, 2012 Author Share Posted July 24, 2012 Another solution: http://forum.c4.cz/prestashop-razeni-atributu-xs-s-m-l-xl-xxl-jak-na-to-t1761.html Link to comment Share on other sites More sharing options...
PrestaShark Posted February 24, 2014 Share Posted February 24, 2014 (edited) Here is solution http://www.prestashop.com/forums/topic/292672-attributes-sorting-why-is-it-random/?do=findComment&comment=1479207 works like a charm! Edited February 25, 2014 by kisweb (see edit history) 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