Mod, który chcę dziś zaprezentować sprawia, że do komentarzy dodawany jest gravatar. Także, jeśli ktoś ma gravatara to jego zdjęcie będzie wyświetlane przy komentarzach. Musi tylko w tym celu dodać e-mail w formularzu komentarzy. W pozostałych przypadkach będzie wyświetlana domyślna grafika.
Autorem tego moda jest Matt Jones. Na początek robimy oczywiście kopię zapasową plików. Następnie w snews.php w funkcji "comment" dodajemy zaznaczony kod:
$url = (strlen($url) > 8 && strpos($url, '?') === false) ? clean(cleanXSS($url)) : null;
$email = trim($_POST['email']);
$email = (strlen($email) > 5 && preg_match( '/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i' , $email)) ? clean(cleanXSS($email)) : null;
Nieco niżej szukamy fragmentu i dopisujemy zaznaczony kod:
$query = 'INSERT INTO '._PRE.'comments'.'(articleid, name, url, comment, time, approved, email) VALUES'.
"('$post_article_id', '$name', '$url', '$comment', '$time', '$approved', '$email')";
Następnie w tej samej funkcji szukamy fragmentu:
'name'=>$name, 'comment'=>$comment,
Pomiędzy te dwie linijki wpisujemy:
'email'=>$email,
Kolejnym krokiem będzie dodanie pomiędzy poniższe linijki:
case ($tag == 'comment'): echo $r['comment'];
następujący kod:
$email = retrieve('email', 'comments', 'id', $r['id']);
$name = $r['name'];
$default = _SITE."images/layout/avatar.png";
$size = "50";
$rating = "pg";
$gravatar = "http://www.gravatar.com/avatar.php?gravatar_id=".md5($email)."&rating=".$rating."&default=".urlencode($default)."&size=".$size;
echo '<img class="gravatar" src="'.$gravatar.'" width="'.$size.'" height="'.$size.'" alt="'.$name.'" /> ';
W pierwszej zaznaczonej linijce definiujemy ścieżkę do domyślnej grafiki avatara, znajdującą się na naszym serwerze (w przypadku, gdy ktoś nie ma gravatara lub nie poda e-maila). W drugiej zaznaczonej linijce możemy zmienić wielkość naszego obrazka. Liczba ta odpowiada za szerokość i wysokość gravatara. Następną czynnością będzie znalezienie linijki (ciągle w funkcji "comment"):
echo html_input('text', 'url', 'url', $url, l('url'), 'text', '', '', '', '', '', '', '', '', '')."\r\n";
Dodajemy pod nią:
echo html_input('text', 'email', 'email', '', l('cemail'), 'text', '', '', '', '', '', '', '', '', '');
Następnie przechodzimy do funkcji "edit_comment". Dopisujemy w niej zaznaczony fragment:
$query = mysql_query('SELECT id,articleid,name,url,email,comment,approved FROM '._PRE.'comments'.' WHERE id='.$commentid);
W tej samej funkcji dodajemy jeszcze podświetlony kod:
echo html_input('text', 'url', 'url', $r['url'], l('url'), '', '', '', '', '', '', '', '', '', '');
echo html_input('text', 'email', 'email', $r['email'], l('cemail'), '', '', '', '', '', '', '', '', '', '');
Przechodzimy do funkcji "processing". Dodajemy w niej zaznaczony fragment:
$url = cleanXSS($_POST['url']); $email = cleanXSS($_POST['email']); $comment = $_POST['editedcomment'];
W tej samej funkcji szukamy i dodajemy podświetloną linijkę:
if (isset($_POST['submit_text'])) {
mysql_query("UPDATE "._PRE.'comments'." SET
name = '$name',
url = '$url',
email = '$email',
comment = '$comment',
approved = '$approved'
WHERE id = $commentid");
} else if (isset($_POST['delete_text'])) {
Przyszła kolej na dodanie do bazy danych wiesza e-mail. W tym celu wykonujmy poniższe polecenie w bazie danych naszego CMSa (jeśli nie wiesz jak to zrobić odwiedź stronę z instalacją sNews):
ALTER TABLE comments ADD email varchar(255) NOT NULL;
W kolejnym kroku dodajemy w pliku CSS style do klasy "gravatar". Przykładowo:
.gravatar {
float: left;
padding: 6px;
}
W powyższym wypadku styli może zdarzyć się, że avatar będzie poza polem komentarza, jeśli ten jest dość krótki. Aby to zmienić dodajemy zaznaczony fragment w naszym zmodyfikowanym już kodzie:
echo '<img class="gravatar" src="'.$gravatar.'" width="'.$size.'" height="'.$size.'" alt="'.$name.'" /> '; echo $r['comment']; echo '<br class="clearer" />'; break;
Na koniec dodajemy do pliku językowego PL.php linijkę odpowiadającą za tekst wyświetlający się przed polem "e-mail" formularza:
$l['cemail'] = 'Email (nie będzie widoczny, potrzebny do <a rel="nofollow" href="http://www.gravatar.com">gravataru</a>)';
Ostatnią rzeczą jaką należy zrobić jest umieszczenie domyślnego avataru w odpowiednim folderze. Po tych zmianach powinny działać gravatary w CMSie sNews.
To jest bardzo fajna modyfikacja. Szkoda tylko że tak mało popularny jest w naszym kraju serwis Gravatar. Na mojej stronie w komentarzach to tylko ja mam gravatara.
Racja, dlatego dobrze jest taką małą informację o gravatarze dać w formularzu komentarzy jak u mnie czy na Twojej stronie. Być może ktoś dzięki temu założy swojego gravatara ;)
No tak. "Polska to dziwny kraj" jak powiedział pewien polski polityk. Może warto poświecić cały artykuł na ten temat. Na moim portalu najpierw zastosuje gawatara dla wszystkich użytkowników a potem trzeba by to dobrze rozpisać. Swoją drogą to Gavatar ma już swoje lata i nawet polską wersję językową, czyli problem jest gdzie indziej, np. Złudne poczucie anonimowości i ciągle istniejące pokolenie ludzi "Dzieci Neostrady". Ale z czasem może do tego dorośniemy.
No tak a mój nie zawsze się wyświetla :D heheh
Spoko, spoko - wyświetla się ;) Wszystko to racja o czym piszesz. Ja stosunkowo od niedawna używam Gravatara, wcześniej jakoś nie myślałem o tym, bo się za bardzo na blogach nie udzielałem. Jednak teraz czasem gdzieś walnę w sieci komentarz, to taki Gravatar jest całkiem fajną sprawą.
O widzę zmiany :D ładnie ładnie :D nie warto łamać komentarzy na blogu :D.
Gavatar jest też fajny na forach. Z racji tego, że na każde forum trzeba się zarejestrować na maila a chyba wszystkie fora posiadają plugin Gavatar
Miałem jakoś domyślnie ustawione - widocznie zapomniałem o tym ;) Ale już wszystko gra :)
Odnośnie gravatara, nie wiedziałem, że na forach gravatar też działa. Trza wypróbować :)
Właśnie przeprowadziłem sobie tą modyfikację. Bardzo fajnie to wyszło :)
Mam jednak takie pytanie pośrednie do wpisu. Modyfikował trochę formularz dodawania komentarzy, m.in. nazwy poszczególnych pól (czyli: zamiast standardowej nazwy 'Adres WWW' wprowadziłem 'Adres strony WWW (opcjonalne)' , itp.). To poszło dość sprawnie.
Jednak standardowo przed polem textarea do treści komentarza jest jeszcze nazwa: '* Komentarz:'
Chciałem to usunąć i poniekąd udało mi się, tylko pozostał na końcu sam dwukropek ' : '
Nie wiem ja go usunąć, bo on dodaje się automatycznie.
Aktualnie u mnie linijka w snews.php odpowiadająca za wygląd tej 'powierzchni' wygląda tak:
echo html_input('textarea', 'text', 'text', $comment, '', '', '', '', '', '', '7', '60', '', '', '')."\r\n";
(usunąłem tylko zmienną l('comment')
Widzę, że ty sobie z tym poradziłeś, więc dlatego piszę :)
W FORM GENERATOR jest ten dwukropek. Dokładnie w tym miejscu:
case 'textarea':
$output = '<p>'.$lbl.':<br />
No i cyka :) Dzięki.
Swoją drogą wszystko jakieś takie porozrzucane w tym skrypcie jest. Ale być może mi, jako osobie nie znającej się na programowaniu, tak się wydaje :D