Afisare ultimele subiecte din forum

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
razvik
Mesaje: 9

Afisare ultimele subiecte din forum

Salutare.
Stie careva cum pot sa fac sa extrag si eu (intr-o pagina php) ultimele posturi facute pe un anume forum ? (platforma phpbb3).
Sa dezvolt putin ideea cam ce as dori sa fac: doresc sa creez un tabel pe una din paginile mele php in care sa fie de exemplu ultimele 5posturi facute recete pe forumul X

Multumesc mult pt timpul acordat si sper sa ma poata ajuta cineva :)
Totul ti se pare mare atunci cand esti mic :)

MarPlo
Salut
Vezi poate e bun scriptul de aici: Afisare ultimile subiecte de pe forum. Se foloseste de pagina RSS generata de forum.

razvik
Ms mult MarPlo pt raspuns.
Citisem pagina aceea. Doar ca am o mica problema. Nu am instalat RSS-ul pe phpbbu meu (am activat doar ala din ACP, dar nu vad sa-mi fi creat vreo pagina xml pe undeva).
Am incercat sa caut pe paginile celor de phpbb mod-ul acela dar sunt vreo 3 (sau mai multe) si nu stiu care e bun (ca sa mi se potriveasca cu scriptul postat de tine, repet il instalez doar ca sa imi mearga scriptu tau).

Mersi pt timpul acordat
Totul ti se pare mare atunci cand esti mic :)

MarPlo
Nu ma pricep asa bine la phpbb. Pt. rss nu am instalat nici un modul, l-am activat din panoul de administrare.
Apoi, din codul sursa a paginii de start a forumului am copiat adresa pt. rss care e adaugata in zona html <head>.

razvik
Mersi inca odata MarPlo pt raspuns.

Am reusit in mare. Asa am facut si eu cum ai zis si tu (din control panel), am crezut ca trebuie neaparat sa mi se creeze o lista xml ca sa pot folosi scriptul. Nu sunt vreun expert, invat cate ceva pe fiecare zi cu ajutorul oamenilor ca tine.
Am trecut mai departe si am luat scriptul tau si am reusit. Am incercat sa`l modific (ca sa imi arate informatia extrasa din xml intr-un tabel pe pagina mea, asa ca am incercat sa creez un tabel in care sa fie pusa informatia aia). Nu l`am reusit bine si nici nu stiu daca scrierea am facut`o corect.

Cod: Selectaţi tot

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>

<center><table border=0 class=margins cellspacing=1 width=99%>
<tr><td><center><b>Titlu</b></center></td>
<td><center><b>Data</b></center></td>
<td><center><b>Continut</b></center></td>

</tr>

<?php
// Script preluare ultimile subiecte de pe forum (PHPBB 3.0.7+ si MyBB 1.4) din fisirere XML [Atom 1.0]
// De la https://marplo.net/php-mysql

$file_xml = 'http://www.freecs.ro/forum/feed.php';     // Aici se modifica cu adresa paginii de flux a forumului
$nr_subj = 5;         // Numarul maxim de subiecte afisate
$nr_cuv = 11;          // Numarul maxim de cuvinte afisate din continutul fiecarui subiect

// Matrice cu numele tag-urilor ce trebuie preluate din XML
$tags_xml = array('baza'=>'entry', 'titlu'=>'title', 'url'=>'id', 'content'=>'content', 'data'=>'updated');

// Functia preia si parseaza datele din fisierul XML
// Returneaza un cod HTML cu ultimile subiecte
function get_last_forum($file_xml) {
  GLOBAL $nr_subj, $nr_cuv, $tags_xml;
  $re_html = '<h4>Ultimile 5 subiecte de pe forum</h4><table>';            // Variabila cu codul HTML ce va fi returnat

  $obj = simplexml_load_file($file_xml);    // Initializeaza obiectul SimpleXML
  $baza = $obj->$tags_xml['baza'];          // Preia toate elementele cu nume "entry" (intr-o variabila tip array)
  $nr_subj = min($nr_subj, count($baza));   // Defineste nr. subiecte parcurse

  // Parcurge matricea $baza si preia elementele cu tag-urile necesare
  for($i=0; $i<$nr_subj; $i++) {
    $titlu = $baza[$i]->$tags_xml['titlu'];                // Preia titlu
    $url = $baza[$i]->$tags_xml['url'];                     // Preia adresa
    $content = strip_tags($baza[$i]->$tags_xml['content']);            // Preia continutul (fara tag-uri)
    $data = $baza[$i]->$tags_xml['data'];               // Preia data

       /* Se fac prelucrarile necesare */

    $url = str_replace('&', '&', $url);   // Pt. a fi valid xhtml

    // Preia nr. de cuvinte specificat
    $ar_cuv = str_word_count($content, 2);
    $nr_cuv = min($nr_cuv, count($ar_cuv));
    $ar_cuv = array_slice($ar_cuv, 0, $nr_cuv);
    $content = implode(' ', $ar_cuv). ' ...';

    // Aranjeaza data
    $ar_data = date_parse($data);     // Transforma formatul datei transmis intr-un Array parti ale datei
    $data = $ar_data['day'].'-'.$ar_data['month'].'-'.$ar_data['year'];    // Defineste formatul de data dorit
    $re_html .= '<td class=margins><a href="'. $url. '" title="'. $titlu. '">'. $titlu. '</a></td> <td class=margins><center>'. $data. '</center></td><td class=margins><center>  '. $content. '</center></td></tr>';
  }

  return $re_html. '</table></center>';
}

echo get_last_forum($file_xml);           // Afiseaza rezultatul functiei
?>
Cam asa arata noul cod (dupa ce am incercat eu sa creez acel tabel nenorocit).
1. La prima vedere nu e aliniat cum trebuie. Ajuta-ma cu niste sfaturi sau ce mai trebuie sa adaug/sterg in caz ca ceva nu e bine.
2. Am mai incercat ceva (ce ma depaseste dar m-am uitat in alte surse si am incercat sa fac dupa ele), as vrea ca in presupusul tabel al meu sa pot extrage si autorul. Pentru inceput eu as fi multumit doar Titlu(si urlu catre subiect) , Data si Autor macar atat :)

Mersi mult inca o data
Totul ti se pare mare atunci cand esti mic :)

MarPlo
Ca sa extragi datele din XML, e necesar sa-l studiezi, sa vezi structura tag-urilor.
Daca vrei sa inveti despre asta, e lectia SimpleXML.
Daca structura e la fel, cred ca autorul poate fi preluat cu codul:

Cod: Selectaţi tot

$autor = $baza[$i]->author->name;
- care trebuie adaugat unde se preia si $titlu, $url ...

Cat despre tabel, nu am testat. Incearca sa adaugi align="center" in tagul <table>, si un ID la care aplici proprietati in CSS.

desenefaine
Salut MarPlo, la mine cand accesez forum.php imi apare asa la fel si pe site

Cod: Selectaţi tot

'entry', 'titlu'=>'title', 'url'=>'id', 'content'=>'content', 'data'=>'updated'); // Functia preia si parseaza datele din fisierul XML // Returneaza un cod HTML cu ultimile subiecte function get_last_forum($file_xml) { GLOBAL $nr_subj, $nr_cuv, $tags_xml; $re_html = '
Ultimile subiecte pe Forum
'; // Variabila cu codul HTML ce va fi returnat $obj = simplexml_load_file($file_xml); // Initializeaza obiectul SimpleXML $baza = $obj->$tags_xml['baza']; // Preia toate elementele cu nume "entry" (intr-o variabila tip array) $nr_subj = min($nr_subj, count($baza)); // Defineste nr. subiecte parcurse // Parcurge matricea $baza si preia elementele cu tag-urile necesare for($i=0; $i<$nr_subj; $i++) { $titlu = $baza[$i]->$tags_xml['titlu']; // Preia titlu $url = $baza[$i]->$tags_xml['url']; // Preia adresa $content = strip_tags($baza[$i]->$tags_xml['content']); // Preia continutul (fara tag-uri) $data = $baza[$i]->$tags_xml['data']; // Preia data /* Se fac prelucrarile necesare */ $url = str_replace('&', '&', $url); // Pt. a fi valid xhtml // Preia nr. de cuvinte specificat $ar_cuv = str_word_count($content, 2); $nr_cuv = min($nr_cuv, count($ar_cuv)); $ar_cuv = array_slice($ar_cuv, 0, $nr_cuv); $content = implode(' ', $ar_cuv). ' ...'; // Aranjeaza data $ar_data = date_parse($data); // Transforma formatul datei transmis intr-un Array parti ale datei $data = $ar_data['day'].'-'.$ar_data['month'].'-'.$ar_data['year']; // Defineste formatul de data dorit $re_html .= '
'. $titlu. ' ('. $data. ')
      '. $content. '
'; } return $re_html. '
'; } echo get_last_forum($file_xml); // Afiseaza rezultatul functiei ?>

MarPlo
Salut
Scriptul e cam vechi, de cand aparuse phpbb 3.0, nu stiu daca in forma care e functioneaza cu versiunea actuala de phpbb.
- Ca sa nu mai afiseze cum ai postat, pune la inceputul fisierului php: <?php (in loc de "<? ").

MarPlo
Am modificat codul scriptului de pe site pt. afisare ultimile subiecte din forum ca sa functioneze cu phpbb 3.2.

Subiecte similare