Panel rotacyjny aukcji dla serwisu Allegro.pl
Witam. Kiedyś gdy nie znałem php, widziałem takie panele i bardzo chciałem takie zrobić. Teraz gdy już mniej więcej orientuję się w kodzie wyskrobałem to na tyle ile potrafię. Wiele firm, osób prywatnych udostępnia panel za "drobną" opłatą. Nie szukałem w sieci ale myślę, że znalazło by się mnóstwo gotowców. Jako zwolennik Open Source, umieszczam tutaj dzieło wykonane od zera prze zemnie. Pomysł.. wiadomo nie mój :D. Kodzik postarałem się opisałem jak umaiłem, kto ma zrozumieć ten zrozumie :P.
Panel do poprawnego działania potrzebuje: osobny serwer, 2 pliki z kodem php, folder z plikami wskazującymi na użytkowników mających "zezwolenie" i jakaś czcionka. Dodatkowo dochodzi jeden skrypt który banalnie generuje kod panelu jaki sprzedawca ma wrzucić do opisu aukcji.
Pierwszy "panel.php":
Tutaj jest generowany obrazek na podstawie pierwszych ośmiu aukcji użytkownika.
<?php
Header("Content-type: image/jpeg");
$czcionka = "cour.ttf";
$obraz = ImageCreateTrueColor(517, 400); // TrueColor, poprawiło jakość obrazu
$bialy = ImageColorAllocate($obraz, 255, 255, 255);
$czarny = ImageColorAllocate($obraz, 0, 0, 0);
$szary = ImageColorAllocate($obraz, 108, 120, 132);
// Wypełnianie kolorem białym, tworzenie białego tła
ImageFilledRectangle($obraz, 0, 0, 517, 400, $bialy);
// Rysowanie ramki i przegródek tworząc tabelkę
ImageRectangle($obraz, 0, 0, 516, 399, $szary);
ImageLine($obraz, 0, 200, 517, 200, $szary);
for($r=1;$r<=3;$r++){
$xr=$r+$r*128;
ImageLine($obraz, $xr, 0, $xr, 400, $szary);
ImageLine($obraz, $xr, 0, $xr, 400, $szary);
ImageLine($obraz, $xr, 0, $xr, 400, $szary);
}
// Sprawdzanie użytkownika
$user = $HTTP_GET_VARS[u]; // numer użytkownika
if ($user<>"" && $user<>"." && $user<>".." && is_numeric($user) && file_exists("user/".$user)) {
$zrodlo = file_get_contents("http://www.allegro.pl/show_user_auctions.php?uid=".$user);
$ile_auk = explode("clickable", $zrodlo);
if((count($ile_auk)-3)<8) $ile_aukcji=count($ile_auk)-3; else $ile_aukcji=9;
//Zdjęcie <td class=\"cellPhoto\">
//Opis <td class=\"cellName\"> w tym link
//Cena <td class=\"cellPrice\">
// Wstępne cięcie źródła
$zdj = explode("<td class=\"cellPhoto\">", $zrodlo);
$opi = explode("<td class=\"cellName\">", $zrodlo);
$cen = explode("<td class=\"cellPrice\">", $zrodlo);
// Główna pętla tworzenia panelu
$ii=0;
for($i=1;$i<$ile_aukcji;$i++) {
//Miniaturka
$zdj1 = explode("<img src=\"", $zdj[$i]);
$adres_minaturki = substr($zdj1[1], 0, strpos($zdj1[1], "\""));
// Powiększamy zdjęcie ( Z http://photos01.allegroimg.pl/photos/64x48/769/90/66/769906666 na http://photos01.allegroimg.pl/photos/128x96/769/90/66/769906666 )
$adres_minaturki = str_replace("64x48", "128x96", $adres_minaturki);
// Wklejanie miniaturki z allegro
$miniaturka = imagecreatefromjpeg($adres_minaturki);
$xx = "128"; $yy = "96";
if($i>4) imagecopy($obraz, $miniaturka, $ii*128+$ii+1, 201, 0, 0, $xx, $yy); else imagecopy($obraz, $miniaturka, ($i-1)*128+$i, 1, 0, 0, $xx, $yy);
//Opis, pobieranie opisu z pobranego źródła
$opi1 = explode("<span>", $opi[$i]);
$opi2 = substr($opi1[1], 0, strpos($opi1[1], "<"));
if($opi2=="") {
$opi1 = explode("<b>", $opi[$i]);
$opi2 = substr($opi1[1], 0, strpos($opi1[1], "<"));
}
$opis = explode(" ", $opi2);
$size_opis = 10; // wielkość czcionki opisu
$o=1; // po koleji wyrazy
$wiersz=1; // w którym wierszu jesteśmy (dzięki temu wiersze się nie rozłarzą)
$opis_pisz = $opis[0]; // i profesjonalne pobieranie pierwszego słowa
while($o<count($opis)+2) {
// i pętelka która będzie tak długo trwać aż się słowa z opisu nie wyczerpią
//jest +2 gdyż, 1 to dlatego że mało kiedy na końcu całego zdania jest spacja, a 2 żeby wyświetlić ostatni wyraz (bez tego nie dojdzie do if`a)
//Sprawdzanie długości tekstu
$opis_box = Imagettfbbox($size_opis, 0, $czcionka, $opis[$o]);
$opis_pisz_box = Imagettfbbox($size_opis, 0, $czcionka, $opis_pisz);
if(((($opis_box[0]+$opis_box[4])+($opis_pisz_box[0]+$opis_pisz_box[4]))>110) or ($o==count($opis)+1)) { // Jeśli więcej się nie zmieści albo się zapchało lub ostatni wyraz to wyświetl
//if((strlen($opis_pisz)+strlen($opis[$o]))<14) {
//Wyśrodkowywanie
$pozycja_x = (128-($opis_pisz_box[0]+$opis_pisz_box[4]))/2;
if($i<=4) ImageTtfText($obraz, $size_opis, 0, (($i-1)*128)+$pozycja_x, 104+($wiersz*15), $czarny, $czcionka, $opis_pisz);
else ImageTtfText($obraz, $size_opis, 0, ($ii*128)+$pozycja_x, 304+($wiersz*15), $czarny, $czcionka, $opis_pisz);
$wiersz++;
$opis_pisz = $opis[$o];
$o++;
} else { // a jeśli jest miejsce i nie jest to ostatni wyraz dodaj kolejny
$opis_pisz = $opis_pisz." ".$opis[$o];
$o++;
}
}
//Cena
if(substr($cen[$i], 0, 4)<>"<img") {
$cena = substr($cen[$i], 0, strpos($cen[$i], "<"));
} else {
$cen1 = explode(">", $cen[$i]);
$cena = substr($cen1[1], 1, strpos($cen1[1], "<")-1);
}
// Pobieranie ceny powyżej teraz wystarczy tylko wyświetlić
$czcionka_ceny = "tnrb.ttf";
$size_cena=14;
$cena_box = Imagettfbbox($size_cena, 0, $czcionka_ceny, $cena);
$pozycja_cena_x = (128-($cena_box[0]+$cena_box[4]))/2;
if($i>4) ImageTtfText($obraz, $size_cena, 0, $ii*128+$pozycja_cena_x, 386, $czarny, $czcionka_ceny, $cena);
else ImageTtfText($obraz, $size_cena, 0, ($i-1)*128+$pozycja_cena_x, 186, $czarny, $czcionka_ceny, $cena);
if($i>4) $ii++;
}
} // tu można else jak nie ma takiego usera
// zabiegi kosmetyczne :)
$czcionka_podpis = "cour.ttf";
$size_podpis = 8;
for($nul=0;$nul<2;$nul++) ImageTtfText($obraz, $size_podpis, 0, 439, 398, $czarny, $czcionka_podpis, "Kacpir.info");
ImageJpeg($obraz);
ImageDestroy($obraz);
?>
Dalej "aukcja.php", dzięki niemu możemy zostać przeniesieni na odpowiednią aukcje klikając na panel. Tu tak samo jak w pliku powyżej jest sprawdzane na podstawie plików z folderu "user" czy user ma prawo do korzystania z tego dobrodziejstwa.
<?php
$do = $HTTP_GET_VARS["do"]; // numer miniaturki 1-8
$user = $HTTP_GET_VARS[u]; // numer użytkownika
if ($user<>"" && $user<>"." && $user<>".." && is_numeric($user) && file_exists("user/".$user)) {
$zrodlo = file_get_contents("http://www.allegro.pl/show_user_auctions.php?uid=".$user);
$ile_auk = explode("clickable", $zrodlo);
// Wstępne cięcie źródła
$lin = explode("<td class=\"cellName\">", $zrodlo);
//Link
$lin1 = explode("<a href=\"", $lin[$do]);
$link = substr($lin1[1], 0, strpos($lin1[1], "\""));
Header("Location: ".$link);
} else print "<html><head><META http-equiv='content-language' content='pl'><META http-equiv='content-type' content='text/html; charset=UTF-8'><title>Error</title></head><body><center>Nie ma takiego użytkownika!</center></body></html>";
?>
I skrypt generujący kod dla sprzedającego:
<?php
$nr=$HTTP_GET_VARS[nr];
print "<html><head><META http-equiv='content-language' content='pl'><META http-equiv='content-type' content='text/html; charset=UTF-8'><title>panel</title></head><body><center>";
if($nr<>"") {
print"Oto kod, skopiuj i wklej go w dowolnym miejscu opisu:<br><table border='2'><tr><td><i>
<img src=\"http://www.kacpir.info/allepanel/panel.php\" border=\"0\" width=\"517\" height=\"400\" usemap=\"#panelek_form_kacpir\"/>
<map name=\"panelek_form_kacpir\">
<area shape=\"rect\" coords=\"0,0,127,199\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=1&u=".$nr."\"/>
<area shape=\"rect\" coords=\"128,0,255,199\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=2&u=".$nr."\"/>
<area shape=\"rect\" coords=\"256,0,383,199\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=3&u=".$nr."\"/>
<area shape=\"rect\" coords=\"384,0,517,199\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=4&u=".$nr."\"/>
<area shape=\"rect\" coords=\"0,200,127,400\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=5&u=".$nr."\"/>
<area shape=\"rect\" coords=\"128,200,255,400\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=6&u=".$nr."\"/>
<area shape=\"rect\" coords=\"256,200,383,400\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=7&u=".$nr."\"/>
<area shape=\"rect\" coords=\"384,200,517,390\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=8&u=".$nr."\"/>
<area shape=\"rect\" coords=\"384,200,438,400\" href=\"http://www.kacpir.info/allepanel/aukcja.php?do=8&u=".$nr."\"/>
<area shape=\"rect\" coords=\"439,391,517,400\" href=\"http://www.kacpir.info/\"/></map>
</i></td></tr></table>";
} else print "<form action='index.php' method='GET'>Twój numer użytkownika allegro: <input type='text' size='15' name='nr'><input type='submit' value='Generuj kod do wstawienia na aukcje'></form>";
print "</center></body></html>";
?>
Wiem, niektóre rozwiązania mogą być bardzo dziecinne, nie zrozumiałe, bardzo nie stabilne, jednak jak na razie wszystko działa jak należy i jako twórca/użytkownik nie narzekam.
Jak jak się domyśleć skrypt`a należy już we własnym zakresie zmodyfikować pod swój serwer.
Ponieważ do opisu niezbyt się przyłożyłem zaznaczam, że jest to wersja BETA :)
Pozdrawiam i życzę miłego kodowania, Kacper Placha.
Komentarze:
Jeszcze nikt nie skomentował tego dzieła. Bądź pierwszy!Dodaj komentarz:
Powrót do listy publikacji.