İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

[vBulletin Ders-1] Üye avatarları nasıl her alanda gösterilir?

BlackThorn

1
İyinet Üyesi
Katılım
3 Haziran 2010
Mesajlar
1,490
Reaction score
49
vBulletin 3.8.x versiyon için bir makale
Merhaba vBulletin sever arkadaşlar, site sahipleri ve yazarlar. Bugün buradaki dersimiz vBulletin sitemizde istediğimiz bir yerde nasıl üye avatarları çalıştırılır bunu kavrayacağız. Adımları takip eder iseniz, az da işinize yarayacak bilgiler edinebileceksiniz. Eğer imagepath'iniz, yani resim sisteminiz [DB] veritabanı dosya sisteminde ise, o zaman bu biraz kötüdür ve zordur fakat şöyle açıklayarak başlıyorum. Evet imagepath'i veritabanında olan bir vBulletin sitesi için postbit şablonundan bir örnek verelim;

Postbit şablonu:
<img class="inlineimg" src="image.php?u=$post[userid]" height="30px" width="30px" border="0" />

Şablonun imagepath php değeri kodu: $post[userid]

Yani eğer ki file system kullanıyorsanız, üstteki değer ile resim/avatar çekildiğini anlamış olacaksınız tabi bu bir örnektir.


2. Örnek adım ise Forumhome_loggedinuser şablonu:
<img class="inlineimg" src="image.php?u=$loggedin[userid]" height="30px" width="30px" border="0" />

Şablonun imagepath php değeri kodu: $loggedin[userid]
Şunu unutmayalım ki; hangi şablonu isterseniz, yani nerede avatar çıkmasını isterseniz o bölümün şablonunu bulup çalışmanız gerekir. Misal üstteki $loggedin[userid] üyenin avatarını çekmesi için değer kodudur.

  • İşte bazı örnek şablonlar yani bu şablonların imagepath kodlaması:
    • $loggedin[userid]
      • userid
      • avatarurl [plug-in olacak ise.]
    • $thread[postuserid] <--- post user id olmalı (en son konularda)
      • userid
      • avatarurl [plug-in olacak ise.]
    • $userinfo[userid]
      • userid
      • avatarurl [plug-in olacak ise.]
    • $post[userid]
      • userid
      • avatarurl [plug-in olacak ise.]
    • $today[userid]
      • userid
      • avatarurl [plug-in olacak ise.]
    • $user[userid]
      • userid
      • avatarurl [plug-in olacak ise.]
    • $pm[userid]
      • userid
      • avatarurl [plug-in olacak ise.]
    • $örnek[userid] <--- user id'si imagepath için bir değerdir
      • userid
      • avatarurl [plug-in olacak ise.]

Not: Eğer bu üstteki açıklamadakini kullanırsanız, o zaman noavatar.gif(ler) asla çalışmaz. Çünkü plug-in desteği yoktur ve image.php'den gücünü çekmektedir. (Şayet üyenin avatarı varsa.) Eğer siz, noavatar.gif(ler)in gösterilmesini ister iseniz, (yani üyelerinizde avatar olmadığı zaman) o zaman şimdi belirteceğim plug-in kodlamasını kullanmak zorundasınız. Eğer beni anlayamazsanız, lütfen bu linki izleyiniz [iyi bir sebebiyet ile]: http://www.vbulletin.org/forum/showthread.php?t=240445 Online arkadaşlarım pop-up avatarlı eklentim gördünüz mü? Aşağıya dikkat edelim şimdi;

PHP:
require_once('./includes/functions_user.php'); if($buddy[userid])
$buddy[avatarurl] = fetch_avatar_url($buddy[userid]);
if (!$buddy[avatarurl]) 
    {     
$buddy[avatarurl] = $stylevar['imgdir_misc'] . '/noavatar.gif'; 
    } 
else 
    { 
$buddy[avatarurl] = $vbulletin->options['bburl'] . '/' . 
$buddy[avatarurl][0];
    }

Evet en üstteki yazımızda incelersek $değer[userid] var idi. Fakat plug-in'de biraz farklı. id yerine avatarurl yazmak zorundayız neden mi?

Çünkü plug-in içersinde şu kodlara dikkat edelim;

if($buddy[userid])
$buddy[avatarurl] = fetch_avatar_url($buddy[userid]);

Gördüğünüz gibi olay budur.

Peki böyle bir plug-in yazdık diyelim nasıl ekleriz?

Admincp ---> Plug-in ve Ürün Yönetimi ---> Yeni plug-in ekle:
Ürün: vBulletin
Hook noktası: misc_buddylist_bit
Tüm kodları ekleyin ve "aktif" kutusunu seçerek kayıt edin ve çıkın.

Tabi eğer bu plug-in olmadan avatar gösterimi isterseniz, en üst kısımda ki gibi belirttiklerimi hatırlayınız;

PHP:
<img class="inlineimg" src="image.php?u=$buddy[userid]" height="30px" width="30px" border="0" />

Şimdi tamamdır herşey. Ama son kez diyorum eğer bunu kullanırsanız noavatar.gif çalışmaz.


avatarpath / imagepath için daha zor bir kodlama örneği yazıyorum şimdi dikkatlice okuyalım. EĞER Kİ FTP-CUSTOM SİSTEMİ KULLANIYORSANIZ YADA BAŞKA BİR YÖNTEM DENEMEK İSTİYORSANIZ, o zaman bu adımları takip edelim:

Evet arkadaşlar aşağıda ki kodlama sistemi, loggedin users yani online üyeler için SQL tablo php değerleridir. Dosyası ise, index.php veya forum.php (hangi şekil kullanıyor iseniz) ve deneyecek olursanız, lütfen YEDEK ALARAK DENEYİNİZ!. index.php Veya forum.php, index.php, board.php (nasıl kullanıyor iseniz,) açın ve bulun:

PHP:
$forumusers = $db->query_read_slave("
		SELECT
			user.username, (user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, user.usergroupid,
			session.userid, session.inforum, session.lastactivity, session.badlocation,
			IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
			$hook_query_fields
		FROM " . TABLE_PREFIX . "session AS session
		LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
		$hook_query_joins
		WHERE session.lastactivity > $datecut
			$hook_query_where
		" . iif($vbulletin->options['displayloggedin'] == 1 OR $vbulletin->options['displayloggedin'] == 3, "ORDER BY username ASC") . "
	");

Evet üstteki değerler, çevrim içi üyeler değerleridir. Tabi şimdi bu kodlama ile işimiz yok yani diğer kodları dikkate almıyoruz ve aşağıda değiştirilmiş hali ile karşılaştırarak bakıyoruz:

PHP:
$forumusers = $db->query_read_slave("
		SELECT
			user.username, (user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, user.usergroupid,
			session.userid, session.inforum, session.lastactivity, session.badlocation,
NOT ISNULL(customavatar.userid) AS hascustomavatar, customavatar.dateline AS avatardateline, customavatar.width AS avwidth, customavatar.height AS avheight')
			IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
			$hook_query_fields
		FROM " . TABLE_PREFIX . "session AS session
		LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON (avatar.avatarid = user.avatarid)
LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON (customavatar.userid = user.userid) ") . "
		$hook_query_joins
		WHERE session.lastactivity > $datecut
			$hook_query_where
		" . iif($vbulletin->options['displayloggedin'] == 1 OR $vbulletin->options['displayloggedin'] == 3, "ORDER BY username ASC") . "
	");

Gördünüz mü? Farkları ele alalım (avatar kodlaması için) ;

Birinci sorgu:
PHP:
NOT ISNULL(customavatar.userid) AS hascustomavatar, customavatar.dateline AS avatardateline, customavatar.width AS avwidth, customavatar.height AS avheight')

İkinci sorgu:
PHP:
LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON (avatar.avatarid = user.avatarid)
LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON (customavatar.userid = user.userid) ") . "

Evet 1 ve 2 sorguda görmüş olduk. Ve şimdi forumhome_loggedinuser şablonumuzu açalım ve aşağıdaki kodları eski kodlar ile değiştirelim:

PHP:
<if condition="$show['comma_leader']">, </if>$stylevar[dirmark] <if condition="$loggedin[avatarurl]"><img height="30px" width="30px" class="inlineimg" src="$loggedin[avatarurl]" border="0" /></if> <a href="member.php?$session[sessionurl]u=$loggedin[userid]">$loggedin[musername]</a>$loggedin[invisiblemark]$loggedin[buddymark]

imagepath[!] değeri için aşağıdaki kodları hatırlayalım[!] :
<img height="30px" width="30px" class="inlineimg" src="$loggedin[avatarurl]" border="0" />

Pekala, son açıkladığım kodlamayı kullanmanızı önermiyorum ben burada çünkü yoğun ve sıkı bir kodlama örneğidir ve dosya (.php) yedeğinizi almanız önerilir. Eğer ki çözemediyseniz veya anlamadıysanız bir şey, tekrar gözden geçirmenizi öneririm sorunuz olursa eğer yanıtlar, yardım ederim. Şimdilik dersimiz bu kadar daha sonra yazarsam eklemeye devam edeceğim kolay gelsin ve iyi çalışmalar.



Bu makalem, vBulletin.org'da onaylanmıştır aşağıdaki linkten orijinal açıklamasına göz atabilirsiniz tr-ing. çeviriside tümü ile bana aittir buyrun;
http://www.vbulletin.org/forum/showthread.php?t=246994

Saygılar sunarım,
BlackThorn
 

BlackThorn

1
İyinet Üyesi
Katılım
3 Haziran 2010
Mesajlar
1,490
Reaction score
49
Ben teşekkür ederim efendim buyrun ekte ise ekran görüntüsüde ekledim.

Birisi online üyeler, diğeri online arkadaşlarım listesi.
 

Line

0
İyinet Üyesi
Katılım
17 Ekim 2007
Mesajlar
2,516
Reaction score
48
Konum
BAŞKENT
Çalışkan yönetici.Vb kullanmıyorum ama kullananlara baya yararlı olacağından eminim :)
 

azacan

0
İyinet Üyesi
Katılım
17 Mart 2008
Mesajlar
28
Reaction score
0
ben üye profilinde sayfayı ziyaret edenlerin avatarlarını gösteremedim bir türlü $avatar[dateline] yi bir türlü tanımadığı için gösteremiyor ne yapmam lazım? ve tabi birde sosyal gruplardaki avatarları göstermem için..
 

BlackThorn

1
İyinet Üyesi
Katılım
3 Haziran 2010
Mesajlar
1,490
Reaction score
49
ben üye profilinde sayfayı ziyaret edenlerin avatarlarını gösteremedim bir türlü $avatar[dateline] yi bir türlü tanımadığı için gösteremiyor ne yapmam lazım? ve tabi birde sosyal gruplardaki avatarları göstermem için..

$avatar[dateline] değil efendim oranın değerleri. Aşağıdaki adımlar ÖNCE YEDEĞİNİ ALARAK uygularsanız olacaktır.

memberinfo_visitorbit şablonunuzu açın ve bulun ;

PHP:
<li class="smallfont">

Alttakiler ile değiştirin;

PHP:
<li class="smallfont" style="margin-top: 4px">$user[onlinestatus] <img style="position: relative; top: 3px" src="$user[avatarurl]" height="15px" width="12px" alt="<phrase 1="$user[username]">$vbphrase[xs_avatar]</phrase>" border="0" />

includes/class_profileblock.php dosyanızı açın ve alttaki kodları bulun ;

PHP:
        $visitors_db = $this->registry->db->query_read_slave("
            SELECT user.userid, user.username, user.usergroupid, user.displaygroupid, profilevisitor.visible
                $hook_query_fields
            FROM " . TABLE_PREFIX . "profilevisitor AS profilevisitor
            INNER JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = profilevisitor.visitorid)
            $hook_query_joins
            WHERE profilevisitor.userid = " . $this->profile->userinfo['userid'] . "
                " . (!($this->registry->userinfo['permissions']['genericpermissions'] & $this->registry->bf_ugp_genericpermissions['canseehidden']) ? " AND (visible = 1 OR profilevisitor.visitorid = " . $this->registry->userinfo['userid'] . ")" : "") . "
                $hook_query_where
            ORDER BY profilevisitor.dateline DESC
            LIMIT $options[profilemaxvisitors]
        ");

Alttaki kodlar ile değiştirin;

PHP:
        $visitors_db = $this->registry->db->query_read_slave("
            SELECT user.*, (user.options & " . $this->registry->bf_misc_useroptions['invisible'] . ") as invisible
                " . ($this->registry->options['avatarenabled'] ?
                        ", avatar.avatarpath, NOT ISNULL(customavatar.userid) AS hascustom, customavatar.dateline AS avatardateline, customavatar.filedata_thumb, customavatar.height AS avheight, customavatar.width AS avwidth, customavatar.width_thumb AS avwidth_thumb, customavatar.height_thumb AS avheight_thumb" : "") . ", profilevisitor.visible
                $hook_query_fields
            FROM " . TABLE_PREFIX . "profilevisitor AS profilevisitor
            INNER JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = profilevisitor.visitorid)"
                . ($this->registry->options['avatarenabled'] ? "
            LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON (avatar.avatarid = user.avatarid)
            LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON (customavatar.userid = user.userid) " : '') . "
            $hook_query_joins
            WHERE profilevisitor.userid = " . $this->profile->userinfo['userid'] . "
                " . (!($this->registry->userinfo['permissions']['genericpermissions'] & $this->registry->bf_ugp_genericpermissions['canseehidden']) ? " AND (profilevisitor.visible = 1 OR profilevisitor.visitorid = " . $this->registry->userinfo['userid'] . ")" : "") . "
                $hook_query_where
            ORDER BY profilevisitor.dateline DESC
            LIMIT $options[profilemaxvisitors]
        ");


Aynı dosyada bulun ;

PHP:
$visitors["$user[username]"] = $user;

Alttakiler ile değiştirin;

PHP:
fetch_online_status($user, true);
fetch_avatar_from_userinfo($user, true);

Kayıt edin çıkın tamamdır.
 

azacan

0
İyinet Üyesi
Katılım
17 Mart 2008
Mesajlar
28
Reaction score
0
bütün hepsini yaptım fakat hiçbir avatar çıkmadı..
 

azacan

0
İyinet Üyesi
Katılım
17 Mart 2008
Mesajlar
28
Reaction score
0
Eklenti olarak ekledim php dosyasını

dikkatimi çeken şu oldu:

fetch_online_status($user, true);
fetch_avatar_from_userinfo($user, true);


bu kodu yazdığımda hiçbir yazı dahi çıkmıyor fakat bu kodu değiştirmediğimde
xx kişye ait avatar diye sadece yazı çıkıyor resim çıkmıyor..

ve templatelerin aynısını editledim.
 

BlackThorn

1
İyinet Üyesi
Katılım
3 Haziran 2010
Mesajlar
1,490
Reaction score
49
Hocam sana kıyak yaptım, online-offline durumuda ekledim
fetch_online_status($user, true);
fetch_avatar_from_userinfo($user, true);
olayı bu idi. :)

Ayrıca siteye girdim baktım ama orada hiçbir şey yok ki? Hani üyeler de yok? ki avatar olsun?
 

azacan

0
İyinet Üyesi
Katılım
17 Mart 2008
Mesajlar
28
Reaction score
0
attachment.php


php dosyasını editlemeden önce ziyaretçiler gözüküyor. daha doğrusu

fetch_online_status($user, true);
fetch_avatar_from_userinfo($user, true);

bu kısmı ekledikten sonra isimleride gitti. şuan editlenmemiş php dizinde mevcut şimdi editlenmiş daha önce ekte koymuş olduğumu atıyorum.
 

BlackThorn

1
İyinet Üyesi
Katılım
3 Haziran 2010
Mesajlar
1,490
Reaction score
49
Hocam ...

memberinfo_visitorbit
memberinfo_block_recentvisitors

Şablonlarını yollar mısın.
 

azacan

0
İyinet Üyesi
Katılım
17 Mart 2008
Mesajlar
28
Reaction score
0
memberinfo_visitorbit

Kod:
<br><li class="smallfont" style="margin-top: 4px">
$user[onlinestatus]<img style="position: relative; top: 3px" src="$user[avatarurl]" height="15px" width="12px" alt="<phrase 1="$user[username]">$vbphrase[xs_avatar]</phrase>" border="0" /></li>


memberinfo_block_recentvisitors

Kod:
<if condition="$block_data['visitorcount']">
<div class="alt1 smallfont block_row">
	<phrase 1="$block_data[visitorcount]">$vbphrase[last_x_visitors]</phrase>
	<ol class="list_no_decoration last_visitors_list" style="margin-top:-5px;">
		$block_data[visitorbits]
	</ol>
</div>
</if>
<div class="<if condition="$block_data['visitorcount']">alt2<else />alt1</if> smallfont block_row block_footer">
	<phrase 1="$prepared[profilevisits]">$vbphrase[this_page_has_x_visits]</phrase>
</div>

buyrun..
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst