Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Liu CAs 14:26
 » @GUTEK@ 14:25
 » Sherif 14:25
 » Artaa 14:23
 » Dexter 14:23
 » GULIwer 14:23
 » JE Jacaw 14:19
 » muerte 14:18
 » Wedrowiec 14:18
 » stefan_nu 14:15
 » dulik 14:13
 » bajbusek 14:13
 » krismel 14:11
 » bmiluch 14:10
 » Hitman 14:03
 » Zibi 14:03
 » bieniek 14:02
 » rooter666 14:01
 » Syzyf 14:00
 » petropank 14:00

 Dzisiaj przeczytano
 41141 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2024
A R C H I W A L N A   W I A D O M O Ś Ć
    

[php] pomocy bo się pochlastam, modyfikacja wtyczki WP , DeK 22/09/10 00:33
Mam taką dość minimalistyczną wtyczkę koszyka do wordpressa.
Niestety autor nie wykazuje chęci jej rozwoju tak więc zacząłem w niej grzebać.
Znalazłem wiele błędów jednym z nich jest to, że autor dodaje produkty przez [shortcode] w oparciu o nazwę produktu.

Tylko, że jak wpiszemy tą samą nazwę dla dwóch produktów, to w tym momencie skrypt "staje". Druga rzecz to, że autor pakuje wszystkie dane do tablicy Options wordpressa zamiast stworzyć osobną tabelę, co jest dość niepoprawnym nawykiem.
To też mnie przerasta nie te progi by ją przerobić na odczyt/zapis z osobnej tabeli. Chciałem ją ogólnie ucywilizować ale zachowując ten minimalizm.


Gdyby ktoś zechciał rzucić na tą wtyczkę okiem (podeślę mailem) i pomógł mi to poprawić to będę wdzięczny i zejdę z dachu...

Z PHP nie mam zbytniego pojęcia rozgryzam ten skrypt logiką i szperam po sieci mam już 213 zakładek otwartych w Firefoxie i poziom frustracji tak wielki, że zaraz tryśnie uszami.

Nie ma sensu tutaj wklejać kodu bo jest tego za dużo...
To kto chętny? No kto? :)

  1. Jescze dodam, że chodzi jedynie , DeK 22/09/10 01:15
    o poprawienie kwestii shortcode, chyba, że komuś będzie się chciało bawić też z tabelami.
    Ogólnie to z czym nie mogę sobie poradzić dla kogoś siedzącego w PHP, funkcjach itd. powinno być raczej banałem. Wtyczka dość prosta.

  2. może po prostu należy zapewnić to, by nazwa produktu była unikalna? , bwana 22/09/10 10:04
    dodać do niej na końcu, w nawiasie jakiś unique id (byle nie klucz główny) i sprawę masz załatwioną.

    "you don't need your smile when I cut
    your throat"

  3. Grzebanie w czyimś kodzie jest zazwyczaj upierdliwe jak , Mcmumin 22/09/10 11:12
    hemoroidy... Szczególnie w przypadku WP i jego wtyczek, które napisane są... Bardzo nieszczególnie. Może jestem zboczony, ale dobra aplikacja bazodanowa w PHP powinna zaczynać się od opisania modelu obiektowego oraz modelu dostępu do bazy danych w klasach abstrakcyjnych, cała reszta klas powinna je po prostu rozszerzać. Funkcje w klasach powinny mieć logiczną kontrole dostępu itd.
    W WP nawalone jest w pyte funkcji... Zero obiektowości, logiki, bezpieczeństwa... JavaScript w WP? Brrrr.... Jakiś wzorzec projektowy? Chociaż Sinleton albo zapis JSONowy, minimalna sanityzacja? Nieeeeee..... Po co... Lepiej napieprzyć od wała funkcji, pospinać w biblioteki które czasami nie stanowią logicznej całości...

    Tak się tu żalę, ale już zmierzam do celu. WP ma swoje zalety, sadzasz juzera i po 15 minutach przeszkolenia może prowadzić blog/prostą stronę. Sporo rozszerzeń też jest ok, ale bierze się to z całością inwentarza. Grzebać się w tym? Tylko jak bardzo dobrze płacą albo grożą użyciem broni palnej.

    1. uogólniając tę piękną tezę: podczas planowania projektów informatycznych , bwana 22/09/10 13:47
      należy uwzględnić koszty zarządzania i rozwoju.

      Niestety, sam się z tym ciągle biję, masa rzeczy które robię zaczyna się od reverse engineering (bo dokumentacja do dupy) albo od masakrowania cudzego kodu, bo nie był generyczny.

      A przecież tak niewiele kosztuje opracowanie ogólnej warstwy abstrakcji w kodzie (powiedzmy, jakichś API) - szczególnie kiedy mamy do czynienia z produktem o powtarzalnych wdrożeniach.

      Jest i druga strona medalu - jeśli produkt nam się dobrze sprzedaje a czytelny jest tylko dla nas - zlecenia modyfikacji nie trafią się podmiotom trzecim. I to jest biznesowy aspekt tego, pardon my french, gówna:-)

      "you don't need your smile when I cut
      your throat"

  4. chodzi o to , DeK 22/09/10 12:23
    że z tablicy $inventory mam problem z wyciągnięciem danych. Obecnie Inventory ma zmienną $inventory[$name] i to $name to są dodane ręcznie pseudo Id 1,2,3,4,5.
    Chcę dodać do tego pseudo id jeszcze nazwę produktu. Nie wchodzi w grę dbanie o unikalność produktu, w tym wypadku.
    Z tego co widzę tablica Inventory jest w pętli, jak wyciągnąć z niej więcej danych niż tylko $name ?


    function get_inventory()
    {
    $inventory = array();

    $a = array(
    0 => '1 | produkt | (za 2009 rok) | 10 gru 2009 | 14 | 4.50 ',
    1 => '2 | produkt2 | (za 2009 rok) | 10 gru 2009 | 14 | 4.50',
    2 => '3 | produkt | (za 2009 rok) | 10 gru 2009 | 16 | 4.50',
    3 => '4 | produkt | (za 2009 rok) | 10 gru 2009 | 16 | 4.50',
    4 => '5 | produkt | (za 2009 rok) | 10 gru 2009 | 16 | 4.50'
    );



    $products = explode("\n", trim(get_option('quickshop_products')));
    $defaultShipping = get_option('quickshop_shipping');
    foreach ( $products as $i => $d )
    {

    list($name, $nazwaproduktu, $opis, $dataDodania, $wersjaForm, $price, $shipping, $properties) = array_map('trim', explode('|', $d));


    if ( $properties )
    {
    list($property_name, $properties) = array_map('trim', explode(':', $properties));

    $properties = array(
    $property_name => array_map('trim', explode(',', $properties))
    );
    }
    else
    {
    $properties = array();
    }
    $inventory[$name] = array(
    'nazwaproduktu' => $nazwaproduktu,
    'opis' => $opis,
    'dataDodania' => $dataDodania,
    'wersjaForm' => $wersjaForm,
    'price' => $price,
    'shipping' => $shipping ? $shipping : $defaultShipping,
    'properties' => $properties,
    );

    }
    return $inventory;


    }

  5. Gdyby jednak komus chciało się rzucić okiem , DeK 22/09/10 14:14
    to tutaj link do samej wtyczki
    http://downloads.wordpress.org/...k-shop.2.2.1.zip

    Ja ją odrobinę przerobiłem jako laik.
    Wiem, że wtyczki są pisane byle jak, kwestie zabezpieczeń są olewane, sprawa uporządkowania kodu, masa takich wtyczek jest w bazie WP. Przetestowałem kilka skryptów sklepów i jestem zniesmaczony.

    Co do samego WP to gdyby go zestawić z innymi CMSami to nie jest tak tragicznie chyba. Swego czasu bawiłem się Joomlą, dla mnie jako laika to był syf.
    Ale na razie potrzebuję jakiś koszyk minimalistyczny, a nie skrypt sklepu, który jest rozbudowany, a ja nie będę używał 98% jego "bajerów". Drażnią mnie nielogiczne i nieprzemyślane interfejsy, ogólny bałagan w koncepcji danego rozwiązania, ale cóż...

    Martwi mnie trochę, że produkty są zapisywane do tabeli Options, nie wiem jak to wpłynie przy dajmy na to 90 produktach. Produktami są pliki tak więc nie potrzebuję tutaj fikuśnych mechanizmów.

    Z całą pewnością łatwiej dla osoby siedzącej w temacie jest napisanie wtyczki od nowa bazując na pewnych rozwiązaniach niż grzebanie w cudzej.

  6. Sprawdź , Norton 22/09/10 19:06
    quickshop_class.php linia 74
    $product_id = trim(preg_replace('/__+/', '_', preg_replace('/[^a-z0-9_]/s', '_', strtolower($atts['product']))), '_').date('Ymdhis').time();

    Zmień swój podpis na Boardzie
    maks 100 znaków, 3 linie,
    zabroniony spam oraz reklama

    1. fak , Norton 22/09/10 19:07
      $product_id = trim(preg_replace('/__+/', '_', preg_replace('/[^a-z0-9_]/s', '_', strtolower($atts['product']))), '_').time();

      Zmień swój podpis na Boardzie
      maks 100 znaków, 3 linie,
      zabroniony spam oraz reklama

      1. Niestety to nic nie dało , DeK 22/09/10 19:50
        ale zasugerowano mi by dodać do tablicy zmienną:


        $inventory[$nazwa][$nazwaproductu] = array(
        'nazwaformularza' => $nazwaformularza,
        'opis' => $opis,
        'dataDodania' => $dataDodania,
        'wersjaForm' => $wersjaForm,
        'price' => $price,
        'shipping' => $shipping ? $shipping : $defaultShipping,
        'properties' => $properties,
        );


        Co przy wywołaniu przez:

        foreach($inventory AS $nazwaProduktu => $tablicaName ) {
        foreach($tablicaName as $klucz => $wartość) {
        echo "$nazwaProduktu - ($klucz - $wartość)<br>";
        }
        }

        Zwraca:

        1 - (productA - Array)
        2 - (productB - Array)
        3 - (productC - Array)
        4 - (productD - Array)


        I to by działało tylko teraz muszę przerobić odczyt zmiennych. Obecnie mam:


        $product_id = trim(preg_replace('/__+/', '_', preg_replace('/[^a-z0-9_]/s', '_', strtolower($atts['product']))), '_');
        $nazwaprod = $inventory[$atts['product']]['nazwaproduktu'];
        $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);

  7. Ok to uproszczona zagadka , DeK 23/09/10 00:18
    Co zrobiłem źle, że zwraca mi " Notice: Undefined index: "
    Jest to odrębny przykład, zrobiłem sobie brudnopis do eksperymentów.

    $a = array();
    $inventory = array();

    $a = array(
    0 => '1 | produkt1 | (za 2009 rok) | 10 gru 2009 | 14 | 4.50 ',
    1 => '2 | produkt2 | (za 2009 rok) | 10 gru 2009 | 14 | 4.50',
    2 => '3 | produkt3 | (za 2009 rok) | 10 gru 2009 | 16 | 4.50',
    3 => '4 | produkt4 | (za 2009 rok) | 10 gru 2009 | 16 | 4.50',
    4 => '5 | produkt5 | (za 2009 rok) | 10 gru 2009 | 16 | 4.50'
    );

    foreach ( $a as $i => $d )
    {
    $nazwaproduktu= explode('|', $d);
    list ($id, $nazwaproduktu, $opis, $data, $wersja, $cena) = array_map('trim', explode('|', $d));



    $inventory[$id][$nazwaproduktu] = array(
    'nazwaproduktu' => $nazwaproduktu,
    'opis' => $opis,
    'dataDodania' => $data,
    'wersjaForm' => $wersja,
    'price' => $cena,
    );
    }

    $nazwaprod = $inventory[$nazwaproduktu][$id['product']]['nazwaproduktu'];

    echo $nazwaprod;

    
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL