ďťż

Generator przyciskow w PHP Ks-ekspert nr 6/2004

       

Podstrony


telcocafe

W Ks-ekspert nr 6/2004 podany byl kod PHP:

//przycisk.php <? error_reporting(E_ALL); if (isset($_GET['tekst'])) $tekst=$_GET['tekst']; else $tekst=""; $przycisk=imagecreatefrompng("tlo.png"); $x = ImageSX($przycisk); $y = ImageSY($przycisk); $ramka = 5; $rozmiar_czcionki = 11; $czcionka = 'ss.ttf'; do { $rozmiar_czcionki--; $rozmiar = imagettfbbox ($rozmiar_czcionki, 0 , $czcionka, $tekst); $wys_txt = $rozmiar[7] - $rozmiar[1]; $szer_txt = $rozmiar[2] - $rozmiar[0]; } while ($rozmiar_czcionki>8 && ($wys_txt>($y-2*$ramka) || $szer_txt>($x-2*$ramka))); $srodek_x = ($x-$szer_txt) / 2; $srodek_y = ($y-$wys_txt) / 2; $kolor = Imagecolorallocate($przycisk, 50,143,77); ImageTTFText ($przycisk, $rozmiar_czcionki, 0, $srodek_x, $srodek_y, $kolor, $czcionka, $tekst); Header("Content_type: image/png"); ImagePNG($przycisk); ImageDestroy($przycisk); ?>
krypt generuje mi przyciski na stronie w dziale menu.

Krotki opis dzialania : w katalogu ze strona umieszczamy dany plik przycisk.php + plik z czciaonka np ariel.ttf + obrazek tla z rozszezeniem *.png.

I w pliku menu.php lub lista.php umieszczamy
<a href="http://www.php.pl"><img border="0" src="przycisk.php?tekst=Link do php"></a>

Chcialbym aby ten generator generowal takze drugi obrazek po najechaniu myszka cos w rodzaju onmouseover.

Probowalem go przerobic poprzez dodanie nowego pliku przycisk2.php

a w kodzie strony z menu :
<html> <head> <script type="text/javascript"> function _hoverImage(txt) {  document.getElementById('obrazek').src = 'przycisk2.php?tekst=txt'; } function _normalImage(txt) {  document.getElementById('obrazek').src = 'przycisk.php?text=txt'; } </script> </head> <body> <a href="http://strona.pl"><img id="obrazek" src="przycisk.php?tekst=Strona PHP"  border="0" onmouseover="_hoverImage('Strona PHP')" onmouseout="_normalImage('Strona PHP')" /></a> <br> <a href="http://strona.pl"><img id="obrazek" src="przycisk.php?tekst=Strona 2"  border="0" onmouseover="_hoverImage('Strona 2')" onmouseout="_normalImage('Strona 2')" /></a> </body> </html>
Ale skrypt glupieje.




(...)Ale skrypt glupieje.
Czyli?
BTW:
onmouseover="this.src='obrazekover.php'" (funkcja _hoverImage niepotrzebna do niczego).
Użytkownik .:dR@kE:. edytował ten post 17 kwiecień 2006, 20:36
Swoją drogą dynamiczne tworzenie przycisków to bezsens :P
Nie ma to jak niepotrzebnie obciążać serwer. Poza tym czasem parser php może się wywalić i przycisków nie zobaczymy.
A w tym skrypcie - domyslam sie ze zawsze text na przycisku zmienia sie na "txt" ?

function _hoverImage(txt) { document.getElementById('obrazek').src = 'przycisk2.php?tekst='+txt; } function _normalImage(txt) { document.getElementById('obrazek').src = 'przycisk.php?text='+txt; }
Tak zrób.


Swoją drogą dynamiczne tworzenie przycisków to bezsens :P
Nie ma to jak niepotrzebnie obciążać serwer. Poza tym czasem parser php może się wywalić i przycisków nie zobaczymy.
A w tym skrypcie - domyslam sie ze zawsze text na przycisku zmienia sie na "txt" ?


Wiec co proponujesz wzamian.
Skoro to bezsens to po co taki art ukazal sie w Ekspercie ?

Dlaczego parser mnialby sie wywalic?
Macie lepsze rozwiazanie ?



Ukazał się aby zaprezentować ludziom podstawy biblioteki graficznej gd. I owszem, mam lepsze rozwiązanie - potrzebne będzie tło przycisku [w 2 wersjach, wcisniety i nie] odpowiednie ich ustawienie i dodanie NORMALNEGO TEKSTU. Przykład tabelek + css, choć zrobisz jaką chcesz techniką.
<table> <tr><td><a href="#">O mnie</a></tr></td> <tr><td><a href="#">Linki</a></tr></td> <tr><td><a href="#">Kontakt</a></tr></td> </table>
Oraz kod css

.td { background: url(przycisk.png); } .td.hover { background: url(przycisk.png); }

Rzeczywiscie brzmiciekawie i znajomo prosto.
Przydaloby sie tylko ograniczyc td poprzez zastosowanie klasy.
Aha jak powiadomic przegladarke by przed zalaodowaniem strony pobrala tlo przycisku z hover ? Kojarze funkcje onload w body.

EDIT:
Niestety sprawdzilem to i nie dziala tzn nie wyswietla tych obrazkow tła .
Dodatkowo próbowalem z
background-image:url('tło.rozszerzenie');
i takze bez rezultatu.

Dzialac po zastosowaniu class w td

td.1 { background-image:url('1a.gif'); } td.1.hover { background-image:url('1b.gif'); }


<tr><td class="1"><a href="#">O mnie</a></td></tr>
Dziala ale tylko pokazuje tlo obrazka 1a.gif jakos nie dziala mi funkcja hover

Klejny edit poradzilem sobie i z hover poprzez
td.1:hover

Dziala jedynie w Firefoxie, w IE nie ma zmainy obrazka. co jest nie tak ?
Podejrzewam ze lepiej zastosowac divy do tego jak sie w fachowy sposob do tego zabrac ?
Użytkownik fre edytował ten post 19 kwiecień 2006, 10:25
Hm szczerze to tez miałem ten problem, funkcja hover dla komórek tabeli działała z firefox i operą, na ie nie. Na innych nie sprawdzałem.
Jeśli koniecznie chcesz by działało też na ie, to musisz niestety dołożyć troche kodu - zrobić onmouseover i onmouseout dla komórki i wtedy zmieniać obrazki.

Aha - oczywiście się pomyliłem :oops: zamiast td.hover miało być td:hover.
Nom obecnie się odchodzi od tabelek na rzecz div'ów. Ja to zrobiłem na tabelkach bo szybciej mogłem to zobrazować.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.