Jump to content

Řazení atributů (S,M,L,XL,XXL) 1.4+


JAKCRABBIT

Recommended Posts

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.

 

atributy.jpg

  • Like 2
Link to comment
Share on other sites

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

  • 2 weeks later...

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

  • 1 month later...

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

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

  • 2 weeks later...

Tak jsem to zmáknul nakonec podle toho tvýho návodu.... po třech hodinách :D

 

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

  • 3 months later...

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

  • 2 months later...

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 by ganador (see edit history)
Link to comment
Share on other sites

  • 1 year later...

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...