Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Last Poster Avatar - własny plugin

PHP/MYSQL  Założony przez  NiespecjalnieUzdolniony.

Siemka,
Chciałbym napisać plugin, który na wzór pluginu http://community.mybb.com/mods.php?action=view&pid=74 wstawiałby awatara użytkownika, który napisał ostatni post.
I myślę, że powinno być to dość łatwe jeśli bym potrafił pobrać adres tego użytkownika.
Niestety w pluginach do mybb jestem nowy(w innych cms'ach też się nie bawiłem) i niezbyt rozumiem ten system hooków i ogólnie nie mam pojęcia jak się za to zabrać.
Myślałem nad czymś takim.
  • Pobrać id tematu(nie wiem jak)
  • wysłać zapytanie do bazy danych (coś w deseń " SELECT lastposter FROM thears WHERE id='id tematu' "* [tak wiem, że jest $db->simple_select i pewnie to bym użył])
  • na podstawie nazwy poprosiłbym bazę danych o awatara
  • odpowiednio bym go sformatował i wstawił w odpowiednie miejsce.
Tak bym to widział jednak niezbyt wiem jak pobrać to id tematu. A może jest szybszy sposób?
Z samym szablonem pluginu powinienem sobie poradzić. Poradników o tym troszkę jest ale nie mam pojęcia jak pobrać ten identyfikator.
*wiem że wartości w zapytaniu mogą się różnić. Jest to jedynie przykład.

Za pomoc bardzo dziękuję.
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
Jeżeli czegoś nie wiesz, a jest już plugin który wykorzystuje szukaną przez Ciebie funkcje, to najłatwiej jest zaglądnąć w kod takiej wtyczki.
Tutaj https://webboard.pl/thread-23909.html masz trochę mniej zaawansowaną (wyświetla tylko awatary). Jeżeli ogarniasz w pewnym stopniu PHP to nie powinieneś mieć problemu z jego rozczytaniem.
Jak zatrzymasz się na jakimś etapie to pytaj na forum.
Nie chce CIę zniechhęcać ale po co robić coś co już hest, wytlumacz?
Hook - pozwala na wpięcie Twojego kodu w wybranym miejscu skrypt bez jego edycji :)
Jeżeli wepniesz się dobrym hookiem po zglobalizowaniu $thread $thread['tid'] zwróci ID tematu.
Ale chyba prosciej bylo by zrobić to tak.
Po zglobalizowanie $thread użyć funkcji get_user() która zwróci nam wszy7stkie niezbędne informacje do skorzystania z funkcji format_avatar(), i powinno być dużo bardziej optymalnie.
@Supryk a więc tak... Dlaczego porywam się na tworzenie koła od nowa? Najprościej powiedzieć dla wiedzy :D
Ale tak na serio mam problemy z tym pluginem, który podesłałem więc postanowiłem napisać sobie prostszy a przy okazji troszkę się poduczyć pisania pluginów. Nie mam w zwyczaju pisać "hello world", zawsze jak coś zaczynam to daje sobie zadanie, którego nie wiem jak ugryźć aby się troszku pomordować i zmotywować do pracy(nie lubię monotonnego zwiększania trudności).
Jeśli chodzi o hooki to rozumiem, że jeśli podpinamy pod odpowiedni swój plugin to możemy działać na jego zmiennych?
Jeżeli tak to na tym mi najbardziej zależało. A funkcja get_user() może się bardzo przydać :D dzięki (jak napisałem z pluginami dopiero zaczynam i te funkcje są mi nieznane).
@Matslom Dzięki. Z wtyczki co podesłałem ciężko było cokolwiek wywnioskować, jest troszku za duża :P
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
(15.01.2016, 15:49)NiespecjalnieUzdolniony napisał(a): Jeśli chodzi o hooki to rozumiem, że jeśli podpinamy pod odpowiedni swój plugin to możemy działać na jego zmiennych?
Można używać zmiennych w jego obrębie,a le nie zawsze, trzeba znać/widzieć kod w obrębie hooka.
Mam takie coś
<?php
    
if(!defined("IN_MYBB")) die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
    function 
lastposteravatarlight_info(){
        return array(
            
"name"=>"LastPosterAvatarLight",
            
"description"=>"Pokazuje awatary użytkowników, którzy jako ostatni napisali post w danych tematach",
            
"website"=>"",
            
"author"=>"NiespecjalnieUzdolniony",
            
"authorsite"=>"",
            
"version"=>"0.1",
            
"guid"=>"",
            
"compatibility"=>"18*"
        
);
    }
    
$plugins->add_hook("forumdisplay_thread""LastPosterAvatarLight_threads");
    function 
LastPosterAvatarLight_threads(){
        global 
 $thread;
        
$LPAL=$thread['lastposteruid'];
    }
?>
W szablonie wstawiłem {$LPAL} z nadzieją że wypisze id użytkownika, który ostatni pisał post, jednak nawet jak zmieniłem
$LPAL=$thread['lastposteruid']; 

na
$LPAL="slowo"
to nie dawało żadnego rezultatu.
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
function LastPosterAvatarLight_threads(){
        global  
$thread$LPAL;
        
$LPAL=$thread['lastposteruid'];
    } 
Dobra to działa ale mam kolejny problem.
Przy wyświetlaniu działów też ma wyświetlać awatary i rozumiem, że tutaj muszę użyć takiego hooka
$plugins->add_hook("build_forumbits_forum""LastPosterAvatarLight_forums"); 
i tutaj mam kilka pytań
1.W dokumentacji jest coś takiego
Hook                    Params          Line
build_forumbits_forum          $forum          60
I niezbyt rozumiem o co chodzi z tym $forum
2.Napisałem taką funkcję wstawiłem w szablony "forumbit_depth1_forum_lastpost" i "forumbit_depth2_forum_lastpost" {$LPAL} jednak brak rezultatów.
function LastPosterAvatarLight_forums(){
        global 
 $LPAL;
        
$LPAL="Ehgdfhgdsgmds";    
    } 
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
wrzuc caly plik
<?php
    
if(!defined("IN_MYBB")) die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
    function 
lastposteravatarlight_info(){
        return array(
            
"name"=>"LastPosterAvatarLight",
            
"description"=>"Pokazuje awatar użytkownika, który jako ostatni napisał post w danym temacie.",
            
"website"=>"",
            
"author"=>"NiespecjalnieUzdolniony",
            
"authorsite"=>"",
            
"version"=>"0.1",
            
"guid"=>"",
            
"compatibility"=>"18*"
        
);
    }
    
$plugins->add_hook("forumdisplay_thread""LastPosterAvatarLight_threads");
    
$plugins->add_hook("build_forumbits_forum""LastPosterAvatarLight_forums");
    function 
LastPosterAvatarLight_threads(){
        global 
 $thread,$LPAL,$mybb;
        
$LPAL=$thread['lastposteruid'];
        
$LPAL=get_user($LPAL);
        if(
$LPAL['avatar']==NULL)
            
$LPAL="<a href=\"".$mybb->settings['bburl']."/".get_profile_link($thread['lastposteruid'])."\"><img src=\"".$mybb->settings['bburl']."/".$mybb->settings['useravatar']."\" style=\"\" alt=\"".$LPAL['username']."\" class=\"\" /></a>";
        else
            
$LPAL="<a href=\"".$mybb->settings['bburl']."/".get_profile_link($thread['lastposteruid'])."\"><img src=\"".$mybb->settings['bburl']."/".$LPAL['avatar']."\" style=\"\" alt=\"".$LPAL['username']."\" class=\"\" /></a>";
    }
    function 
LastPosterAvatarLight_forums(){
        global 
 $LPAL;
        
$LPAL="Ehgdfhgdsgmds";    
    }
?>
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
nie chce Ci nic narzucać ale poprawilem troche Twoj kod

<?php
    
if(!defined("IN_MYBB")) die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
    function 
lastposteravatarlight_info(){
        return array(
            
"name"=>"LastPosterAvatarLight",
            
"description"=>"Pokazuje awatar użytkownika, który jako ostatni napisał post w danym temacie.",
            
"website"=>"",
            
"author"=>"NiespecjalnieUzdolniony",
            
"authorsite"=>"",
            
"version"=>"0.1",
            
"guid"=>"",
            
"compatibility"=>"18*"
        
);
    }
    
$plugins->add_hook("forumdisplay_thread""LastPosterAvatarLight_threads");
    
$plugins->add_hook("build_forumbits_forum""LastPosterAvatarLight_forums");
    function 
LastPosterAvatarLight_threads(){
        
        global  
$thread,$LPAL,$mybb;
        
        
$user get_user($thread['lastposteruid']);
        
$useravatar format_avatar(htmlspecialchars_uni($user['avatar']), $user['avatardimensions'], my_strtolower("30x30"));

        
$LPAL="<a href=\"".$mybb->settings['bburl']."/".get_profile_link($user['uid'])."\"><img src=\"".$useravatar['image']."" alt=\"\" style=\"\" ".$useravatar['width_height']."/></a>";
    }
    function 
LastPosterAvatarLight_forums(&$forum){
        
        global  
$LPAL;
        
        
$LPAL="Ehgdfhgdsgmds";    
    }
?>

bedzie formatowalo nawet domyslny awatary
Dzięki, powinienem sobie już poradzić. Nieznajomość funkcji i zmiennych CMS'a potrafi być utrudnieniem :D

Edit. Nadal mam ten sam problem. Nie wstawia awatara w miejsce {$LPAL} a to kod

<?php
    if
(!defined("IN_MYBB")) die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
 
   function lastposteravatarlight_info(){
 
       return array(
 
           "name"=>"LastPosterAvatarLight",
 
           "description"=>"Pokazuje awatar użytkownika, który jako ostatni napisał post w danym temacie.",
 
           "website"=>"",
 
           "author"=>"NiespecjalnieUzdolniony",
 
           "authorsite"=>"",
 
           "version"=>"0.1",
 
           "guid"=>"",
 
           "compatibility"=>"18*"
 
       );
 
   }
 
   $plugins->add_hook("forumdisplay_thread""LastPosterAvatarLight_threads");
 
   $plugins->add_hook("build_forumbits_forum""LastPosterAvatarLight_forums");
 
   function LastPosterAvatarLight_threads(){
 
       
        global  $thread
,$LPAL,$mybb;
 
       
        $user 
get_user($thread['lastposteruid']);
 
       $useravatar format_avatar(htmlspecialchars_uni($user['avatar']), $user['avatardimensions'], my_strtolower("30x30"));

 
       $LPAL="<a href=\"".$mybb->settings['bburl']."/".get_profile_link($user['uid'])."\"><img src=\"".$useravatar['image']."\" alt=\"\" style=\"\" ".$useravatar['width_height']."/></a>";
 
   }
 
   function LastPosterAvatarLight_forums(&$forum){
 
       
        global  $LPAL
;
        if(
$user=$forum['lastposteruid']!=0){
            
$user=get_user($forum['lastposteruid']);
            
$useravatar format_avatar(htmlspecialchars_uni($user['avatar']), $user['avatardimensions'], my_strtolower("30x30"));
            
$LPAL="<a href=\"".$mybb->settings['bburl']."/".get_profile_link($user['uid'])."\"><img src=\"".$useravatar['image']."\" alt=\"\" style=\"\" ".$useravatar['width_height']."/></a>";
        }
 
   }
?>



Edit2. Gdzie mogę znaleźć opisy tych funkcji i zmiennych. Na http://crossreference.mybb.de/nav.html?_functions są one jedynie wymienione.
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
tu ma zle

if($user=$forum['lastposteruid']!=0){ 

mam nadzieje ze wtyczka znajdzie się w dziale DL
@Supryk Ten fragment działa jak biorę zmienną w print_r to awatary wyświetla tylko że nad forum. Mi nie wyświetla zawartości zmiennej $LPAL gdy w "forumbit_depth1_forum_lastpost" i "forumbit_depth2_forum_lastpost" wstawię {$LPAL}.
Ten problem występuje tylko w tej 2 funkcji :/
Jak czytasz mój post to sprawdź czy go nie zedytowałem bo niezdecydowany jestem.
Mimo to i tak ten warunek mi sie nie podoba

if($forum['lastposteruid']!=0){ 
by wystarczylo
w 2 funkcji brakuje $mybb w globalnych
to zwróci to jako następny element tablicy $forum

$forum['lastposteravatart']="<a href=\"".$mybb->settings['bburl']."/".get_profile_link($user['uid'])."\"><img src=\"".$useravatar['image']."\" alt=\"\" style=\"\" ".$useravatar['width_height']."/></a>"


lub na koniec funkcji
return $LPAL

forumdisplay_thread ten szablon bedzie dla drugej funkcji



Użytkownicy przeglądający ten wątek:

1 gości