Webboard

Pełna wersja: usuwanie ostatniego postu w temacie gdy go otwieamy
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Słuchajcie kończę swój pierwszy porządny plugin pod Mybb który opublikuje tu na forum za darmo do dl jednak nie zrobię tego do puki nie skończę, została mi ostatnia rzecz z która sam nie mogę się uporać i proszę osoby bardziej obeznane w temacie o pomoc.

Nie chce pokazywać reszty kodu do puki sie z tym nie "uporamy" ponieważ on już działa tylko zostały drobne poprawki

Kod PHP:
function plugin_moderation ()
{
    global 
$db $lang $mybb $theme $templates $header$footer , $
headerinclude $plugin ;
$lang -> load("plugin" );
if( 
$mybb -> settings
'plugin_close_text_onoff' ] == '1' && $mybb -
settings'plugin_onoff' ] == '1' )
{
$plugin false ;
if( 
$mybb -> input 'action' ] !
'openclosethread' )
return;
$tid = (int) $mybb-> input 'tid' ];
$thread get_thread $tid );
if( 
$thread 'closed' ] == 1)
return;
if(isset( 
$mybb-> input
'confirm' ]) && $mybb -> input
'confirm' ] == 1)
{
if(!isset( 
$mybb -> input
'reason' ]) || $mybb -> input
'reason' ] == '')
{
error$lang -
plugin_reason_empty );
}
$plugin true;
}
else
{
eval( 
"\$page = \"" .
$templates -> get "plugin" ). "\";" );
output_page $page );
exit;
}
}


podpinam to po hook

Kod PHP:
$plugins->add_hook('moderation_start''plugin_moderation'); 

Dostałem od lukasamd coś takiego (dziękuje)

Kod PHP:
global $moderation;
if (empty(
$moderation))
{
    require_once 
MYBB_ROOT."inc/class_moderation.php";
    
$moderation = new Moderation;
}
$moderation->delete_post($thread['lastpost']); 

I teraz stosując to w kodzie

Kod PHP:
function plugin_moderation ()
{
    global 
$db $lang $mybb $moderation $theme $templates $header$footer , $
headerinclude $plugin ;
$lang -> load("plugin" );
if( 
$mybb -> settings
'plugin_close_text_onoff' ] == '1' && $mybb -
settings'plugin_onoff' ] == '1' )
{
$plugin false ;
if( 
$mybb -> input 'action' ] !
'openclosethread' )
return;
$tid = (int) $mybb-> input 'tid' ];
$thread get_thread $tid );
if( 
$thread 'closed' ] == 1)
{
if(isset( 
$mybb-> input
'confirm' ]) && $mybb -> input
'confirm' ] == 1)
{
if(!isset( 
$mybb -> input
'reason' ]) || $mybb -> input
'reason' ] == '')
{
error$lang -
plugin_reason_empty );
}
$plugin true;
}
else
{
eval( 
"\$page = \"" .
$templates -> get "plugin" ). "\";" );
output_page $page );
exit;
}
else
{
if (empty(
$moderation))
{
    require_once 
MYBB_ROOT."inc/class_moderation.php";
    
$moderation = new Moderation;
}
$moderation->delete_post($thread['lastpost']); 
}
}
}


Jednak nic z tego albo ja to źle robię

Jak w temacie chciałbym aby podczas otwierania tematu osuwało ostatni post
nadal mam problem :(

nie moge spradzic kiedy temat jest cl a kiedy nie

w moderation.php znalazlem

Kod PHP:
        if($thread['closed'] == 1)
        {
            
$openclose $lang->opened;
            
$redirect $lang->redirect_openthread;
            
$moderation->open_threads($tid);
        }
                else
        {
            
$openclose $lang->closeed;
            
$redirect $lang->redirect_closethread;
            
$moderation->close_threads($tid);
        } 

czy;o to co pisalem w 1 poscie powinno dzialacale nie

Ma ktos jakies pomysly ?
Kod PHP:
eval( "\$page = \"" .
$templates -> get "plugin" ). "\";" );
output_page $page ); 

eval to wykonanie skryptu, np kiedy pobieramy go z bazy...

Nie rozumiem całego działania skryptu.. strasznie źle jest on napisany....

:
Kod PHP:
<?php
$echo 
'echo "test";';
eval(
$echo);

?>

Jak nie wiesz to się nie wypowiadaj, eval służy do uruchomieniu skryptu z wartości string a to że tu jest wczytanie stylu to powinno być include...
ta część odpowiada za to
jeśli zamykamy wątek przekierowuje nas do szablonu gdzie wpisujemy powód

to akurat widac
Kod PHP:
include("$page=".$templates -> get("plugin")); 

Zobacz tak
Lyons niezbyt rozumiesz o co chodzi
Napisz mi co chcesz uzyskać to Ci pomogę...

Chodzi Ci o to by skasowało ostatni post?

Proste.. z id tematu pobierasz id ostatniego postu i tworzysz zapytanie querry które skasuje post o danym id...
Skoro mozna uniknąć zapytań do bazy to lepeij chyba to zrobić a tu się tak da


Jak w temacie kasowanie ostatniego postu gdy otwieramy wątek :)
1. Czynność jest wykonana przez moderatora więc będzie ona użyta raz na jakiś czas więc jedno zapytanie więcej nic się nie stanie...

2. Jeżeli jest coś w bazie to jak chcesz uniknąć zapytania? Nawet jeżeli jest w MyBB funkcja to i tak ona wykona zapytanie...
to moze pokaz jak powinno wygladac to zapytanie z wyszukaniiem i kasowanie

Kod PHP:
$sql "DELETE FROM ".TABLE_PREFIX."posts WHERE tid='$tid' ORDER BY dateline DESC LIMIT 1"
Tak nie powinno się usuwać postów.

Tapatalk / Nexus 4
Dlatego kombinowałem Łukaszu z tym co dałeś ale nie idzie :(
Nie znam się na MyBB ale jak ja bym pisał własnego cms'a to bym zrobił na zasadzie takiej że z ID tematu (masz na pewno) pobiera w niej posty funkcją MAX (która jest wbudowana w mysql_query) i zapytanie które kasuje post z danym ID które nam wygenerowało wcześniej..
Jeżeli wiedziałbyś, że nie ma innych zależności, to oczywiście można tak zrobić.
Tutaj jednak są.
Trzeba chociażby usunąć id ostatniego posta dla tego tematu z tabeli threads.
Właśnie dlatego ja polecam użycie metody delete_post z klasy Moderation, bo ona załatwia tutaj wszystko za nas. Robi co trzeba, podajemy tylko id posta i tyle.