Webboard

Pełna wersja: Jak dodać lokalizację własnej podstrony.php ?
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
wersja skryptu MyBB: 1.8.7
adres forum: http://zapomnianeopowiesci.pl
na czym polega problem (screen, opis, komunikaty):

Stworzyłem własną podstronę, która jest pod linkiem: http://zapomnianeopowiesci.pl/download.php
A wchodząc pod link: http://zapomnianeopowiesci.pl/online.php - chciałbym, aby zamiast "Nieznana lokalizacja" wyświetlała się nazwa ustalona.

Mój kod pliku online.php to:

Kod:
<?php
/**
 * MyBB 1.8
 * Copyright 2014 MyBB Group, All Rights Reserved
 *
 * Website: http://www.mybb.com
 * License: http://www.mybb.com/about/license
 *
 */

define("IN_MYBB", 1);
define('THIS_SCRIPT', 'online.php');

$templatelist = "online,online_row,online_row_ip,online_today,online_today_row,online_row_ip_lookup,multipage,multipage_end,multipage_jump_page,multipage_nextpage,multipage_page,multipage_page_current,multipage_page_link_current,multipage_prevpage,multipage_start";

require_once "./global.php";
require_once MYBB_ROOT."inc/functions_post.php";
require_once MYBB_ROOT."inc/functions_online.php";
require_once MYBB_ROOT."inc/class_parser.php";
$parser = new postParser;

// Load global language phrases
$lang->load("online");

if($mybb->usergroup['canviewonline'] == 0)
{
    error_no_permission();
}

// Make navigation
add_breadcrumb($lang->nav_online, "online.php");

if($mybb->get_input('action') == "today")
{
    add_breadcrumb($lang->nav_onlinetoday);

    $plugins->run_hooks("online_today_start");

    $threshold = TIME_NOW-(60*60*24);
    $query = $db->simple_select("users", "COUNT(uid) AS users", "lastactive > '{$threshold}'");
    $todaycount = $db->fetch_field($query, "users");

    $query = $db->simple_select("users", "COUNT(uid) AS users", "lastactive > '{$threshold}' AND invisible = '1'");
    $invis_count = $db->fetch_field($query, "users");

    if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1)
    {
        $mybb->settings['threadsperpage'] = 20;
    }
    
    // Add pagination
    $perpage = $mybb->settings['threadsperpage'];

    if($mybb->get_input('page', MyBB::INPUT_INT) > 0)
    {
        $page = $mybb->get_input('page', MyBB::INPUT_INT);
        $start = ($page-1) * $perpage;
        $pages = ceil($todaycount / $perpage);
        if($page > $pages)
        {
            $start = 0;
            $page = 1;
        }
    }
    else
    {
        $start = 0;
        $page = 1;
    }

    $query = $db->simple_select("users", "*", "lastactive > '{$threshold}'", array("order_by" => "lastactive", "order_dir" => "desc", "limit" => $perpage, "limit_start" => $start));

    $todayrows = '';
    while($online = $db->fetch_array($query))
    {
        $invisiblemark = '';
        if($online['invisible'] == 1)
        {
            $invisiblemark = "*";
        }

        if($online['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $online['uid'] == $mybb->user['uid'])
        {
            $username = $online['username'];
            $username = format_name($username, $online['usergroup'], $online['displaygroup']);
            $online['profilelink'] = build_profile_link($username, $online['uid']);
            $onlinetime = my_date($mybb->settings['timeformat'], $online['lastactive']);

            eval("\$todayrows .= \"".$templates->get("online_today_row")."\";");
        }
    }

    $todaycount = my_number_format($todaycount);
    $invis_count = my_number_format($invis_count);

    if($todaycount == 1)
    {
        $onlinetoday = $lang->member_online_today;
    }
    else
    {
        $onlinetoday = $lang->sprintf($lang->members_were_online_today, $todaycount);
    }

    if($invis_count)
    {
        $string = $lang->members_online_hidden;

        if($invis_count == 1)
        {
            $string = $lang->member_online_hidden;
        }

        $onlinetoday .= $lang->sprintf($string, $invis_count);
    }

    $multipage = multipage($todaycount, $perpage, $page, "online.php?action=today");

    $plugins->run_hooks("online_today_end");

    eval("\$today = \"".$templates->get("online_today")."\";");
    output_page($today);
}
else
{
    $plugins->run_hooks("online_start");

    // Custom sorting options
    if($mybb->get_input('sortby') == "username")
    {
        $sql = "u.username ASC, s.time DESC";
        $refresh_string = "?sortby=username";
    }
    elseif($mybb->get_input('sortby') == "location")
    {
        $sql = "s.location, s.time DESC";
        $refresh_string = "?sortby=location";
    }
    // Otherwise sort by last refresh
    else
    {
        switch($db->type)
        {
            case "sqlite":
            case "pgsql":
                $sql = "s.time DESC";
                break;
            default:
                $sql = "IF( s.uid >0, 1, 0 ) DESC, s.time DESC";
                break;
        }
        $refresh_string = '';
    }

    $timesearch = TIME_NOW - $mybb->settings['wolcutoffmins']*60;

    // Exactly how many users are currently online?
    switch($db->type)
    {
        case "sqlite":
            $sessions = array();
            $query = $db->simple_select("sessions", "sid", "time > {$timesearch}");
            while($sid = $db->fetch_field($query, "sid"))
            {
                $sessions[$sid] = 1;
            }
            $online_count = count($sessions);
            unset($sessions);
            break;
        case "pgsql":
        default:
            $query = $db->simple_select("sessions", "COUNT(sid) as online", "time > {$timesearch}");
            $online_count = $db->fetch_field($query, "online");
            break;
    }
    
    if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1)
    {
        $mybb->settings['threadsperpage'] = 20;
    }

    // How many pages are there?
    $perpage = $mybb->settings['threadsperpage'];

    if($mybb->get_input('page', MyBB::INPUT_INT) > 0)
    {
        $page = $mybb->get_input('page', MyBB::INPUT_INT);
        $start = ($page-1) * $perpage;
        $pages = ceil($online_count / $perpage);
        if($page > $pages)
        {
            $start = 0;
            $page = 1;
        }
    }
    else
    {
        $start = 0;
        $page = 1;
    }

    // Assemble page URL
    $multipage = multipage($online_count, $perpage, $page, "online.php".$refresh_string);

    // Query for active sessions
    $query = $db->query("
        SELECT DISTINCT s.sid, s.ip, s.uid, s.time, s.location, u.username, s.nopermission, u.invisible, u.usergroup, u.displaygroup
        FROM ".TABLE_PREFIX."sessions s
        LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid)
        WHERE s.time>'$timesearch'
        ORDER BY $sql
        LIMIT {$start}, {$perpage}
    ");

    // Fetch spiders
    $spiders = $cache->read("spiders");

    while($user = $db->fetch_array($query))
    {
        $plugins->run_hooks("online_user");

        // Fetch the WOL activity
        $user['activity'] = fetch_wol_activity($user['location'], $user['nopermission']);

        $botkey = my_strtolower(str_replace("bot=", '', $user['sid']));

        // Have a registered user
        if($user['uid'] > 0)
        {
            if(empty($users[$user['uid']]) || $users[$user['uid']]['time'] < $user['time'])
            {
                $users[$user['uid']] = $user;
            }
        }
        // Otherwise this session is a bot
        else if(my_strpos($user['sid'], "bot=") !== false && $spiders[$botkey])
        {
            $user['bot'] = $spiders[$botkey]['name'];
            $user['usergroup'] = $spiders[$botkey]['usergroup'];
            $guests[] = $user;
        }
        // Or a guest
        else
        {
            $guests[] = $user;
        }
    }

    // Now we build the actual online rows - we do this separately because we need to query all of the specific activity and location information
    $online_rows = '';
    if(isset($users) && is_array($users))
    {
        reset($users);
        foreach($users as $user)
        {
            $online_rows .= build_wol_row($user);
        }
    }
    if(isset($guests) && is_array($guests))
    {
        reset($guests);
        foreach($guests as $user)
        {
            $online_rows .= build_wol_row($user);
        }
    }

    // Fetch the most online information
    $most_online = $cache->read("mostonline");
    $record_count = $most_online['numusers'];
    $record_date = my_date('relative', $most_online['time']);

    // Set automatic refreshing if enabled
    if($mybb->settings['refreshwol'] > 0)
    {
        $refresh_time = $mybb->settings['refreshwol'] * 60;
        $refresh = "<meta http-equiv=\"refresh\" content=\"{$refresh_time};URL=online.php{$refresh_string}\" />";
    }

    $plugins->run_hooks("online_end");

    eval("\$online = \"".$templates->get("online")."\";");
    output_page($online);
}
do lokalizacji dla dodatkowych stron musisz napisac plugin
(17.03.2016, 22:05)Supryk napisał(a): [ -> ]do lokalizacji dla dodatkowych stron musisz napisac plugin
Mało danych... Pomożesz?
Pomożecie?
Kod:
$html='';
define('IN_MYBB', 1); require "./global.php";
add_breadcrumb("Custom Example page", "Example_page1.php");
eval("\$html = \"".$templates->get("theme_template_name")."\";");  
output_page($html);
?>
Czy ten kod z linku: http://www.modderscentral.com/thread-5.html
, dajemy do pliku podstrony.php już stworzonej przez nas, czy tworzymy kolejny plik .PHP?

[EDIT:] Zrobiłem krok po kroku jak być powinno, ale nie działa. Próbowałem nawet tego: https://webboard.pl/thread-120.html
, ale to też jakaś ściema.
(13.04.2016, 17:44)Digitalius napisał(a): [ -> ][EDIT:] Zrobiłem krok po kroku jak być powinno, ale nie działa. Próbowałem nawet tego: https://webboard.pl/thread-120.html
, ale to też jakaś ściema.
https://webboard.pl/thread-120.html - to jest pod dużo starszą wersję MyBB, więc ma prawo nie działać.



(13.04.2016, 17:44)Digitalius napisał(a): [ -> ]
Kod:
$html='';
define('IN_MYBB', 1); require "./global.php";
add_breadcrumb("Custom Example page", "Example_page1.php");
eval("\$html = \"".$templates->get("theme_template_name")."\";");  
output_page($html);
?>
Czy ten kod z linku: http://www.modderscentral.com/thread-5.html
, dajemy do pliku podstrony.php już stworzonej przez nas, czy tworzymy kolejny plik .PHP?
Amm... To jest wlasnie kod na podpięcie podstrony pod mybb.
Ewentualnie sprawdź to: http://modmybb.com/thread-12.html
Nigdy nie była mi potrzebna taka opcjonalność, więc nie bawiłem się tym i nic nie testowałem u siebie.

Jak nie masz więcej "nieznanych lokalizacji" to możesz iść na prościzne i przeszukiwać dom za tekstem "Unknown location", a nastepnie dla kazdy znaleziony element zastapic z twoim tekstem dzieki .replaceWith(), no ale dobrym rozwiązaniem tego nie można nazwać. 
Dobra, dałem radę!
Poczytałem wszelkie strony i zanalizowałem właściwą metodę. Oto ona:

Przede wszystkim skupiłem się na podstawach: Jak stworzyłem podstronę?
Czyli na naszym serwerze ROOT w głównym folderze forum wstawialiśmy zrobiony przez nas nowyplik.php o treści:
Kod:
<?php
define('IN_MYBB', 1);
require "./global.php";

add_breadcrumb("Nazwa strony", "nowyplik.php");

eval("\$podstr = \"".$templates->get("nazwa strony")."\";");
output_page($podstr);
?>
Następnie tworzyliśmy właściwą stronę z naszym szkieletem:
ACP -> Style i Szablony -> Szablony -> Nowy Szablon.

Po tej operacji nasz szablon ZWYKLE zapisywał się w ACP -> Style i Szablony -> Szablony -> Niezgrupowane szablony -> Nasz szablon ("nazwa strony").

To mi dało do myślenia, korzystając z rozwiązania pod tym linkiem: http://www.modderscentral.com/thread-5.html
, mianowicie odnalazłem plik inc/function_online.php na moim serwerze z MyBB.

Po otwarciu tego pliku w edytorze tekstowym wyszukałem linijkę:
Kod:
case "nopermission":
            $user_activity['activity'] = "nopermission";
            $user_activity['nopermission'] = 1;
            break;
pod którą wkleiłem:
Kod:
case "Example_page1":
            $user_activity['activity'] = "Example_page1";
            break;

Wyrażenie "Example_page1" musimy zastąpić w obu przypadkach NAZWĄ SZABLONU, KTÓREJ NADALIŚMY W ACP -> Style i Szablony -> Szablony -> Niezgrupowane szablony -> Nasz szablon (nazwa, którą ustaliliśmy). W moim przypadku był to "download".
Uwaga na wielkość liter, bo to ma znaczenie - ja wolałem nazwać plik podstrony.php z małych liter, by się nie pogubić!

Następnie wyszukałem linijkę:
Kod:
    case "warnings":
            $location_name = $lang->managing_warnings;
            break;
pod którą wkleiłem:
Kod:
case "Example_page1":
            $location_name = 'Example_page1';
            break;
W wyrażeniu case "Example_page1": podmieniłem to nazwą szablonu z ACP, którą stworzyłem. Zaś w $location_name wstawiłem to, co chciałbym, by się wyświetlało w online.php, gdy ktoś przegląda moją podstronę. W moim przypadku było to:
Kod:
case "download":
      $location_name = 'Przegląda stronę <a href="/download.php">Download</a>';
      break;

UWAGA! W wyrażeniu $location_name, gdzie umieściłem:
Kod:
'Przegląda stronę <a href="/download.php">Download</a>'
uważajcie jaki cudzysłów chcecie wstawić! Niektórzy robią go  " , a niektórzy  ' 
Ale tak naprawdę ten  '  zadziała, kiedy w nazwę lokalizacji chcecie wstawić hiperłącze<a href ="#">Tekst</a>.

PRZEPRASZAM, ŻE ROZPISAŁEM SIĘ, ALE LEPIEJ WYTŁUMACZYĆ NIE MOGŁEM, WIĘC ZACZĄŁEM OD PODSTAW BY DOJŚĆ DO CELU :-D
Jeżeli ktoś nie chce modyfikować pliku, bo po co? mamy hooki, można zajrzeć do mojego pluginu tabela serwerów :)