Witam.
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();
if ( isset($atts['product']) && isset($inventory[$atts['product']]) ) {
$currencySymbol = get_option('quickshop_symbol');
$decimalPoint = get_option('quickshop_decimal');
$thousandsSeperator = get_option('quickshop_thousands');
$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>
';
if ( !empty($inventory[$atts['product']]['properties']) ) {
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()
{
$products = explode("\n", trim(get_option
('quickshop_products'))); $defaultShipping = get_option('quickshop_shipping');
foreach ( $products as $i => $d )
{
list
($name, $nazwaformularza, $opis, $dataDodania, $wersjaForm, $price, $shipping, $properties) = array_map('trim', explode('|', $d));
if ( $properties )
{
list
($property_name, $properties) = array_map('trim', explode(':', $properties));
);
}
else
{
}
$inventory[$nazwa] = array( 'nazwaformularza' => $nazwaformularza,
'opis' => $opis,
'dataDodania' => $dataDodania,
'wersjaForm' => $wersjaForm,
'price' => $price,
'shipping' => $shipping ? $shipping : $defaultShipping,
'properties' => $properties,
);
}
return $inventory;
}