Modyfikuję sobie pewną wtyczkę do Wordpressa (prosty koszyk) jednak biegły w PHP nie jestem. Siedzę już dłuższy czas i nie mogę rozwiązać problemu.
W bazie danych twórca wtyczki zapisuje dane, niestety zapisuje je w tabeli "Options" co nie jest mile widziane i poprawne, jest to miejsce przeznaczone na ustawienia wtyczki a nie na trzymanie większej ilości dancyh. Docelowo chciałbym przerobić wtyczkę na zapis i odczyt z osobnej tabeli, ale na razie nie te progi...
W czym problem. Twórca zrobił w sumie nieprzemyślaną rzecz i poprzez shortcode dodaje produkty do strony Wordpressa:
[quickshop product="1"]
[quickshop product="2"]
[quickshop product="3"]
mi udało się uzyskać by nazwą produktu dla shortcode była pierwsza pozycja tablicy oddzielona znakiem | czyli tzw. pseudo ID pisane z palca przy dodawaniu produktu. Wcześniej były tam nazwy produktów jednak występował konflikt przy dwóch takich samych nazwach. I o ile wiem jak zmienić co się ma pokazywać w shortcode tak nie wiem jak wyświetlić tam dwie zmienne czyli na przykład indexy tablicy i nazwę co niwelowałoby konflikt.
Problem w tym, że gdy dwa produkty mają tą samą nazwę, to przestanie działać. Wpadłem na pomysł by dodać do tablicy jeszcze jedno pole z pseudo ID, na razie ręcznie, lub po prostu dodanie indexów tablicy czego też nie wiem jak zrobić.
Usiłowałem połączyć dwie zmienne by shortcode dodawał zarówno index lub pseudo id wraz z nazwą produktu.
Problem siedzi w funkcji function get_inventory().
Ewentualnie czy da się zastąpić funkcję list() czymś innym, bardziej elastycznym?
Zmiana zmiennej $nazwa w "$inventory[$nazwa] = array(" na inna dostępną w list() spowoduje wyświetlanie tego co reprezentuje zmienna w list().
Proszę o pomoc z tym bo już zaczynam mieć myśli samobójcze... :-|
Zawartość tablicy wygląda tak jak poniżej przy czym nazwa produktu może być taka sama:
0 => '1 | produkt1 | (krótki opis) | 10 gru 2009 | 14 | 4.50 ', 1 => '2 | produkt2 | (krótki opis) | 10 gru 2009 | 14 | 4.50', 2 => '3 | produkt3 | (krótki opis) | 10 gru 2009 | 16 | 4.50', 3 => '4 | produkt4 | (krótki opis) | 10 gru 2009 | 16 | 4.50', 4 => '5 | produkt5 | (krótki opis) | 10 gru 2009 | 16 | 4.50' );
A tak wygląda funkcja odpowiedzialna za shorcode jak i za pobieranie danych z tablicy.
function shortcode($atts, $content = '') { if ( !get_option('quickshop_logged') || is_user_logged_in() ) { $inventory = $this->get_inventory(); { $currencySymbol = get_option('quickshop_symbol'); $decimalPoint = get_option('quickshop_decimal'); $thousandsSeperator = get_option('quickshop_thousands'); $product_id = trim(preg_replace('/__+/', '_', preg_replace('/[^a-z0-9_]/s', '_', strtolower($atts['product']))), '_'); $nazwaform = $inventory[$atts['product']]['nazwaformularza']; $opis = $inventory[$atts['product']]['opis']; $dataDodania = $inventory[$atts['product']]['dataDodania']; $wersjaForm = $inventory[$atts['product']]['wersjaForm']; $price = $this->output_currency($inventory[$atts['product']]['price'], $currencySymbol, $decimalPoint, $thousandsSeperator); $shipping = $this->output_currency($inventory[$atts['product']]['shipping'], $currencySymbol, $decimalPoint, $thousandsSeperator); $form = ' <form id="form-' . $product_id . '" class="quickshop" method="post" action=""> <div class="file_contener_kupno"> <div class="file_contener_kupno"><div class="file_icon"><img src="http://pitlant.pl/wp-content/uploads/2009/02/excel.png" alt="excel" width="16" height="16" /></div><div class="file_name">' . $nazwaform . '<span>'. $opis .'</span></div><div class="data_dodania2">' . $dataDodania . '</div><div class="wersja_form">' . $wersjaForm . '</div><div class="kup_formularz"><button type="submit">' . $this->lang['add to cart'] . '</button></div></div> </div> '; { foreach ( $inventory[$atts['product']]['properties'] as $property_name => $properties ) { $form .= ' <dl> <dt>' . $property_name . '</dt> <dd> <select name="product"> '; foreach ( $properties as $property ) { $form .= ' <option value="' . $atts['product'] . ' (' . $property . ')">' . $property . '</option> '; } $form .= ' </select> </dd> </dl> '; } } else { $form .= ' <input type="hidden" name="product" value="' . $atts['product'] . '"/> '; } $form .= ' <dl> <dd>' . $price . '</dd> </dl> <dl> <dt>' . $this->lang['shipping'] . ':</dt> <dd>' . $shipping . '</dd> </dl> <dl> <dt>' . $this->lang['quantity'] . ':</dt> <dd> <input type="text" name="amount" value="1" size="5"/> </dd> </dl> <dl> <dt></dt> <dd> <input type="hidden" name="nazwaformularza" value="' . $inventory[$atts['product']]['nazwaformularza'] . '"/> <input type="hidden" name="opis" value="' . $inventory[$atts['product']]['opis'] . '"/> <input type="hidden" name="wersjaForm" value="' . $inventory[$atts['product']]['wersjaForm'] . '"/> <input type="hidden" name="price" value="' . $inventory[$atts['product']]['price'] . '"/> <input type="hidden" name="shipping" value="' . $inventory[$atts['product']]['shipping'] . '"/> <input type="hidden" name="qslink" value="' . $this->get_url() . '"/> <input type="hidden" name="addcart" value="1"/> </dd> </dl> </form> '; return $form; } } } function get_inventory() { $defaultShipping = get_option('quickshop_shipping'); foreach ( $products as $i => $d ) { if ( $properties ) { ); } else { } 'nazwaformularza' => $nazwaformularza, 'opis' => $opis, 'dataDodania' => $dataDodania, 'wersjaForm' => $wersjaForm, 'price' => $price, 'shipping' => $shipping ? $shipping : $defaultShipping, 'properties' => $properties, ); } return $inventory; }