Wyświetlanie Produktów od najnowszych

marcincook

Avatar: marcincook

2010-09-10 12:32

Witam

Jak zrobić aby produkty na stronie wyświetlały się w kolejności dodania do sklepu
Ale od najnowszych do najstarszych
Chciałbym aby lista zaczynała się od produktów ostatnio dodanych
bo numeracja produktów jeśli są przydzielone do różnych kategorii mija się z celem

Proszę o pomoc

» Quick.Cart v3.x

Makaron

Avatar: Makaron

2010-09-10 15:48

Edytuj plik db/pl_products.def.php zmień kolejność elementów w tablicy $aFieldsSort tak żeby pierwsze pole to było iProduct. Zapisz wszystkie produkty jeszcze raz i powinno śmigać.

Mak-Web.pl - Modyfikacje skryptów Q.Cart i Q.Cms

marcincook

Avatar: marcincook

2010-09-10 21:43

Znaczy - żeby była jasność
Każdy produkt klikam "zapisz" w zapleczu sklepu ???

Kurka szkoda że nie zadałem wcześniej tego pytania na forum :)

marcincook

Avatar: marcincook

2010-09-11 07:52

Nie zadziałało :(

Po podmianie pliku bazy z definicją

$aFieldsNames = Array( 'iProduct' => 0, 'sName' => 1, 'fPrice' => 2, 'iStatus' => 3, 'iPosition' => 4, 'sAvailable' => 5, 'sDescriptionShort' => 6 );
$aFieldsSort = Array( 'iProduct', 'iPosition', 'sName', 'sAvailable', 'fPrice', 'sDescriptionShort', 'iStatus' );

function pl_products( $aExp ){
return Array( 'iProduct' => $aExp[0], 'sName' => $aExp[1], 'fPrice' => $aExp[2], 'iStatus' => $aExp[3], 'iPosition' => $aExp[4], 'sAvailable' => $aExp[5], 'sDescriptionShort' => $aExp[6] );
}

Zapisałem produkty w kategorii testowej:
http://personaldesign.pl/?pl_kategoria-testowa,31

boboo

Avatar: boboo

2010-09-12 23:04

Bo sortowanie jest "w górę". Czyli lista zaczyna się od 1, 2, ... 4.
A 4 dodałeś jako ostatni i jest też na końcu.
Musisz zrobić "kuku" i przeinaczyć kod tak, aby czwarty produkt (jego "iProduct") miał niższą wartość od produktu pierwszego.
Poszukaj jakie masz ograniczenie na liczbę produktów (999 ?) i zrób tak aby iProduct w arrayu FieldsSort miał wartość "999 - iProduct".
Wtedy produkt 4 będzie miał mniejszą wartość (995) niż produkt 1 (998) i będzie wyświetlany jako pierwszy na liście.

http://skupienie.kimla.de/?software-quickcart,106

marcincook

Avatar: marcincook

2010-09-13 13:17

boboo nie bardzo kumam

Według porady Makarona wystarczyło w tablicy aFieldsSort zamienić kolejność żeby sortowanie było w kolejności od najnowszego do najstarszego

Też wydaje mi się to nielogiczne bo skoro sortujemy po iProdukt to chyba będzie się sortować alfabetycznie lub w kolejności dodania czyli efekt ten sam co w orginalnym Quicku

Wiem że mogę sobie przypisać iPosition do każdego produktu ale to nie rozwiązuje problemu lub komplikuje obsługę do tego stopnia że dodatek jest w zasadzie nie tylko bezużyteczny ale też można nim sobie nieźle w głowie namieszać - sprubój to wytłumaczyć komuś w biurze kto będzie sklep już w efekcie obsługiwał

O ile dla stron(kategorii) to świetne rozwiązanie bo kategorie nie są przypisane do różnych kategorii - o tyle dla produktu to bezużyteczne - chyba że jedna kategoria jedne produkty

Weźmy dla przykładu

kategoria
WYPIEKI:
-----DROBNE WYPIEKI:
-----OZDOBNE WYPIEKI
-----PIECZYWO NA ZAMÓWIENIE:

kategoria
SŁODKIE WYPIEKI:
-----WYPIEKI PLECIONE OZDOBNE
-----WYPIEKI JEDNOPORCJOWE(do ręki)

i dajmy na to że produktami są:
DROŻDZÓWKA
CHAŁKA PLECIONA
ROGAL PÓŁ METROWY DEKORACYJNY
CHLEB
BUŁKA

etc


Produkty są w bardzo wielu kategoriach
http://salongejsza.pl/?pielegnacja-stop,26
tu zrobiliśmy sortowanie na podstawie iPosition przypisując każdemu produktowi numerek, nawet musiałem powiększyć z 999 na 9999 w ilości wpisanych etc


Wszystko jest jak trzeba - w/g założeń - do momentu jak nie zobaczył tego administrator sklepu docelowy. Zadał proste pytanie
A czy nie może być tak po prostu że najnowsze produkty są pierwsze na liście?

Ten CMS - jest bardzo prosty w obsłudze dla administratowa sklepu i to jest jego NAJWIĘKSZA zaleta, dlatego też zdecydowałem się dwa lata temu budować na nim strony i sklepy,

a i przy każdej okazji jak klienta na to stać staram się kupować płatne wersje bo wiem że żeby narzędzie się rozwijało to OpenSolution musi po prostu zarabiać.

boboo - ja nie bardzo kumam jakie "kuku" mam zrobić?
myślę jednak że problem nie leży w tablicy tylko w funkcji która ją odczytuje
tak by to było w AS

boboo
Może zróbmy tak - ja Ci zapłacę za napisanie takiej poprawki do tego narzędzia ale ty zgodzisz się żeby opublikować to na forum żeby to było niejako publiczne dla wszystkich.
Bo ten skrypt sklepu powinien się rozwijać

Albo jak wolisz ty napiszesz kod
a ja zrobię darmową skórkę na Quicka z takimi gadżetami jak tu ludzie potrzebują i zadają o nie pytania

Co ty na to?

boboo

Avatar: boboo

2010-09-14 05:48

Jest w QC3.6 taka śliczna funkcja (core/products.php) o nazwie:
function sortProducts() z dwoma parametrami:
1. Array do posortowania;
2. String z kluczem.
Jeśli się jej przyjrzymy, to widać, że w przypadku nieprzekazania klucza, sortuje ona wedłud ID produktu (i o to chodzi).
Czyli mamy już:
sortProducts( $aProducts, null );
Dodatkowo widać w tej funkcji, że raz używany jest:
$sFunctionSort = 'sort';
a raz:
$sFunctionSort = 'rsort';
Ten 'rsort' to nic innego, jak reverse sort.
W przypadku QC < 3.6 kopiujemy sobie tę funkcję do core/products.php i wywołujemy ją w funkcji (w tym samym pliku)
function listProducts()
wpisując nad linijką:
$iCount = count( $aProducts );
linijkę:
$aProducts = $this->sortProducts( $aProducts, null );

I to cała filozofia. Jako, że jestem nowicjuszem w php, nie wiedziałem (do dziś) o funkcji RSORT i chciałem liczyć do tyłu od "iMaxProducts". A tu prask, gotowy prezencik.

http://skupienie.kimla.de/?software-quickcart,106

marcincook

Avatar: marcincook

2010-09-14 12:10

Chyba jestem za głupi żeby to uruchomić.

Czy mogę komuś zapłacić za gotowe rozwiązanie ?

marcincook

Avatar: marcincook

2010-09-14 12:13

/**
* Sort products
* @return array
* @param array $aProducts
* @param string $sSort
*/
function sortProducts( $aProducts, $sSort ){
$iCount = count( $aProducts );
$sFunctionSort = 'sort';

if( $sSort == 'status' ){
$sKey = 'iStatus';
}
elseif( $sSort == 'price' ){
$sKey = 'fPrice';
}
else{
$sFunctionSort = 'rsort';
$sKey = 'iProduct';
}

for( $i = 0; $i < $iCount; $i++ ){
$mValue = $this->aProducts[$aProducts[$i]][$sKey];
$aSort[$i][0] = $mValue;
$aSort[$i][1] = $aProducts[$i];
} // end for

$sFunctionSort( $aSort );

for( $i = 0; $i < $iCount; $i++ ){
$aProducts[$i] = $aSort[$i][1];
} // end for
return $aProducts;
} // end function sortProducts


Czy zmieniając w pętli - na odwrót najpierw rsort potem sort powinienem otrzymać efekt pożądany?

boboo - bo jeśli to miałeś na myśli to nie dzieje się nic

marcincook

Avatar: marcincook

2010-09-14 12:26

Fatal error: Call to undefined method Products::throwLastProduct() in /home/personal/domains/personaldesign.pl/public_html/templates/themes/default.php on line 4

boboo

Avatar: boboo

2010-09-14 13:15

Zostaw tę funkcję, tak jak jest w oryginale.
Ona już jest ustawiona aby array z produktami był sortowany odwrotnie (rsort)

Przed chwilą sprawdziłem na QC3.4
Działa. Wyświetla produkty na stronie (klienta) w kolejności od najwyższego ID-produktu.


Jeszcze raz:
wklej tę funkcję z QC3.6 (bez żadnych zmian!!!) na końcu pliku products.php w katalogu /core/
Na końcu pliku: mam na myśli przed!!! tym konstruktem:
}
?>

Następnie w funkcji (dalej w tym samym pliku ale wyżej)
function listProducts

znajdź linijkę:
$iCount = count( $aProducts );
i NAD nią wklej:
$aProducts = $this->sortProducts( $aProducts, null );

I to wszystko. W QC3.4 działa i na stronkach produkty są od najnowszego (z najwyższym Id).

http://skupienie.kimla.de/?software-quickcart,106

boboo

Avatar: boboo

2010-09-14 13:22

Ewentualnie "odmień" zmiany w db/pl_products.def.php proponowane przez Makarona. Ja usiebie sprawdzałem to bez tych zmian.

http://skupienie.kimla.de/?software-quickcart,106

Do góry
o nas | kontakt