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

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

Zrobienie pętli i wyświetlenie danych

Założony przez  SeikS.

Pytanko.

Robię plugin, który edytuje podgląd profilu. Większość jest już gotowa. Wyświetlanie postów wygląda u mnie tak:

function posty_w_profilu()
{
    global $mybb, $memprofile, $db, $text, $tytul;
    
    $query = $db->query("SELECT * FROM ".TABLE_PREFIX."posts WHERE uid='".$memprofile['uid']."'");

    $info = $db->fetch_array($query);
        $tekst = $info['message'];
        $tytul = $info['subject'];

}

I teraz mam pytanie. Bo pod zmiennymi $tekst oraz $tytul wyświetla mi po 1 wyniku ( pierwszym jaki jest w bazie) a chcę aby dawało 5 ostatnich wyników z bazy (najnowsze). Pozostaje jeszcze jedno pytanie. Jak wyświetlić potem te dane? Myślę coś nad zrobieniem szablonu dla zmiennej posty_w_temacie oraz posty_w_temacie_row i tam wyświetlać wyniki.

Pomożecie?:)
Powinno być
function posty_w_profilu()
{
    global 
$mybb$memprofile$db$text$tytul;
    
    
$query $db->query("SELECT * FROM ".TABLE_PREFIX."posts WHERE uid='".$memprofile['uid']."'");

    while(
$info $db->fetch_array($query));
        
$tekst .= $info['message'];
        
$tytul .= $info['subject'];


Teraz pod zmiennymi $tekst i $tytuł będą wszystkie tytuły i teksty pobrane z zapytania. Takie rozwiązanie jest do kitu więc trzeba użyć szablonów tak jak mówisz (można to zrobić w kodzie pluginu, ale przy ewentualnej edycji wyglądu jest dużo zabawy).
Potrzeba dwóch szablonów
EveryOne napisał(a):posty_w_temacie oraz posty_w_temacie_row
Przykładowa pętla z zastosowaniem szablonu
function posty_w_profilu()
{
    global 
$mybb$memprofile$db$text$tytul;
    
    
$query $db->query("SELECT * FROM ".TABLE_PREFIX."posts WHERE uid='".$memprofile['uid']."'");

    while(
$info $db->fetch_array($query)){
eval(
'$posty_w_temacie_row .= "'.$templates->get("posty_w_temacie_row").'";');
}
eval(
'$posty_w_temacie = "'.$templates->get('posty_w_temacie').'";');

Teraz szablon posty_w_temacie_row:
<tr>
<
tdpost o tytule $info['subject'] <tdcostam cośtam $info['message'] </td>
</
tr
Szablon posty_w_temacie:
<table class="tborder">
<
tr>
<
td class="thead" colspan="2">Tytuł</td>
{
$posty_w_temacie_row}
</
table
Teraz masz to wszystko w zmiennej
{$posty_w_temacie
Hm leci +dla ciebie. Dodałem szablony, wstawiłem twój kod lecz teraz wywala mi błąd:
Fatal error: Call to a member function get() on a non-object in C:\WebServ\httpd-users\wojna\inc\plugins\wojna.php on line 200
Linia 200:
eval('$posty_w_temacie_row .= "'.$templates->get("posty_w_temacie_row").'";'); 
Brakuje Ci $templates w global, dlatego nie widzi tej metody.
Druga sprawa - na pewno potrzebujesz WSZYSTKIE dane o postach w tym zapytaniu? Zobacz, ile danych pobierasz. Ja bym to ograniczył do pól, które Cię interesują. Poza tym, wątpliwe abyś potrzebował wszystkich postów. Ogranicz to poprzez LIMIT do 5-10 lub więcej - ile potrzebujesz, no ale wyobraź sobie, że np. tak jak tutaj, w moim profilu wywaliłoby prawie 3500 wpisów :D
+ Dla Ciebie nie zauważyłem braku zmiennej. Teraz strona odpala lecz wywala błąd tyle razy ile jest postów usera. Domyślam się o co chodzi lecz nie mogę znaleźć rozwiązania...
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\WebServ\httpd-users\wojna\inc\plugins\wojna.php(200) : eval()'d code on line 3

Oczywiście będzie limit 5 ostatnich postów. Nie wytrzymał by mi serwer takiego obciążenia chyba :d
Nie wiem czy przekopiowałeś wszystko od Matsloma (domyślam się że tak było po błędzie parsowania), ale ten kod jest niepoprawny:
<tr>
<td> post o tytule $info['subject'] <td> costam cośtam $info['message'] </td>
</tr>
Powinno być:
<tr>
<td>{$info['subject']}</td><td>{$info['message']}</td>
</tr>
I tak brak zmiany ten sam błąd.
Wklej tutaj te swoje dwa szablony.
    $template = array(
        
"title"        => "posty_w_temacie",
        
"template"    => '
<table class="tborder">
        <tr>
        <td class="thead" colspan="2">Tytuł</td>
{$posty_w_temacie_row}
</table>'
,
        
"sid"        => -1
    
);
    
$db->insert_query("templates"$template);
    
    
$template = array(
        
"title"        => "posty_w_temacie_row",
        
"template"    => '
<tr>
<td> post o tytule {$info[\\\'subject\\\']} <td> costam cośtam {$info[\\\'message\\\']} </td>
</tr>'
,
        
"sid"        => -1
    
); 
Zobacz po zmianie drugiego szablonu na taki (usunięte apostrofy w zmiennych):
"template"    => '
<tr>
<td> post o tytule {$info[subject]} <td> costam cośtam {$info[message]} </td>
</tr>'

{$costam[\lala\]} czy. jakoś tak w każdym bądź. razie w pliku php. w szablonach zmienne muszą mieć \
Supryk przecież jest dodane.
ssory meid nie zauważyłem.
ale przynajmniej kolega dwa post wyżej czegoś się dowiedział
pokaz cały plugin
Funkcje tego pluginu:
function wojna_info() 
{
    return array(
        
'name'            => 'Pluginy do szablonu wojna_v2',
        
'description'    => 'Dodatki poprawiające działanie szablonu <b>Wojna_v2</b>.',
        
'website'        => 'http://cs-wojna.pl',
        
'author'        => 'EveryOne',
        
'authorsite'    => 'http://cs-wojna.pl',
        
'version'        => '1.1',
        
'guid'            => '',
        
'compatibility' => '16*'
    
);
}
function 
wojna_activate() {
    global 
$db$mybb;
    
    require 
MYBB_ROOT."/inc/adminfunctions_templates.php";
    
$template = array(
        
"title"        => "posty_w_temacie",
        
"template"    => '<table class="tborder">
        <tr>
        <td class="thead" colspan="2">Tytuł</td>
{$posty_w_temacie_row}
</table>'
,
        
"sid"        => -1
    
);
    
$db->insert_query("templates"$template);
    
    
$template = array(
        
"title"        => "posty_w_temacie_row",
        
"template"    => '<tr>
<td> post o tytule {$info[\\\'subject\\\']} <td> treść: {$info[\\\'message\\\']} </td>
</tr>'
,
        
"sid"        => -1
    
);
    
$db->insert_query("templates"$template);
}
function 
wojna_deactivate(){
    global 
$db$mybb;
    require 
MYBB_ROOT."/inc/adminfunctions_templates.php";
    
$db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='posty_w_temacie'");
    
$db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='posty_w_temacie_row'");
    
rebuild_settings();
}

function 
posty_w_profilu()
{
    global 
$mybb$templates$memprofile$db$posty_w_temacie_row$posty_w_temacie;
    
    
$query $db->query("SELECT * FROM ".TABLE_PREFIX."posts WHERE uid='".$memprofile['uid']."'");

    while(
$info $db->fetch_array($query)){
eval(
'$posty_w_temacie_row = "'.$templates->get('posty_w_temacie_row').'";');
}
eval(
'$posty_w_temacie = "'.$templates->get('posty_w_temacie').'";');

Przecież nie masz tak jak napisał Supryk.
Masz to:
$template = array(
        
"title"        => "posty_w_temacie_row",
        
"template"    => '<tr>
<td> post o tytule {$info[\\\'subject\\\']} <td> treść: {$info[\\\'message\\\']} </td>
</tr>'
,
        
"sid"        => -1
    
); 
A powinno być:
$template = array(
        
"title"        => "posty_w_temacie_row",
        
"template"    => '<tr>
<td> post o tytule {$info[\'subject\']}</td><td> tresc: {$info[\'message\']} </td>
</tr>'
,
        
"sid"        => -1
    
); 
Lub ewentualnie:
$template = array(
        
"title"        => "posty_w_temacie_row",
        
"template"    => "<tr>
<td> post o tytule {\$info['subject']}</td><td> tresc: {\$info['message']} </td>
</tr>"
,
        
"sid"        => -1
    
); 

Z innych mniejszych błędów - masz jeszcze niedomknięty <tr>:
<tr>
        <
td class="thead" colspan="2">Tytuł</td
Niepotrzebnie wymagasz tego pliku (nie używasz z niego żadnej funkcji):
require MYBB_ROOT."/inc/adminfunctions_templates.php"
No i niepotrzbenie używasz rebuild_settings(), nie masz żadnych ustawień.



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

2 gości