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

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

usuwanie ostatniego postu w temacie gdy go otwieamy

PHP/MYSQL  Założony przez  Supryk.

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

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

$plugins->add_hook('moderation_start''plugin_moderation'); 

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

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

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

        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 ?
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....

@Moderator:
<?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...
Matslom napisał 20.07.2013, 13:48:
eval to odwołanie do szablonów, w tym przypadku do szablonu plugin, a nie wykonanie skryptu...
ta część odpowiada za to
jeśli zamykamy wątek przekierowuje nas do szablonu gdzie wpisujemy powód

to akurat widac
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

$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.



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

2 gości