Jeśli te pola nie mają robić nic innego, jak po prostu wyświetlać się na stronie to wszystko można wstawić w krótki czy pełny opis.. Jeśli jednak zależy Ci, żeby fizycznie były to inne pola w bazie danych to przejrzyj ten artykuł: http://opensolution.org/Quick.Cart/forum/?p=readTopic&nr=5320 Jest tu wytłumaczony sposób dodawania pól do bazy danych (w tym przypadku akurat do bazy danych zamówień, ale robi się to analogicznie).
Ja chcę wpisywać cenę netto (lub np. wagę) w panelu admina w liście produktów, opis krótki czy pełny jest dość problematyczny. Z tego opisu po angielsku dotyczącego dodawania produktów do bazy niestety niewiele wiem, dodatkowo dotyczy on pola-listy wyboru. Zacząłem to "męczyć" i wygląda to w tej chwili tak:
następnie poniżej: <td class="price"><a href="?p=$p&sSort=price">$lang[Price] brutto</a> [$config[currency_symbol]]</td>
wklejam: <td class="price"><a href="?p=$p&sSort=price">$lang[Price] netto</a> [$config[currency_symbol]]</td> Zmienam jeszcze w dwóch miejscach <td colspan="6"> na <td colspan="7"> Tyle w pliku templates/product.tpl. Od teraz w panelu admina mam dodatkową kolumnę z polem do wpisania ceny netto.
eby stworzyć pole Pricenetto w bazie to w pliku db/_products.def.php zmieniam: <?php $aFieldsNames = Array( 'iProduct' => 0, 'sName' => 1, 'sNameUrl' => 2, 'mPrice' => 3, 'iStatus' => 4, 'iPosition' => 5, 'sAvailable' => 6,
Dalej już nie wiem i potzrebuję pomocy, czyli jak zrobić, aby się to pięknie zapisało i wyświetlało w panelu admina, a dodatkowo w opisie produktu w sklepie?
No, daleko zaszedłeś ;-) ale masz babole. Dlaczego mieszasz/zmieniasz sPricenetto na iPricenetto i na mPricenetto? w .tpl, value bierze dane z pola $aData[mPricenetto], ale w definicji bazy masz sPricenetto, a w sorcie iPricenetto. W ten sposób, to oni się nie dogadają. Jak już się zdecydujesz na jedną wartość (odradzam iPricenetto, bo będzie obcinać część ceny po przecinku, odradzam też sPricenetto, bo 's' na początku sugeruje 'string', weź albo 'f' - float, albo 'm' - mixed. Stawianie tych literek po $ bardzo ułatwie życie podczas przyglądania się zmiennym. Wtedy wiesz co w sobie mają), to teraz przyjrzyj się w core/products-admin.php funkcji saveProducts i zobacz co ona robi np. z $aForm['aPrices'][$iProduct] i podobnie postąp z 'aPricenetto'
:( No niestety coś nie działa, jak coś wpiszę w pole netto - to po kliku na "zapisz" znika, a w bazie na samym początku w pliku db/_products.def wrzuca mi całe mnóstwo znaczków $. Coś chyba jest jednak nie tak z tym zdefiniowaniem w bazie. W tym opisie po angielsku dotyczącym dodawania pola do bazy jest napisane takie coś: After this changes in file db/orders.php add to every single record character "$". Tego nigdzie nie zrobiłem, jak mam dodawać do rekordów tego $?
Bo widzisz, ilość '$' w bazie (w każdej linijce!!!) musi się zgadzać z ilością pól w danym plku .def. Jeśli się nie zgadza: rozkaszani się. Recepta: albo ręcznie z mozołem liczyć '$' i poprawiać, albo skasować wszystkie produkty i zacząć zapełniać bazę od nowa.
Ojojoj, dlaczego kombinujecie nowe wynalazki na 'żywym organizmie'? Przecież to się robi na jakiejś względnie mało zapełnionej produktami kopii aż bezbłędnie zadziała. A potem przenosi się zmiany do głównego skryptu.
Jeśli chodzi o dodawanie do każdego wiersza znaku $ (lub jego wielokrotności) to doskonale sprawdza się do tego aplikacja Notepad++ i funkcja Zamień. Należy włączyć opcję rozszerzonego przeszukiwania i utworzyć regułę: Szukany tekst: \n Zamień na: $\n
Oczywiście jeśli dodane zostało więcej pól i ma być dodanych więcej znaków $ to w drugim polu trzeba umieścić ich odpowiednio więcej.
Nic na "żywym organizmie" nie robię :) Ryzykowna zabawa. Mam testowy sklep na lokalnym serwerze. To "dużo roboty" tyczyło się docelowych zmian na właściwej bazie, które mnie pewnie nie miną, ale dzięki radzie Makarona ujrzałem światełko w tunelu :) Jak podziałam to dam znać co i jak.
Podziałałem :) W pliku core/products-admin.php zamieniłem jeszcze (poprzednio to przegapiłem): if( $iStatus != $aData['iStatus'] ){ $aChange[$iProduct]['iStatus'] = $iStatus; } na taki wpis: if( $aForm['aPricesnetto'][$iProduct] != $aData['mPricenetto'] ){ $aChange[$iProduct]['mPricenetto'] = $aForm['aPricesnetto'][$iProduct]; }
Dodałem na końcach wierszy $ i już zapisywanie poprawnie działa. Baza jest ok.
Teraz w pliku templates/pages_default.tpl poniżej wpisu: <!-- BEGIN PRODUCTS_PRICE --> wstawiam: <strong>$aData[sPricenetto]</strong><span>$config[currency_symbol]</span> Pozostaje to za pomocą css dopasować tak, aby to jakoś wyglądało na stronie.
Jeszcze jest kwestia dodania pola do wprowadzania ceny netto w oknie produktu w panelu admina. To zrobiłem w pliku templates/admin/products.tpl
Teraz w końcu działa wpisanie ceny i wyświetlanie jej w opisie. Tutaj trzeba niestety to ręcznie wyliczać i wpisywać, a jak wyliczyć wartość mPricenetto, aby samo wyliczyło z wpisanej wartości mPrice i wrzuciło na stronę. Gdzie można robić takie działania?
Wrzuć w config/lang_xx.php $config['fVAT']=0.23; W funkcjach masz dostęp do tego przez: $GLOBALS['config']['fVAT'] A z ceny brutto cenę netto obliczasz: netto=brutto/(1+$GLOBALS['config']['fVAT']) Tę wyliczankę wkładasz (po podstawieniu odpowiednich $aData['mPricenetto'] i ['mPrice']) w funkcje, które to wyświetlają (listProducts..., throwProduct) Wtedy w ogóle nie potrzebujesz dodatkowego pola w bazie na takie coś. To się wylicza samo 'onTheFly'.
Makaron usuń tylko mój wpis jeśli masz taką możliwość. Jeśli natomiast chcesz usunąć cały temat... mhm... może komuś się to jeszcze kiedyś przyda... ?
Jeśli usuniesz mój wpis opiszę swój problem raz jeszcze opiszę co i jak zrobiłem (być może komuś innemu też się to przyda) i poproszę o pomoc raz jeszcze :) (tyle że tym razem postaram się do tego bardziej przyłożyć)
Jeśli musisz usunąć cały temat... założę go na nowo jak sugerowałeś.
Nie mówiłem wcale o usunięciu całego tematu, cały czas była mowa o konkretnym poście. Staraj się nie używać tekstów przeklejonych z jakiś stron, bo podejrzewam, że były to doklejone kody jakiegoś edytora html.