Witam, Potrzebuję powiększyć db o dwa nowe pola zawierające informację o 1) początkowym roku produktu 2) końcowym roku produktu.
Koncepcję mam taką, że na głównej stronie pod menu4 mam dwa pola tekstowe z przyciskiem, w których określa się przedział lat min i max. Przycisk powoduje wyświetlenie produktów spełniających kryteria min&max zawarte w bazie w nowych polach.
Oto co zmodyfikowałem i jake mam kłopoty:
Powiększyłem DB_PRODUCTS_EXT o dwa dodatkowe pola.
products.php [przeróbka funkcji listProducts tak, żeby w chwili gdy $GLOBALS['sPhrase'] jest puste był sprawdzany warunek na niepuste pola dDList1 i dDList2. Jeżeli wszystkie są puste, to wykonuj dalej funkcję niezmienioną, a jeżeli dwa ostatnie pola są niepuste, to wykonaj nową funkcję. Próbuję to robić jako zmienną $GLOBAL, nie wiem czy dobrze. Warunek może też nienajszczęśliwiej napisany, ale to narazie nie jest największe moje zmartwienie.] if( !isset( $aProducts ) ){ if( isset( $GLOBALS['sPhrase'] ) && (!empty( $GLOBALS['sPhrase'] ) ) ){ $aProducts = $this->generateProductsSearchListArray( $GLOBALS['sPhrase'] ); $sUrlExt .= '&sPhrase='.$GLOBALS['sPhrase']; } else{ if ((empty($GLOBALS['sPhrase'])) && (!empty($GLOBALS['dDList1'])) && (!empty($GLOBALS['dDList2']))){ $aProducts = $this->mmgenerateProductsSearchListArray( $GLOBALS['dDList1'], $GLOBALS['dDList2'] ); } else{ ....[tu dalej funkcja oryginalna bez zmian] } } }
[jest nowa funkcja mmgenerateProductsSearchListArray, która przekazuje dwie zmienne ?globalne? dDList1 i dDList2]
if( isset( $aReturn ) ) return $aReturn; } // end if } // end if } // end function mmgenerateProductsSearchListArray
A teraz z czym mam problem: - Undefined index: dDList1 i dDList2 w przerobionej funkcji listProducts [jak przekazać dane z nowych pól tekstowych do products.php?] - Undefined offset: 7 i 8 w nowej funkcji mmgenerateProductsSearchListArray [wyświetla ten komunikat błędu na stronie, pomimo że gdy podstawię stałe wartości w miejsce $dDList1 i $dDList2 (np 1995 i 2011) to wyniki na stronie wyświetla prawidłowe. Co źle zrobiłem z deklaracją nowych pól w db? albo raczej czego brakuje?] - po wciśnięciu nowego przycisku na stronie nie są przekazywane dane z formularza (tych dwóch pól tekstowych) do php - po wciśnięciu nowego przycisku z uzupełnionymi polami o daty, strona się przeładowuje i nie są pamiętane wpisane wartości.
Wiem, że trochę to zawiło napisałem, ale siedzę nad tym już kawał czasu i nic mądrego nie przychodzi mi do głowy. Próbowałem z $_POST ale to chyba nie da się tak..
Taka porada, pomocna w szukaniu bugów: Używaj "echo" albo "print_r"podczas bawienia się kodem. Sprawdzaj w ten sposób, czy w tych zmiennych jest w ogóle coś przekazywane echo $dDList1 przy ich przekazywaniu. Poza tym z formularza weźmiesz je "POST"em. ($_POST['dDList1']) ale musisz to zrobić tam, gdzie jest brana sPhrase (index.php). Następnie wrzucić jako $_GET w header i powinno 'zabanglać'.
w zasadzie się udało, ale do połowy. Dziwna sprawa, bo pobiera dane tylko z jednego pola. A to z którego, to zależy od ustawienia kolejności linii w index.php. Takie coś wstawiłem, nie do końca rozumiem tutaj zasadę działania funkcji "header", która mam wrażenie odgrywa tu dość istotną rolę:
i tu w zależności którą linię się da pierwszą to wtedy ta zmienna jest elegancko przetwarzana. Ale jak zrobić żeby obydwie naraz były przetwarzane? Nie wiem jak ten header przygotować dla dwóch zmiennych.
I dzięki temu nasze wyniki wyświetlą się na stronie. No i oczywiście wszędzie wcześniej trzeba wywołać dDList1 i 2 za pomocą $_GET tak jak pisał Boboo.. Wielkie dzięki! szafa gra.
teraz druga część. Czy mógłbym prosić o podpowiedzenie od czego zacząć, żeby w panelu admina, na stronie edycji produktu dodać dwa nowe pola edycyjne, w których będzie można wprowadzić dane. W momencie kliknięcia przycisku "zapisz" wartości z tych dwóch pól będą zapisywane do bazy danych. No i oczywiście w chwili otwarcia strony edycji produktu te wartości będą odczytywane z bazy danych.
Dla odczytu w adminie wystarczy pole (input type=text) o nazwie takiej samej, jak w bazie (name="sStartYear" i sStopYear). Trzeba to włożyć w templates/admin/products.tpl w bloku FORM_MAIN. i/lub w LIST. W liście jednak musisz operować arrayami.
Dla zapisu: Jeśli tylko z poziomu edycji szczegółowej, to zerknij jak jest w funkcji saveProduct a jeśli też z poziomu listy, to: saveProducts
Czyli przyjrzyj się jak są zapisywane inne dane, np. mPrice, czy iPosition. Możesz też ustawić wartości startowe (czyli tworząc nowy produkt, pola będą wypełnione jakimś defaultem). To akurat jest w actions_admin/products.php w bloku "else" $aData[xxx]=null; $aData[yyy]=null; itp.