Nowa zakładka w panelu admina

Założony przez  Kirkowa.

Dzień dobry,

to po pierwsze, bo jestem nowa. A teraz do meritum:

Potrzebuję stworzyć kilka modyfikacji, które będą się odwoływały do osobnych, własnych tabel z bazy danych i będą obsługiwane z panelu administratora tak, jak to robi plugin NewPoint. Muszę więc napisać taką wtyczkę (a dokładniej kilka, ale to tam szczegół), która stworzy nową zakładkę w panelu administratora, a w niej jedną lub więcej podstron. Jak NewPoint. I tu moje pytanie - jak się do tego zabrać? Jakie pliki stworzyć? Co w nich powinno być?

Przyznaję się, nie mam pojęcia, jak się do tego zabrać. Przy MyBB siedzę (dosłownie) od przedwczoraj. Podejrzałam NewPoint, ale niewiele mi to dało. Jeśli chodzi o umiejętności programistyczne, to jestem raczej na poziomie drugiej w porywach do trzeciej klasy podstawówki, ale się uczę.

Jeśli jakaś dobra dusza zechciałaby wskazać, od czego zacząć, byłabym zobowiązana.

Pozdrawiam serdecznie.
Temat był poruszany, przede wszystkim znajomość PHP w tym podstaw od zmiennych po stałe.z
Zapoznaj się z tym https://webboard.pl/forum-113.html i modyfikuj sobie inne pluginy, ogółem tworzenie ich nie jest takie trudne jakby mogło się wydawać, po prostu trzeba też znać się na tak zwanym ''Hook''

Po krótce chodzi tutaj o to, by wszczepić swój kod PHP do plugina tak, by on oddziałowywał na zmienne, nie wszystkie, bo tutaj pojawia się też kilka różnych wątpliwości :)

Znasz PHP ? tak więc wiesz jak sobie zorganizować kod i go włączyć w działanie plugina pod MyBB.
Z działem, który podsyłasz, jest pewien problem. Wiele rozwiązań (a raczej zdecydowana większość z tych, które mnie by interesowały) to linki do stron zewnętrznych, a te zaś są już nieaktualne. Nie przenoszą do niczego. Niestety.

I jeszcze jedno - nie mam pojęcia, jakie są różnice między wersją 1.6 a 1.8, na której próbuję pracować. Wolałabym się zawczasu dowiedzieć, że coś mi działać nie może, bo piszę nie pod tę wersję, co trzeba, a nie dlatego, że sama zepsułam. Albo na odwrót. Jak pisałam, moje doświadczenie z MyBB jest co najwyżej mierne.

PHP powiedzmy, że znam, już lepiej javascript. No ale, przypuśćmy, że sobie poradzę. Chodziło mi najbardziej o to, jakiego rodzaju pliki muszę stworzyć/edytować, by taką zakładkę stworzyć. NewPoints ma tych plików jednak całkiem sporo, bo i jest całkiem spore. A mi chodzi o małą rzecz... Malutką, ale jednak.
Pokz ss o jaka zakladke chodzi

Wysłane z mojego LG-P700 przy użyciu Tapatalka
http://awesomescreenshot.com/0953wbu0e9

Prostokątem zaznaczona zakładka, a strzałkami (w moim przypadku przyszłe) menu tworzonej właśnie wtyczki.

I takie coś właśnie jest mi potrzebne. Na początek wtyczka będzie bardzo prosta, ale potem mi się rozrośnie i dlatego właśnie potrzebuję nowej zakładki w panelu administratora.
Zobacz jak to robi mybb folder w admin/mosules a w nim wymagany plik module_meta i reszta

Zdradz co to bedzie

Wysłane z mojego LG-P700 przy użyciu Tapatalka
Popatrzę, jak nic nie wypatrzę, to będę drążyć dalej. Tymczasem odpowiem na pytanie, co to będzie, a raczej co to ma być, bo się tworzy:

W założeniach ma to być cały pakiet potrzebny do obsługi konkretnego forumowego rpg, czyli rzuty kośćmi, pensje, rachunki, sklepy, giełda nieruchomości, giełda przedmiotów, punkty statystyk i różne kalkulatory tychże, co najmniej dwie całkiem różne loterie... Jeszcze właściwie nie wiem, od czego zacznę, niby w skryptach poniekąd mam większość co najmniej zaplanowane, ale całość jest jeszcze w fazie półprojektu/ćwierćwykonania. Tak w telegraficznym skrócie :D
Już, już niedaleko... A przynajmniej tak mi się wydaje. Coś jednak zepsułam i proszę o radę. Skończyły mi się pomysły.

Jak radził Supryk, popatrzyłam i nawet coś mi to dało. Coś, bo nie wszystko. Założenie na razie proste, dodać zakładkę do menu, jedna podstrona, do tego praktycznie pusta.

Kod modules_meta.php:
<?php

if(!defined("IN_MYBB"))
{
    die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

function sklepik_meta()
{
    global $page, $lang, $plugins;

    $sub_menu = array();
    $sub_menu['10'] = array("id" => "settings", "title" => $lang->nav_settings, "link" => "index.php?module=sklepik-settings");
    
    $sub_menu = $plugins->run_hooks("admin_sklepik_menu", $sub_menu);
    
    $lang->load('sklepik');
    
    $page->add_menu_item($lang->sklepik, "sklepik", "index.php?module=sklepik", 70, $submenu);
    
    return true;
}

function sklepik_action_handler($action)
{
    global $page, $lang, $plugins;
    
    $page->active_module = "sklepik";
    
    $actions = array(
        
        'settings' => array('active' => 'settings', 'file' => 'settings.php'),

        
    );
    
    $actions = $plugins->run_hooks("admin_sklepik_action_handler", $actions);

    if(!isset($actions[$action]))
    {
        $page->active_action = "settings";
        return "settings.php";
    }
    else
    {
        $page->active_action = $actions[$action]['active'];
        return $actions[$action]['file'];
    }
}

function sklepik_admin_permissions()
{
    global $lang, $plugins;
    
    $admin_permissions = array(
        "sklepik"        => $lang->can_manage_sklepik,
        "plugins"        => $lang->can_manage_plugins,
        "settings"        => $lang->can_manage_settings,
        "log"            => $lang->can_manage_log,
        "maintenance"    => $lang->can_manage_maintenance,
        "forumrules"    => $lang->can_manage_forumrules,
        "grouprules"    => $lang->can_manage_grouprules,
        "stats"            => $lang->can_manage_stats,
        "upgrades"        => $lang->can_manage_upgrades
    );
    
    $admin_permissions = $plugins->run_hooks("admin_sklepik_permissions", $admin_permissions);
    
    return array("name" => $lang->sklepik, "permissions" => $admin_permissions, "disporder" => 70);
}

?>

Kod settings.php:
<?php

// Disallow direct access to this file for security reasons
if(!defined("IN_MYBB"))
{
    die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}
$plugins->run_hooks("sklepik_admin_settings_begin");

$page->add_breadcrumb_item("Ustawienia", 'index.php?module=sklepik-settings');
            
$page->output_header("Ustawienia");




$sub_tabs['sklepik_settings'] = array(
    'title'            => "Ustawienia",
    'link'            => 'index.php?module=sklepik-settings',
    'description'    => "Zarządzaj ustawieniami sklepika"
);

$sub_tabs['sklepik_settings_edituser'] = array(
    'title'            => "Zmień",
    'link'            => 'index.php?module=sklepik-settings',
    'description'    => "Zmień ustawienia sklepiku"
);

$page->output_nav_tabs($sub_tabs, 'sklepik_settings');    


?>

Wyszło jak na obrazku:
[Obrazek: ALQwWTy.png]

Czyli nie do końca. Bo:
1. Nie ma nic po lewej, gdzie powinny być podstrony (w tym przypadku aż jedna, ale zawsze).
2. Wcięło stopkę. To nie jest ucięty skrin. Naprawdę ją wcięło.

Nie wiem, co robię źle, przyznaję się - zgłupiałam totalnie. Sprawdzałam z różnymi plikami i wydaje mi się, że wszystko jest tak, jak być powinno, a nie działa. Więc proszę - wskażcie mi mój błąd.
1. Nie dodajesz menu, więc nie ma menu = nie rozumiem pytania. Patrz punkt 2.
2. A dlaczego miałoby wyświetlać stopkę skoro nie używasz funkcji, która ją wyświetla? Wystarczy poprzeglądać domyślne moduły MyBB żeby ją znaleźć: https://github.com/mybb/mybb/blob/featur...x.php#L376
Ok, stopkę mam. Poza tym - poddaję się. Nie mam pojęcia, jak to zrobić. Czy mógłby mi ktoś podpowiedzieć, który fragment kodu odpowiada za tworzenie menu, którego mi zabrakło?
function shop_meta()
{
    global 
$page$plugins;

    
$sub_menu = array();
    
$sub_menu['10'] = array("id" => "pierwsze""title" => "nazwa1" "link" => "index.php?module=shop-xxx");
    
$sub_menu['20'] = array("id" => "drugie""title" => "nazwa2""link" => "index.php?module=shop-xx");
    
$sub_menu['30'] = array("id" => "trzecie""title" => "nazwa3""link" => "index.php?module=shop-xxx");


    
$sub_menu $plugins->run_hooks("admin_forum_menu"$sub_menu);

    
$page->add_menu_item("Sklep""shop""index.php?module=forum"60$sub_menu);

    return 
true;

Prośby na PW dotyczące wsparcia z problemami będą ignorowane. Pomoc poza forum - odpłatna; kontakt: snakemybboard@gmail.com.
Dlatego się poddałam. Mam taki fragment (z nieco innymi nazwami, ale jednak) w swoim kodzie i jak nie było, tak nie ma...

Rzeczony fragment z pliku module_meta:
function sklepik_meta()
{
    global 
$page$lang$plugins;

    
$sub_menu = array();
    
$sub_menu['10'] = array("id" => "settings""title" => $lang->nav_settings"link" => "index.php?module=sklepik-settings");
    
    
$sub_menu $plugins->run_hooks("admin_sklepik_menu"$sub_menu);
    
    
$lang->load('sklepik');
    
    
$page->add_menu_item($lang->sklepik"sklepik""index.php?module=sklepik"70$submenu);
    
    return 
true;

1. Masz już plik językowy? Bo ładujesz langi.
2. Podaj teraz całościowe kody obu plików, po zastosowaniu Twoich zmian.
Prośby na PW dotyczące wsparcia z problemami będą ignorowane. Pomoc poza forum - odpłatna; kontakt: snakemybboard@gmail.com.
Tak, mam plik językowy - specjalnie, z premedytacją stworzony, bo wzoruję się na New Points, który taki plik posiada.

Cały plugin na chwilę obecną ma jedną rolę: wyświetlać menu w PA. Tak więc jest pusty (choć pewnie ma jeszcze kilka niepotrzebnych linii po NP). Jak mi coś nie wychodziło, a nic mi nie wychodziło, to wracałam do poprzedniej wersji, która choćby w części działała. Więc, jak widać, jest to niemal to samo, co w tamtym zamieszczonym w poprzednim poście kodach. I ma tylko dwa pliki:

module_meta.php
<?php

if(!defined("IN_MYBB"))
{
    die(
"Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

function 
sklepik_meta()
{
    global 
$page$lang$plugins;

    
$sub_menu = array();
    
$sub_menu['10'] = array("id" => "settings""title" => $lang->nav_settings"link" => "index.php?module=sklepik-settings");
    
    
$sub_menu $plugins->run_hooks("admin_sklepik_menu"$sub_menu);
    
    
$lang->load('sklepik');
    
    
$page->add_menu_item($lang->sklepik"sklepik""index.php?module=sklepik"70$submenu);
    
    return 
true;
}

function 
sklepik_action_handler($action)
{
    global 
$page$lang$plugins;
    
    
$page->active_module "sklepik";
    
    
$actions = array(
        
        
'settings' => array('active' => 'settings''file' => 'settings.php'),

        
    );
    
    
$actions $plugins->run_hooks("admin_sklepik_action_handler"$actions);

    if(!isset(
$actions[$action]))
    {
        
$page->active_action "settings";
        return 
"settings.php";
    }
    else
    {
        
$page->active_action $actions[$action]['active'];
        return 
$actions[$action]['file'];
    }
}

function 
sklepik_admin_permissions()
{
    global 
$lang$plugins;
    
    
$admin_permissions = array(
        
"sklepik"        => $lang->can_manage_sklepik,
        
"plugins"        => $lang->can_manage_plugins,
        
"settings"        => $lang->can_manage_settings,
        
"log"            => $lang->can_manage_log,
        
"maintenance"    => $lang->can_manage_maintenance,
        
"forumrules"    => $lang->can_manage_forumrules,
        
"grouprules"    => $lang->can_manage_grouprules,
        
"stats"            => $lang->can_manage_stats,
        
"upgrades"        => $lang->can_manage_upgrades
    
);
    
    
$admin_permissions $plugins->run_hooks("admin_sklepik_permissions"$admin_permissions);
    
    return array(
"name" => $lang->sklepik"permissions" => $admin_permissions"disporder" => 70);
}

?>

settings.php
<?php

// Disallow direct access to this file for security reasons
if(!defined("IN_MYBB"))
{
    die(
"Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}
$plugins->run_hooks("sklepik_admin_settings_begin");

$page->add_breadcrumb_item("Ustawienia"'index.php?module=sklepik-settings');
            
$page->output_header("Ustawienia");




$sub_tabs['sklepik_settings'] = array(
    
'title'            => "Ustawienia",
    
'link'            => 'index.php?module=sklepik-settings',
    
'description'    => "Zarządzaj ustawieniami sklepika"
);

$sub_tabs['sklepik_settings_edituser'] = array(
    
'title'            => "Zmień",
    
'link'            => 'index.php?module=sklepik-settings',
    
'description'    => "Zmień ustawienia sklepiku"
);

$page->output_nav_tabs($sub_tabs'sklepik_settings');    
$page->output_footer();

?>
Żadnych pomysłów, czemu to nie działa? Nikt, nic?

UDAŁO SIĘ!

Ale musiałam to sobie wydrukować i na kolorowo pozaznaczać idiotyczne literówki. Jak ktoś tu trafi z tym samym, to polecam przeanalizować literka po literce własny kod i to, co podesłał Snake_. Działa!



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

1 gości