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

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

Plugin pokazujący tematy w informacjach w poście - Fatal error?

PHP/MYSQL  Założony przez  GiboneKPL.

Witam. O tuż zainspirowany tym Tematem, postanowiłem swprawdzić swoich sił i spróbować chociaż coś napisać. Udało mi się (poniekąd..), ale nie da się wejść w wątek ponieważ wyskakuje mi error:
Fatal errorCall to undefined function Thread_in_posts_postbit() in /home/renar/domains/ferrycraft.pl/public_html/inc/class_plugins.php on line 101 
Przykład!

Kod wtyczki:
<?php
if(!defined("IN_MYBB"))
{
    die(
"You Cannot Access This File Directly. Please Make Sure IN_MYBB Is Defined.");



$plugins->add_hook('postbit''Thread_in_posts_postbit'); 

function 
Thread_in_posts_info()
{

    return array(
        
"name"            => "Thread in Posts",
        
"description"    => "Skromny plugin pokazujący ilość tematów danego użytkownika w postach!",
        
"website"        => "https://webboard.pl",
        
"author"        => "GiboneKPL",
        
"authorsite"    => "https://webboard.pl",
        
"version"        => "1.0",
        
"guid"             => "",
        
"compatibility" => "*",
    );
}

function 
Thread_in_posts_active()
{
    global 
$db;
    
$myfirstplugin_group = array(
        
'gid'    => 'NULL',
        
'name'  => 'Thread_in_posts',
        
'title'      => 'Thread_in_posts_Ustawienia',
        
'description'    => 'thread_in_posts_ustawienia',
        
'disporder'    => "1",
        
'isdefault'  => "0",
    ); 
}

function 
Thread_in_posts_is_actived()
{
    global 
$mybb;
    if(
$mybb->settings['Thread_in_posts_onoff'] == '1' || $mybb->settings['Thread_in_posts_onoff'] == '0')
    {
        return 
true;
    }
    return 
false;
}
function 
Thread_in_posts_deactived()
{
    global 
$db;
    
$db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE name IN ('Thread_in_posts_onoff')");
    
$db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE name='Thread_in_posts'");
    
rebuild_settings();
}

function 
postbit_numthreads($post)
{
    global 
$db;
    static 
$cache;
    
    if (empty(
$cache[$post['uid']]))
    {
        
$sql "SELECT COUNT(tid) as num_threads FROM ".TABLE_PREFIX."threads WHERE uid = '{$post['uid']}'"
        
$result $db->query($sql);
        
$cache[$post['uid']] = (int) $db->fetch_filed($result'num_threads');
    }
    
    
$post['num_threads'] = $cache[$uid];

?>

Użyłem kodu Lukasa:
function postbit_numthreads(&$post)
{
    global 
$db;
    static 
$cache;
    
    if (empty(
$cache[$post['uid']]))
    {
        
$sql "SELECT COUNT(tid) as num_threads 
                FROM "
.TABLE_PREFIX."threads 
                WHERE uid = '
{$post['uid']}'"); 
        
$result $db->query($sql);
        
$cache[$post['uid']] = (int) $db->fetch_filed($result'num_threads');
    }
    
    
$post['num_threads'] = $cach 

O co c`mon?
W hooku podałeś jako funkcję wykonującą się w tym szablonie
Thread_in_posts_postbit 
a w pluginie masz nazwę funkcji
postbit_numthreads 
Poza tym pamiętaj że funkcje muszą nazywać się tak samo jak nazwa pluginu, czyli w tym wypadku plik pluginu powinien nazywać się Thread_in_posts.php
No i tak się nazywaZ tego co tu rozumiem to mam zamienić:
postbit_numthreads 
na
Thread_in_posts_postbit 
I resztę?
No, to
postbit_numthreads(&$post
zmusisz zamienić na
Thread_in_posts_postbit(&$post
Właśnie tak robiłem i wyszło mi tylko tyle:
Fatal errorCall to undefined method DB_MySQLi::fetch_filed() in /home/renar/domains/ferrycraft.pl/public_html/inc/plugins/Thread_in_posts.php on line 64 
http://community.mybb.com/showthread.php?tid=17970
O dziwo mi to nie działa :<
(11.07.2013, 11:03)GiboneKPL napisał(a): Właśnie tak robiłem i wyszło mi tylko tyle:
Fatal errorCall to undefined method DB_MySQLi::fetch_filed() in /home/renar/domains/ferrycraft.pl/public_html/inc/plugins/Thread_in_posts.php on line 64 

Jak fatal error wyraźnie wskazuje, nie ma funkcji fetch_filed(). Zapewne chodziło Ci o $db->fetch_field() http://php.net/manual/en/function.mysql-fetch-field.php

Poza tym jest dużo innych błędów, np. nazwy funkcji. Co to jest "_is_actived", "_deactived" i "_active"? Przejrzyj sobie obojętnie jakie działające pluginy i zobacz jakie są poprawne nazwy funkcji.
W tym zapytaniu jest coś źle:
$sql "SELECT COUNT(tid) as num_threads FROM ".TABLE_PREFIX."threads WHERE uid = '{$post['uid']}'"
Jest to zapytanie pisane przez Lukasa.
function numthreads_postbit (&$post) {
    global 
$db;
    static 
$cache;
    
    if (empty(
$cache[$post['uid']]))
    {
        
$sql "SELECT COUNT(tid) as num_threads 
                FROM "
.TABLE_PREFIX."threads 
                WHERE uid = '
{$post['uid']}'"
        
$result $db->query($sql);
        
$cache[$post['uid']] = (int) $db->fetch_field($result'num_threads');
    }
    
    
$post['num_threads'] = $cache[$post['uid']];


Powinno działać.
No działa, ale nie wyświetla tematów.. Mógłbyś mi podesłać gotowy plik??

Mój aktualny wygląda tak:
<?php
if(!defined("IN_MYBB"))
{
    die(
"You Cannot Access This File Directly. Please Make Sure IN_MYBB Is Defined.");



$plugins->add_hook('postbit''Thread_in_posts_postbit'); 

function 
Thread_in_posts_info()
{

    return array(
        
"name"            => "Thread in Posts",
        
"description"    => "Skromny plugin pokazujący ilość tematów danego użytkownika w postach!",
        
"website"        => "https://webboard.pl",
        
"author"        => "GiboneKPL",
        
"authorsite"    => "https://webboard.pl",
        
"version"        => "1.0",
        
"guid"             => "",
        
"compatibility" => "*",
    );
}

function 
Thread_in_posts_activate()
{
    global 
$db;
    
$myfirstplugin_group = array(
        
'gid'    => 'NULL',
        
'name'  => 'Thread_in_posts',
        
'title'      => 'Thread_in_posts_Ustawienia',
        
'description'    => 'thread_in_posts_ustawienia',
        
'disporder'    => "1",
        
'isdefault'  => "0",
    ); 
    
    
}

function 
Thread_in_posts_is_activated()
{
    global 
$mybb;
    if(
$mybb->settings['Thread_in_posts_onoff'] == '1' || $mybb->settings['Thread_in_posts_onoff'] == '0')
    {
        return 
true;
    }
    return 
false;
}
function 
Thread_in_posts_deactivate()
{
    global 
$db;
    
$db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE name IN ('Thread_in_posts_onoff')");
    
$db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE name='Thread_in_posts'");
    
rebuild_settings();
    
    
}

function 
Thread_in_posts_postbit (&$post) {
    global 
$db;
    static 
$cache;
    
    if (empty(
$cache[$post['uid']]))
    {
        
$sql "SELECT COUNT(tid) as num_threads 
                FROM "
.TABLE_PREFIX."threads 
                WHERE uid = '
{$post['uid']}'"
        
$result $db->query($sql);
        
$cache[$post['uid']] = (int) $db->fetch_field($result'num_threads');
    }
    
    
$post['num_threads'] = $cache[$post['uid']];

?>
3maj


  threads.php (Rozmiar: 1,05 KB / Pobrań: 241)
Hehehe.. A jeśli mogę się spytać to jaka zmienna do tego jest? Próbowałem:
{$post['num_threads']} 
Ale nie działa (wklejam to do postbit_author_user, czy muszę dodać jeszcze jednego hooka?).

@Dodałem hooka:
$plugins->add_hook("postbit_author_user""threads_postbit"); 

I dalej nie działa.
Nie dodawaj tam żadnego hooka. Jak nie dajesz żadnej funkcji dla hooka to jest on zbędny... :P

{$post['num_threads']} 
No własnie ta zmienna nie działa.. :(



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

1 gości