Polskie wsparcie PrestaShop
PrestaShop => Moduły => Wątek zaczęty przez: tarentil w 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:
(http://dervish.wit.edu.pl/~kowalsg0/blocksearchbyattribute01.png)
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.
-
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:
(http://dervish.wit.edu.pl/~kowalsg0/blocksearchbyattribute02.png)
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.
-
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.
-
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.
-
Fajny modulik bardzo przydatny:)
Ideałem byłoby gdyby atrybuty po których szukasz zależały od wybranej kategorii.
-
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.
-
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 (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
-
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ć. :-)
-
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... ;-) )
-
A mógłby ktoś napisać jak przerobić ten sam moduł, żeby szukał po cechach?
-
Czy ktoś mógłby dostosować ten moduł do najnowszej wersji presty?
-
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ł.
-
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
-
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 ?
-
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
-
przemx - zglos sie do mnie na gg - rozwiazemy to
-
Witam
Ja także mam problem z tym modułem po zainstalowaniu i podmienieniu plików oraz dodaniu atrybutów do produktów majać np dwa rozmiary butów 36 wyświetla mi tylko jeden a pokazuje że znaleziono dwa... a także gdy dodam nowy produkt i dam mu atrybuty znajduje go ale nie pokazuje jego obrazka ani nieda sie na niego wejsc a takze dodac do koszyka !! prosze o pilna pomoc nawet zaplace !!!
-
U mnie jest cos nie tak z modulem. Po atrybucie nie dziala, dodatkowo przestala dzialac normalna wyszukiwarka :/
-
Świetny moduł. Dzięki wielkie za stworzenie takiego cacka :)
Mam jednak jedno pytanie: Po instalacji modułu, gdy chce zapisać zmiany edycji produktu (np. po zmianie opisu) pojawia mi się następujący komunikat:
Fatal error: Call to undefined method Search::indexation() in /srv/home/j92628jo/public_html/sklep-bewell/admin1/tabs/AdminProducts.php on line 722
Czy ktoś może mi pomóc z tym błędem?
Pozdrawiam
-
Czy ktoś mógłby dostosować ten moduł do najnowszej wersji presty?
Dołączam się do prośby. Jeśli ktoś się zna, to prosiłbym o pomoc.
-
1.2?
ogolnie działa ten moduł jak należy bo feature :D
-
W 1.2.3 nie chce działać poprawnie. Podaje ilosc wyszukanych przedmiotów ale ich nie pokazuje :( Macie jakies rady?
-
lof czy mógłbyś szerzej rozwinąć swoją wypowiedź... dzięki
-
Sorki, pomyłka w cytowaniu.
Chodziło mi o Szukanie po cechach. (Search by Features)
Dokładnie to w wersji 1.1.0.5.
Wie ktoś jak to przerobić?
-
Dołączam się do pytania.
Po instalacji modułu, gdy chce zapisać zmiany edycji produktu (np. po zmianie opisu) pojawia mi się następujący komunikat:
Fatal error: Call to undefined method Search::indexation() in /srv/home/j92628jo/public_html/sklep-bewell/admin1/tabs/AdminProducts.php on line 722
Błąd prawdopodobnie tkwi w pliku classes/Search.php
Dodam iż moduł załączony poniżej nie powoduje błędu opisanego powyżej, jednak działa w niewłaściwy sposób - wynik wyszukiwania jest w języku angielskim (pomimo domyślnie - polskiego w panelu administracyjnym).
Bardzo proszę o pomoc w tej sprawie.
Version 1.2.2.0
-
Witam
Mam takie pytanie gdzie muszę zmienić by wynik wyszukiwania był według ceny od najniższej bo sortowanie to co jest jak zmienię na według ceny to nic się nie dzieje. Będę wdzięczny za pomoc.
-
Jest jakaś szansa na przepisanie tego modułu dla presty 1.4.x ?
W zasadzie wystarczy mi szukanie po jednym atrybucie (np. po kolorze).
-
?
-
Przyłączam sie do pytania: czy jest wersja pod 1.4?
-
Witam, napisałem dziś moduł szukania po cechach.
Demo na http://kopacki.net/pre/ (http://kopacki.net/pre/)
Tylko jeszcze muszę pomyśleć, jak uwzględniać kombinacje cech, bo w tej chwili wyszukuje produkty, które mając co najmniej jedną z podanych cech.
Co Państwo sądzą o tym module?
-
Cześć ,
czy ktoś może wrzucić ten moduł na forum , ponieważ po ściągnieciu jest błąd archiwum.
A chciałbym zobaczyć jak on działa :)
Dziękuję !
Pozdro!
-
Czy ta wersja szukajki po atrybutach jest dostępna pod preste 1.4?