wdrożenia PrestaShop

Moduł "Szukaj po atrybucie"

  • 31 Odpowiedzi
  • 21133 Wyświetleń

0 użytkowników i 2 Gości przegląda ten wątek.

*

Offline tarentil

  • Nowy
  • *
  • 10
  • 1
  • Płeć: Mężczyzna
Moduł "Szukaj po atrybucie"
« dnia: Czerwiec 02, 2009, 01:42:27 pm »
Bardzo mnie denerwował brak wyszukiwarki opartej na atrybutach, więc sobie zacząłem robić własną. Jest jeszcze nieco niedopracowana, bo nie znam się na szablonach smarty, php znam odlegle a i framework prestashop jest mi obcy, ale coś tam udało mi się stworzyć.

Uwaga - ten moduł wyszukuje po jednym atrybucie, choć wyświetla do wyboru wszystkie grupy atrybutów. Dopiero planuję zrobić wyszukiwanie po wielu atrybutach.

Teraz konkretnie:
~ Moduł jest obecnie przypinany tylko do lewej kolumny.
~ Moduł publikuję za zasadzie Open-Source, więc pomóżcie mi go rozwijać, jesli chcecie i potraficie.
~ Moduł do poprawnego działania wymaga modyfikacji plików Prestashopu LUB przekopiowania gotowych plików ode mnie (są to zmodyfikowane pliki z PrestaShop PL BETA rewizja 118). Opis niżej.
~ Moduł jest napisany na szybko i dlatego warstwa prezentacji nie jest rozdzielona od warstwy kodu. Przykro mi, ale nie znam na tyle smarty, aby dać sobię radę z pewnymi rzeczami. Liczę na pomoc.
~ Moduł obecnie obsługuje dwa języki: angielski i polski.
~ Znany mi bug: przy wyświetlaniu wyników content ma tytuł Szukaj 'Array'. Popracuję nad tym w wolnej chwili - trzeba zmienić w szablonie, w pliku 'search.tpl', aby poprawnie obsługiwał zmienną 'id_attribute'.

Screenshot:



A teraz odnośnie niezbędnych modyfikacji w plikach. Nie znam frameworku PrestaShop i zrobiłem to tak, że zmodyfikowałem plik "search.php" w folderze głównym oraz "/classes/Search.php". Zmiany są następujące:

W "search.php" należy nad komentarzem /* Tags */ dodać następujący kod:

/* Attribute IDs */
elseif ($attribute_id = Tools::getValue('attribute_id'))
{
$search = new Search();
$nbProducts = intval($search->attribute_id(intval($cookie->id_lang), $attribute_id, true));
include(dirname(__FILE__).'/pagination.php');
$smarty->assign(array(
'attribute_id' => $attribute_id,
'products' => $search->attribute_id(intval($cookie->id_lang), $attribute_id, false, $p, $n),
'nbProducts' => $nbProducts));
}

W "/classes/Search.php" trzeba zaś dodać nową funkcję do klasy:

/**
* @param integer $id_lang Language id for results
* @param string $attribute_id Attribute ID to find
* @param boolean $count Only to get number of results (optional)
* @param string $pageNumber Current page (optional)
* @param string $pageSize Results per page (optional)
* @return array Attribute ID search results
*/
public function attribute_id($id_lang, $attribute_id, $count = false, $pageNumber = 0, $pageSize = 10)
{
global $link;

if (!is_numeric($pageNumber) OR !is_numeric($pageSize)
OR !Validate::isBool($count) OR !Validate::isValidSearch($tag))
die(Tools::displayError());

if ($pageNumber < 0) $pageNumber = 0;
if ($pageSize < 1) $pageSize = 10;

/* Only if we need total results number */
if ($count)
{
$result = Db::getInstance()->getRow('
SELECT
COUNT(DISTINCT p.`id_product`) AS nb
FROM
`'._DB_PREFIX_.'product` AS p,
`'._DB_PREFIX_.'product_attribute` AS ppa,
`'._DB_PREFIX_.'product_attribute_combination` AS ppac
WHERE
ppac.`id_attribute` = '.$attribute_id.' AND
ppa.`id_product_attribute` = ppac.`id_product_attribute` AND
p.`id_product` = ppa.`id_product` AND
p.`active` = 1');
return isset($result['nb']) ? $result['nb'] : 0;
}

$result = Db::getInstance()->ExecuteS('
SELECT
p.*,
pl.`description_short`,
pl.`link_rewrite`,
pl.`name`,
tax.`rate`,
i.`id_image`,
il.`legend`
FROM
`'._DB_PREFIX_.'product` AS p,
`'._DB_PREFIX_.'product_attribute` AS ppa,
`'._DB_PREFIX_.'product_attribute_combination` AS ppac,
`'._DB_PREFIX_.'product_lang` AS pl,
`'._DB_PREFIX_.'image` AS i,
`'._DB_PREFIX_.'image_lang` AS il,
`'._DB_PREFIX_.'tax` as tax
WHERE
ppac.`id_attribute` = '.$attribute_id.' AND
ppa.`id_product_attribute` = ppac.`id_product_attribute` AND
p.`id_product` = ppa.`id_product` AND
p.`id_product` = pl.`id_product` AND
pl.`id_lang` = '.intval($id_lang).' AND
i.`id_product` = p.`id_product` AND
i.`cover` = 1 AND
p.`id_tax` = tax.`id_tax` AND
p.`active` = 1
GROUP BY
p.`id_product`');

if (!$result) return false;

return Product::getProductsProperties($id_lang, $result);
}

Po tych zmianach wywołanie takiego linku http://mojsklep.pl/search.php?id_atrybutu=13 da w wyniku wypis wszystkich produktów zawierających atrybut o ID 13.

Swoją drogą, można łatwo dostosować powyższy kod do wyszukiwania nie po id atrybutu ale bo jego nazwie.

Przetestujcie moduł - u mnie działa wyśmienicie.

W załączeniu do tego posta jest właśnie paczka z modułem oraz ze zmodyfikowanymi plikami do PrestaShop PL BETA rewizja 118 i instrukcja po angielsku.
« Ostatnia zmiana: Czerwiec 02, 2009, 02:06:50 pm wysłana przez tarentil »

*

Offline tarentil

  • Nowy
  • *
  • 10
  • 1
  • Płeć: Mężczyzna
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #1 dnia: Czerwiec 03, 2009, 02:40:30 pm »
Aktualizacja! Po godzinach spędzonych nad bazą danych udało mi się zmodyfikować mój moduł, aby wyszukiwał po wielu atrybutach!

Wygląda to tak:


Wybieramy sobie wartości atrybutów i klikamy Szukaj. :-)

Wszystkie uwagi tyczące się poprzedniej wersji (opisane w mojej pierwszej wypowiedzi w tym wątku) tyczą się też i tej wersji, czyli jest wiele do poprawienia i przydałaby mi się pomoc kogoś zdolnego.

Dodatkowe uwagi:
~ Zmianie ulegają trzy pliki związane bezpośrednio z PrestaShopem, w tym jeden plik należący do jądra i związany z komunikacją z bazą danych. Prestashop ma czarną listę słów, których nie wolno użyć w wyrażeniach SQL i owa lista jest zmorą ludzi tworzących moduły, o czym można poczytać na oficjalnym forum Prestashop. Główny problem to umieszczenie na czarnej liście dyrektywy UNION. Aby mój moduł mógł działać, owa dyrektywa musi być dopuszczona do użytku, albowiem bez niej realizacja pewnych zapytań nie jest możliwa na bazie MySQL, która nie obsługuje dyrektywy INTERSECT.
~ Jeśli aktualizujecie wersję poprzednią mojego modułu do aktualnej, to musicie wprowadzić poprawki w KAŻDYM z plików.
~ Znany bug, który zostanie poprawiony w najbliższym czasie: wynikiem wyszukiwania jest zawsze OBLICZONY na 10 elementów, ale elementów może być 0. To nieco mylące. Poprawię to jak wrócę od dentysty. :-)

Ponownie, proszę o informację, czy moduł wam działa i jeśli tak to czy działa poprawnie.

*

Offline tarentil

  • Nowy
  • *
  • 10
  • 1
  • Płeć: Mężczyzna
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #2 dnia: Czerwiec 03, 2009, 08:05:04 pm »
W poście wyżej załączyłem zipa ze złym plikiem szablonu dla modułu. Teraz poprawiony plik. Jestem też w trakce robienia kolejnego uaktualnienia. Poprawi ono zliczanie elementów w wyszukiwaniu, doda możliwość sortowania wyników i stronicowanie.

*

Offline tarentil

  • Nowy
  • *
  • 10
  • 1
  • Płeć: Mężczyzna
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #3 dnia: Czerwiec 04, 2009, 10:07:31 am »
Wersja 1.2!

Nowości:
~ Zliczanie - teraz jest poprawne
~ Stronicowanie - wyniki są dzielone na strony
~ Sortowanie - domyślnie jest po nazwie, ale można używać standardowej rozwijanej listy z typem sortowania

Wszystkie pozostałe uwagi, które się tyczyły wersji 1.0 i 1.1 wciąż aktualne. Tym nie mniej moduł można już z czystym sercem instalować we własnym serwisie i korzystać z niego.

Moduł jest na licencji OSL, czyli jest darmowy i otwarty na zmiany, a także każda praca wyprowadzona od niego musi być darmowa i otwarta na zmiany. Korzystajcie z tego do woli - to mój wkład w PrestaShop. Jeśliby ktoś miał problem z instalacją, to proszę pisać tutaj, a opiszę wszystko dokładnie. Jeśliby ktoś mimo to sobie nie radził, to za symboliczną opłatą zainstaluję osobiście.

*

Offline sanser

  • Nowy
  • *
  • 1
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #4 dnia: Czerwiec 04, 2009, 03:45:06 pm »
Fajny modulik bardzo przydatny:)
Ideałem byłoby gdyby atrybuty po których szukasz zależały od wybranej kategorii.

*

Offline tarentil

  • Nowy
  • *
  • 10
  • 1
  • Płeć: Mężczyzna
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #5 dnia: Czerwiec 04, 2009, 04:04:44 pm »
Fajny modulik bardzo przydatny:)
Ideałem byłoby gdyby atrybuty po których szukasz zależały od wybranej kategorii.
Dodam ten pomysł to listy rzeczy do zrobienia. :-) Jak mi się dobrze czas ułoży, to na jutrzejsze popołudnie będzie to wdrożone.

*

Offline mef

  • Nowy
  • *
  • 4
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #6 dnia: Czerwiec 04, 2009, 04:59:34 pm »
modulik cacuszko :) ale jeszcze lepiej bylo by gdyby modul ten wyswietlal sie tak jak w magento czyli z boku pelna lista atrybutow rozwinięta... i wtedy po wybrnaiu atrybutu z danej listy zwija sie lista i pozostaje atrybut wybrany i z boku <X> ze mozna go usunac i spowrotem pojawia sie zakres atrybutow z danej listy...

nie wiem czy napisalem ze zrozumieniem najwyzej wstawie link do fotki modulu pisanego przez kogos z rosji http://www.prestashop.com/?ACT=29&fid=10&aid=7283_SnNwQKTgISYdFREZhQDn&board_id=1 cos w tym stylu ale jak w magento :)

ciekawe czy mzoliwe cos takiego ... ps .. zabieram sie powoli do pisania modulu integrujacego presta z allegro ... czekam na ewentualne zmiany api ktore mialy nastapic dzis i przy odrobinie wolnego czasu napisze go

pozdr
 

*

Offline tarentil

  • Nowy
  • *
  • 10
  • 1
  • Płeć: Mężczyzna
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #7 dnia: Czerwiec 04, 2009, 10:00:44 pm »
ale jeszcze lepiej bylo by gdyby modul ten wyswietlal sie tak jak w magento czyli z boku pelna lista atrybutow rozwinięta... i wtedy po wybrnaiu atrybutu z danej listy zwija sie lista i pozostaje atrybut wybrany i z boku <X> ze mozna go usunac i spowrotem pojawia sie zakres atrybutow z danej listy...
Ciekawy pomysł. :-) Nie jestem takim specem od JavaScriptu, aby to zrobić szybko, ale tak w ogóle to pewnie kwestia czasu, aby to zrealizować. :-)

*

Offline charm

  • Nowy
  • *
  • 9
  • 0
  • Płeć: Kobieta
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #8 dnia: Lipiec 02, 2009, 03:28:22 pm »
Parę drobnych uwag ;-)

-> w Search.php powinno być w selekcie jeszcze  AND ppa.`quantity` > 0, żeby nie wyświetlało tych, które są niedostępne ;-)
-> w blocksearchbyattribute.tpl w sekcji input dodatkowo class="button" - lepiej wygląda, bo korzysta z takich przycisków jak reszta sklepu ;-)
-> dołożenie w blocksearchbyattribute.php  w select  style="width: ...."  załatwia sprawę rozjeżdżania się ;-)

aczkolwiek to takie kosmetyczne (powiedzmy "kobiece") uwagi ;-)

Generalnie świetna robota (uprzedziłeś mnie, bo też zaczęłam robić, ale ostatnia sesja mnie oderwała od rzeczywistości... ;-) )

*

Offline kris

  • Nowy
  • *
  • 4
  • 0
  • Płeć: Mężczyzna
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #9 dnia: Lipiec 30, 2009, 07:54:09 am »
A mógłby ktoś napisać jak przerobić ten sam moduł, żeby szukał po cechach?

*

Offline motorider

  • Stały użytkownik
  • ***
  • 66
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #10 dnia: Wrzesień 22, 2009, 07:27:09 pm »
Czy ktoś mógłby dostosować ten moduł do najnowszej wersji presty?

*

Offline marian76

  • Nowy
  • *
  • 4
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #11 dnia: Wrzesień 22, 2009, 08:04:27 pm »
Zajefajny moduł tylko co by szukał po kategoriach--->potem podkategoriach itd, idzie cos takiego zrobić? Np. wybieram Markę na Amica--> potem mam dostępne np, Prlaki, Lodówki, kuchenki, i jeszcze niżej np. szerokości danych produktów.
Amica
Pralki
60cm
szukaj <-----

da rade coś takiego zrobić?
Pozdrawiam i liczę na waszą pomoc, sam gdybym znał choć trochę język programowania z miłą chęcią bym pomógł.

*

Offline przemek_rek

  • Nowy
  • *
  • 7
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #12 dnia: Październik 03, 2009, 08:19:44 pm »
Jesteś moim bogiem. Tego modułu mi właśnie brakowało w prestashopie.
W zasadzie jest on tak niezbędny, że nie rozumiem dlaczego brakuje go oficjalnym wydaniu.

Proponuję, żeby go dodać do polskiej wersji skryptu

*

Offline niezdara

  • Nowy
  • *
  • 1
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #13 dnia: Październik 14, 2009, 08:14:47 pm »
Próbowałem dołączyć ten moduł do swojego sklepu, który właśnie stawiam, niestety zainstalowałem wersję 1.2 i nie działa :(. Czy ktoś ma może ten moduł przerobiony dla wersji 1.2.2 ?

*

Offline przemx

  • Nowy
  • *
  • 13
  • 0
Odp: Moduł "Szukaj po atrybucie"
« Odpowiedź #14 dnia: Grudzień 10, 2009, 11:10:37 pm »
Kurde, mam problem otóż chce zrobić tą wyszukiware z boku, w lewej kolumnie, jednak nie wiem jak zrobić odstępy pomiędzy atrbutami tj

atrybut
przerwa
atrybut
przerwa

www.tanieopony.nazwa.pl