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:
  1. $a = array(
  2. 0 => '1 | produkt1 | (krótki opis) | 10 gru 2009 | 14 | 4.50 ',
  3. 1 => '2 | produkt2 | (krótki opis) | 10 gru 2009 | 14 | 4.50',
  4. 2 => '3 | produkt3 | (krótki opis) | 10 gru 2009 | 16 | 4.50',
  5. 3 => '4 | produkt4 | (krótki opis) | 10 gru 2009 | 16 | 4.50',
  6. 4 => '5 | produkt5 | (krótki opis) | 10 gru 2009 | 16 | 4.50'
  7. );



A tak wygląda funkcja odpowiedzialna za shorcode jak i za pobieranie danych z tablicy.
  1.  
  2. function shortcode($atts, $content = '')
  3. {
  4. if ( !get_option('quickshop_logged') || is_user_logged_in() )
  5. {
  6. $inventory = $this->get_inventory();
  7.  
  8. if ( isset($atts['product']) && isset($inventory[$atts['product']]) )
  9. {
  10. $currencySymbol = get_option('quickshop_symbol');
  11. $decimalPoint = get_option('quickshop_decimal');
  12. $thousandsSeperator = get_option('quickshop_thousands');
  13.  
  14. $product_id = trim(preg_replace('/__+/', '_', preg_replace('/[^a-z0-9_]/s', '_', strtolower($atts['product']))), '_');
  15. $nazwaform = $inventory[$atts['product']]['nazwaformularza'];
  16. $opis = $inventory[$atts['product']]['opis'];
  17. $dataDodania = $inventory[$atts['product']]['dataDodania'];
  18. $wersjaForm = $inventory[$atts['product']]['wersjaForm'];
  19. $price = $this->output_currency($inventory[$atts['product']]['price'], $currencySymbol, $decimalPoint, $thousandsSeperator);
  20. $shipping = $this->output_currency($inventory[$atts['product']]['shipping'], $currencySymbol, $decimalPoint, $thousandsSeperator);
  21.  
  22.  
  23. $form = '
  24. <form id="form-' . $product_id . '" class="quickshop" method="post" action="">
  25.  
  26.  
  27.  
  28. <div class="file_contener_kupno">
  29. <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>
  30. </div>
  31. ';
  32.  
  33. if ( !empty($inventory[$atts['product']]['properties']) )
  34. {
  35. foreach ( $inventory[$atts['product']]['properties'] as $property_name => $properties )
  36. {
  37. $form .= '
  38. <dl>
  39. <dt>' . $property_name . '</dt>
  40. <dd>
  41. <select name="product">
  42. ';
  43.  
  44. foreach ( $properties as $property )
  45. {
  46. $form .= '
  47. <option value="' . $atts['product'] . ' (' . $property . ')">' . $property . '</option>
  48. ';
  49. }
  50.  
  51. $form .= '
  52. </select>
  53. </dd>
  54. </dl>
  55. ';
  56. }
  57. }
  58. else
  59. {
  60. $form .= '
  61. <input type="hidden" name="product" value="' . $atts['product'] . '"/>
  62. ';
  63. }
  64.  
  65. $form .= '
  66. <dl>
  67.  
  68. <dd>' . $price . '</dd>
  69. </dl>
  70. <dl>
  71. <dt>' . $this->lang['shipping'] . ':</dt>
  72. <dd>' . $shipping . '</dd>
  73. </dl>
  74. <dl>
  75. <dt>' . $this->lang['quantity'] . ':</dt>
  76. <dd>
  77. <input type="text" name="amount" value="1" size="5"/>
  78. </dd>
  79. </dl>
  80. <dl>
  81. <dt></dt>
  82. <dd>
  83. <input type="hidden" name="nazwaformularza" value="' . $inventory[$atts['product']]['nazwaformularza'] . '"/>
  84. <input type="hidden" name="opis" value="' . $inventory[$atts['product']]['opis'] . '"/>
  85. <input type="hidden" name="wersjaForm" value="' . $inventory[$atts['product']]['wersjaForm'] . '"/>
  86. <input type="hidden" name="price" value="' . $inventory[$atts['product']]['price'] . '"/>
  87. <input type="hidden" name="shipping" value="' . $inventory[$atts['product']]['shipping'] . '"/>
  88. <input type="hidden" name="qslink" value="' . $this->get_url() . '"/>
  89. <input type="hidden" name="addcart" value="1"/>
  90. </dd>
  91. </dl>
  92.  
  93. </form>
  94. ';
  95.  
  96. return $form;
  97. }
  98. }
  99. }
  100.  
  101. function get_inventory()
  102. {
  103. $inventory = array();
  104.  
  105. $products = explode("\n", trim(get_option('quickshop_products')));
  106. $defaultShipping = get_option('quickshop_shipping');
  107. foreach ( $products as $i => $d )
  108. {
  109. list($name, $nazwaformularza, $opis, $dataDodania, $wersjaForm, $price, $shipping, $properties) = array_map('trim', explode('|', $d));
  110.  
  111.  
  112. if ( $properties )
  113. {
  114. list($property_name, $properties) = array_map('trim', explode(':', $properties));
  115.  
  116. $properties = array(
  117. $property_name => array_map('trim', explode(',', $properties))
  118. );
  119. }
  120. else
  121. {
  122. $properties = array();
  123. }
  124. $inventory[$nazwa] = array(
  125. 'nazwaformularza' => $nazwaformularza,
  126. 'opis' => $opis,
  127. 'dataDodania' => $dataDodania,
  128. 'wersjaForm' => $wersjaForm,
  129. 'price' => $price,
  130. 'shipping' => $shipping ? $shipping : $defaultShipping,
  131. 'properties' => $properties,
  132. );
  133. }
  134. return $inventory;
  135. }