Strona główna > Aktywność > Forum > Programowanie i rozszerzenia > Attribute filtering a Text Line


Attribute filtering a Text Line

Musisz być zalogowany aby uzyskać dostęp do forum. Możesz się zalogować tutaj

Autor Wiadomość

Krzysztof Kaczyński

Postów: 8 od 27/05/2009

Poniedziałek 14 Wrzesień 2009 12:34:38 pm

Attribute filtering a Text Line

Witam,

W zdefiniowanej przeze mnie klasie produktu istnieje pole typu Text Line, ktore zawiera wymienione bo przecinku cechy.
W jednym z plikow .tpl przeszukuje obiekty tej klasy ktore zawieraja szukana ceche:

{let res = fetch('content', 'list', hash('parent_node_id', $node.node_id, 'class_filter_type', 'include', 'class_filter_array', array( 'produkt' ), 'attribute_filter', array( array('produkt/cecha','like',concat('*',$search,'*'))), 'sort_by', array('priority',true()) ))}

Niestety przeoczylem przy projektowaniu fakt iz pole text line jest ograniczone do 255 znakow. Przy niektorych produktach okazalo sie ze dlugosc atrybuttu cech wyraznie ten rozmiar przekracza. Dziwne jest dla mnie to iz moge dodac obiekt o atrybucie cecha wiekszym niz 255 znakow. Jest on poprawnie wyswietlany. Natomiast filtrowanie dziala tylko do granicy 255 znakow.

Czy mozna to jakos obejsc?
Z gory dziekuje za pomoc.

KK

Bartek Modzelewski

Postów: 133 od 05/07/2006

Czwartek 17 Wrzesień 2009 1:25:30 pm

Re: Attribute filtering a Text Line

Witaj,

Nie do końca rozumiem w jaki sposób masz ograniczony atrybut "cecha" do 255 znaków, chodzi ci o ustawienie atrybutu w klasie? Jeśli tak - to nic prostszego to zmienić. Podejrzewam jednak, że chodzi o coś innego:

O ile dobrze wiem, filtrowanie po atrybucie używa innego pola w tabeli bazy niż do przechowania całej treści. W przypadku data typu "Text line" jest to sort_key_string (tabela ezcontentobject_attribute).Faktycznie, w bazie to pole ma ograniczenie do 255 znaków, dlatego dłuższa treść jest obcinana i nie udaje się wyszukać odpowiedniego obiektu. Nie wiem czy są jakieś dodatkowe ograniczenia w kodzie, ale możesz spróbować zmodyfikować ten atrybut w bazie danych z VARCHAR(255) na VARCHAR(1000).

Następnie trzeba by odświeżyć zawartość tego atrybutu. Podejrzewam niestety, że odpalenie reindeksacji całej strony tu nie pomoże. Musisz niestety napisać jakiś prosty skrypt, który w pętli przejdzie wszystkie pola tego typu i przekopiuje zawartość z data_text do sort_key_string.

No cóż, sam tego nie testowałem, ale może zadziała. Jednocześnie radzę nie przesadzać z wielkością atrybutu - podane 1000 znaków jest przykładowe. Zbyt duża wartość może niekorzystnie odbić się na wydajności.

Pozdrawiam

Krzysztof Kaczyński

Postów: 8 od 27/05/2009

Czwartek 17 Wrzesień 2009 2:12:02 pm

Re: Attribute filtering a Text Line

Dzieki za informacje,
VARCHAR nie ma ograniczenia do 255 znakow?
Jesli nie - to rzeczywiscie ma to rece i nogi.
Warto kiedys sprawdzic czy dziala i jaki wplyw na wydajnosc ma wielkosc tego pola.

Udalo mi sie jednak obejsc problem przy pomocy Extended attribute filtering i wspomnianego pola data_text.

Bartek Modzelewski

Postów: 133 od 05/07/2006

Piątek 18 Wrzesień 2009 1:53:08 pm

Re: Attribute filtering a Text Line

Świetnie! Extended attribute filtering jest bardzo dobrym rozwiązaniem, bo można filtr umieścić w rozszerzeniu i niczego w bazie nie modyfikować :)


Musisz być zalogowany aby uzyskać dostęp do forum. Możesz się zalogować tutaj