Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i Allegto błąd w kodzie
Forum PHP.pl > Forum > PHP > Object-oriented programming
Capitanjack
Witam wszystkich na forum smile.gif

Głowię się z tym tematem już dobre 2 godziny i nie mam pomysłu co robić dalej, mianowicie:

Modyfikuję wtyczkę pod automatyczne wystawianie produktów ze sklepu internetowego(wordpress) do serwisu allegro.
Utknąłem w miejscu kiedy skrypt php ma skopiować dodatkowy opis produktu z bazy danych do opisu aukcji.

  1. //pobieranie podstawowych danych o produkcie
  2. $dodatkowa_zmienna1 = $prod['post_content'];
  3. $dodatkowa_zmienna2 = $meta['yikes_woo_products_tabs'];
  4. $p['description'] = $dodatkowa_zmienna1.'<hr>'.$dodatkowa_zmienna2;


Wpis z bazy danych dla $dodatkowa_zmienna2 wygląda następująco:

  1. (12612, 2018, 'yikes_woo_products_tabs', 'a:1:{i:0;a:3:{s:5:"title";s:10:"Treść";s:2:"id";s:14:"tab-treść";s:7:"content";s:962:"dodatkowy opis produktu.\r\n\r\n&nbsp;";}}'),


Chcę skopiować tylko "dodatkowy opis produktu". $dodatkowa_zmienna1 wyświetla się już na aukcji poprawnie.

Problem polega na tym, że $dodatkowa_zmienna2 wyświetla mi się na aukcji tak: 'a:1:{i:0;a:3:{s:5:"title";s:10:"Treść";s:2:"id";s:14:"tab-treść";s:7:"content";s:962:"dodatkowy opis produktu.\r\n\r\n&nbsp;";}}

Próbowałem zamienić

  1. $dodatkowa_zmienna2 = $meta['yikes_woo_products_tabs'];


na

  1. $dodatkowa_zmienna2 = $prod['content'];


ale bez skutku.

Jest mi ktoś w stanie pomóc i wytłumaczyć co robię źle? smile.gif

Może się komuś ta informacja przyda:

Kod pochodzi z tego samego pliku php

  1. $sql = "SELECT p.* FROM ${dbp}posts p
  2. WHERE p.ID IN (".(implode(",", $request['products_id'])).")";
  3.  
  4. $result = mysql_query($sql);
  5. while($prod = mysql_fetch_assoc($result))
  6. {
  7. $meta_all = mysql_query("SELECT meta_key, meta_value FROM ${dbp}postmeta pm2 WHERE post_id = '".$prod['ID']."'");
  8. $meta = array();
  9. while($prod_meta = mysql_fetch_assoc($meta_all))
  10. {
  11. $meta[$prod_meta['meta_key']] = $prod_meta['meta_value'];
  12. }
viking
Dane które posiadasz to zserializowana tablica. unserialize() i dopiero to przekazuj do Allegro.
Capitanjack
W takim razie dodałem coś takiego:

  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);


Niestety zamiast opisu wyświetla się tylko "Array"

Całość kodu:

  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);
  2. $p = array();
  3. $p['name'] = $prod['post_title'];
  4. $dodatkowa_zmienna1 = $prod['post_content'];
  5. $dodatkowa_zmienna2 = $meta['yikes_woo_products_tabs'];
  6. $p['description'] = $dodatkowa_zmienna1.'<hr>'.$dodatkowa_zmienna2;
kapslokk
Wyświetla się Array bo w zmiennej $meta['yikes_woo_products_tabs'] po unserialize masz tablicę. Zrób sobie var_dump($meta['yikes_woo_products_tabs']) i wszystko chyb a będzie jasne smile.gif
Capitanjack
Grzebie i grzebie w tym kodzie, ale nie za bardzo rozumiem na jakiej zasadzie mam sobie "zrobić" var_dump($meta['yikes_woo_products_tabs']) ? smile.gif

Próbowałem to gdzieś dodać, ale cały czas wyskakuje mi błąd.
kapslokk
  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);
  2. var_dump($meta['yikes_woo_products_tabs']);exit;


Sprawdzasz sobie, które pole tej tablicy chcesz przypisać do $dodatkowa_zmienna2 i później robisz:

  1. $dodatkowa_zmienna2 = $meta['yikes_woo_products_tabs']['>>>tutaj wstawiasz index<<<'];
Capitanjack
kapslokk, wybacz mi moją niewiedzę, ale nie mam na codzień styczności z PHP i dopiero w nim raczkuję wink.gif

W jaki sposób sprawdzić/przypisać ten index? Przeszukałem Google, ale niestety na próżno.
kapslokk
var_dump wyświetli Ci zawartość tablicy np:
Kod
array (size=2)
  'x' => string 'y' (length=1)
  'y' => string 'z' (length=1)


U siebie mam włączonego xdebuga, u Ciebie może być troszkę inaczej, ale ogólnie bardzo podobnie.
W każdym razie jeżeli chcesz aby w $dodatkowa_zmienna2 znalazła się wartość y to robisz $meta['yikes_woo_products_tabs']['x'], jeżeli z to $meta['yikes_woo_products_tabs']['y'] i analogicznie...

PS. wybaczam biggrin.gif
Capitanjack
I właśnie z wyświetleniem var_dump jest problem, bo całość działa na zasadzie:

plik.php pobierający inforamcje o produktach ze sklepu -> osobna platforma integrująca sklep z allegro -> aukcja na allegro

Gdy ma mi wyświetlić var_dump nie chcę mnie przepuścić dalej do wystawienia aukcji "Wystąpił błąd przy pobieraniu produktów z bazy danych sklepu" (komunikat z platformy zarządzania)

Aktualnie kod wygląda tak:

  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);
  2. var_dump($meta['yikes_woo_products_tabs']);exit;
  3. $p = array();
  4. $p['name'] = $prod['post_title'];
  5. $p['model'] = $meta['_sku'];
  6. $dodatkowa_zmienna1 = $prod['post_content'];
  7. $dodatkowa_zmienna2 = $meta['yikes_woo_products_tabs'];
  8. $p['description'] = $dodatkowa_zmienna1.'<hr>'.$dodatkowa_zmienna2;
  9. $p['weight'] = $meta['_weight'];


Gdy usunę
  1. var_dump($meta['yikes_woo_products_tabs']);exit;
aukcja wyświetla się normalnie tylko zamiast $dodatkowa_zmienna2 wyświetla się Array

Kiedy usunę
  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);
  2. var_dump($meta['yikes_woo_products_tabs']);exit;
aukcja wyświetla się tak jak ma, jednak $dodatkowa_zmienna 2 jest w postaci zserializowanej.

Jakieś pomysły co robić?

Dzięki za cierpliwość biggrin.gif
IProSoft
Jeśli chcesz sprawdzić co zawiera ta tablica to dodaj:
  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);
  2. error_log( serialize($meta['yikes_woo_products_tabs'], 3, 'log.log' )

Choć jesli widzisz postać zserializowaną to powinineś to wiedzieć.

Wybierz klucz jaki chcesz wyświetlać i wpisz np
  1. $meta['yikes_woo_products_tabs']

Innym wyjściem jest:
  1. $meta['yikes_woo_products_tabs'] = unserialize($meta['yikes_woo_products_tabs']);
  2. $dodatkowa_zmienna2 = implode( '<>br /', $meta['yikes_woo_products_tabs'] );

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.