Jump to content
  • 0

Sortowanie po nazwie cech w generatorze atrybutów - jak to wykonać?


hakeryk2

Question

Witam,

 

Od pewnego czasu spędza mi sen z powiek jedna rzecz - jak sprawić by podczas dodawania produktu, gdy przechodzimy do generatora wielu atrybutów (aka kombinacji) każda grupa posiadała wartości ułożone po nazwie a nie po ID jak to ma miejsce oryginalnie.

 

O dziwo gdy dodaje się tylko jedną kombinację poprzez "nowa kombinacja" otrzymujemy nieco inny generator w którym cechy sortowane są alfabetycznie.

 

Czy mógłby ktoś pomóc? Będę bardzo wdzięczny.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

W klasie Attribute modyfikujemy funkcję getAttributes($id_lang, $not_null = false).

Zamiast sortowania:

ORDER BY agl.`name` ASC, a.`position` ASC

robimy:

ORDER BY agl.`name` ASC, al.`name` ASC

 

Modyfikację klasy Attribute powinniśmy wykonać poprzez override tej klasy.

  • Like 1
Link to comment
Share on other sites

  • 0

AdminAttributeGenerator nie sortuje atrybutów ani według ID, ani według nazwy.

Sortuje w/g 'position'.

h_1489821476_2803640_16a84e3878.png

 

I to jest najbardziej uniwersalne rozwiązanie, bo jeden użytkownik chce mieć sortowane alfabetycznie, a drugi będzie miał jakieś tam swoje kryteria.

Link to comment
Share on other sites

  • 0

Dzięki wielkie!

 

Dla tych może mniej technicznych opiszę co dokładnie zrobić.

Utworzyć  override\classes\Attribute.php z zawartością poniżej

<?php

class Attribute extends AttributeCore
{
   
    public static function getAttributes($id_lang, $not_null = false)
    {
        if (!Combination::isFeatureActive()) {
            return array();
        }

        return Db::getInstance()->executeS('
			SELECT DISTINCT ag.*, agl.*, a.`id_attribute`, al.`name`, agl.`name` AS `attribute_group`
			FROM `'._DB_PREFIX_.'attribute_group` ag
			LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl
				ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.')
			LEFT JOIN `'._DB_PREFIX_.'attribute` a
				ON a.`id_attribute_group` = ag.`id_attribute_group`
			LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al
				ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
			'.Shop::addSqlAssociation('attribute_group', 'ag').'
			'.Shop::addSqlAssociation('attribute', 'a').'
			'.($not_null ? 'WHERE a.`id_attribute` IS NOT NULL AND al.`name` IS NOT NULL AND agl.`id_attribute_group` IS NOT NULL' : '').'
			ORDER BY agl.`name` ASC, al.`name` ASC
		');
    }
    
}

następnie usunąć plik cache/class_index.php i wszystko będzie śmigać. Dzięki wielkie! Patrzyłem jak ciele w tę klasę i nie wpadło mi do głowy żeby zmienić drugi parametr w Order by.

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