Zur Boardunity Forenstartseite
  #1  
Alt 02.03.2004, 17:33
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110

Fragen zu Modifikationen


Moin Philipp, Jan und alle anderen die sich mit X-Mentor gut auskennen.

Ich habe mich wohl dazu entschlossen X-Mentor für mein Politik-Magazin einzusetzen und habe dazu aber noch ein paar Fragen, weil ich gerade dabei bin, dass ganze ein wenig anzupassen.

Ich möchte Datensätze aus anderen SQL Tabellen auslesen und diese dann in dem Header Template ausgeben. Wie das technisch möglich ist, ist mir durchaus bewusst, allerdings werd ich nicht schlau aus dem Code. Wo soll ich den Code am besten einfügen, damit ich das erreichen kann?

Zweite Frage wäre, wie ich es denn realisieren kann die Kommentare direkt unter die Artikel anzeigen zu lassen. Könnt ihr mir dazu auch einen Tipp geben?


Wäre für Hinweise sehr dankbar.
__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #2  
Alt 02.03.2004, 18:12
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Du benutzt den Header, also ist folgende Funktion für dich wichtig:

PHP-Code:
    function header($array = array())
         {
             if(
USE_NL == 1) {
                 
$array['USE_NL_1'] = "-->";
                 
$array['USE_NL_2'] = "<!--";
             }
             return 
$GLOBALS['Template']->load('header'$array);
         } 
Templates:

An dieser Funktion kann man das ganze TPL-Parsen leicht erklären. Du siehst, dass $array ein Array mit Werten ist, die später in der Funktion load() übergeben werden. Dort werden sie mit geschweiften Klammern umgeben und kurzerhand ersetzt. Das heißt {foo} im Template wird per

$array['foo'] = "Dies ist ein String";

zu Dies ist ein String.

MySQL:

$GLOBALS['Sql'] enthält das Objekt für Datenbankzugriffe. Die Funktion getdata (ergo: $GLOBALS['Sql']->getdata("QUERY");) gibt dir Daten deiner Wahl zurück. Wenn es nur ein Ergebnis gibt (WHERE id = '1') ist es ein einfacher Array, wenn es mehrere gibt ein verschachtelter (array(array(),array(),...)). Es gibt auch noch andere Funktionen, die einmal verstanden, die Arbeit sehr erleichtern. Ein Blick in die Datei sql.class.php genügt (theoretisch). Wie verarbeitest du dieses Query jetzt? Z.B. so:

PHP-Code:
for($i 0$i count($ergebnisse); $i++){
    
       
$return. = $GLOBALS['Template']->load("dateiname_ohne_endung",$ergebnisse[$i]);
    
    } 
     
     return 
$return
Nur her mit Nachfragen, dass kommt dann bald in einer zweite Version der Doku ;)

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #3  
Alt 03.03.2004, 10:47
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Danke Philipp, dass geht schon mal.
Wie sieht das denn mit den Kommentaren unter den Artikeln aus?

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #4  
Alt 03.03.2004, 12:46
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Ich habs noch nicht ausprobiert, aber bau doch einfach eine Variable {kommentare} unter den Artikel ein und lass diese in der Funktion article() mit $this->comments($id); ersetzen. Sollte gehen. Anpassung der Optik dann wie gewohnt über die Templates.

PHP-Code:
 # auszug aus article($id):
 
 
$result[0]['kommentare'] = $this->comments($id);
 
 return 
$GLOBALS['Template']->load('article'$result[0]); 

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #5  
Alt 03.03.2004, 17:46
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Danke Philipp, aber ich muss nochmal auf die Ausgabe im Header zurück kommen.
Ich mach das ganze jetzt im Footer, ist ja aber kein Unterschied. Folgendes:

Ich möchte im Footer die letzten 10 Beiträge meines Forums ausgeben und nutze dafür folgenden Query:

PHP-Code:
$result mysql_query("SELECT * FROM bb1_threads ORDER BY lastposttime DESC LIMIT 0,10"); 
Um die Datensätze in die Variablen zu bekommen nutze ich eine While Schleife:

PHP-Code:
         while($data mysql_fetch_array($result))
       {

       if(
USE_NL == 1) {

       
$array['threadid'] = $data['threadid'];
       
$array['topic'] = $data['topic'];
       }
       } 
Das geht ja natürlich nicht, weil nur der letzte Datensatz eingetragen ist, was ja nicht sinn und zweck ist.

Kannst du mir sagen, wie ich es bewerkstellige, dass alle Datensätze ausgegeben werden?

Hier nochmal die ganze footer Funktion

PHP-Code:
    function footer($array = array())
    {
    
          
$result mysql_query("SELECT * FROM bb1_threads ORDER BY lastposttime DESC LIMIT 0,10");
          echo 
mysql_error();
        
         while(
$data mysql_fetch_array($result))
       {

       if(
USE_NL == 1) {

       
$array['threadid'][] = $data['threadid'];
       
$array['topic'][] = $data['topic'];
       }
       }
    
      return 
$GLOBALS['Template']->load('footer'$array);
    } 

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #6  
Alt 03.03.2004, 17:56
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Warum lädst du nicht ein Template?

Bsp (unterhalb von echo mysql_error()):
PHP-Code:
  $array['boardentrys'] = '';
  if(
USE_NL == 1) {
      while(
$data mysql_fetch_assoc($result)) {
          
$array['boardentrys'] .= $GLOBALS['Template']->load('boardentrys'$data);
      }
  } 
Und dann im Footer {boardentrys} an die Stelle, an der die Einträge stehen sollen...
Dann müsstest du natürlich noch ein Template anlegen (hier: boardentrys).

So würde ich das jedenfalls machen...

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #7  
Alt 03.03.2004, 18:09
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Ja, dass geht schon mal!
Aber wie kann ich jetzt die Strings, die ausgegeben werden, verkürzen? Also abbrechen und ... dahintersetzen?

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #8  
Alt 03.03.2004, 18:31
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Ein Blick auf die Funktion substr genügt.

Korrekt sähe das ganze so aus:

PHP-Code:
function footer($array = array(NULL)) {
  
    
$result $GLOBALS['Sql']->getdata("SELECT * FROM bb1_threads ORDER BY lastposttime DESC LIMIT 0,10");
  
    if(
USE_NL == 1) {
  
        for(
$x 0$x count($result); $x++){
  
          if(
strlen($result[$x]['topic']) > 10) { $result[$x]['topic'] = substr($result[$x]['topic'],0,10).'...'; }
          if(
strlen($result[$x]['topic']) <= 10){ $result[$x]['topic'] = $result[$x]['topic'].'...'; }
  
          
$array['boardentries'] .= $GLOBALS['Template']->load('boardentries'$result[$x]);
  
        }
        
    }
  
    return 
$GLOBALS['Template']->load('footer'$array);
  
  } 
Edit: Baut bitte in Zukunft auf die MySQL-Funktionen, das erleichtert euch die Arbeit und uns das Bugfixen ;-)

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer

Geändert von Philipp Gérard (03.03.2004 um 19:37 Uhr).
  #9  
Alt 02.04.2004, 12:50
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Philipp ich glaub ich muss dich noch einmal mit meinen Fragen nerven. Das hat alles gut geklappt, auch die Ausgabe im Header Template. Aber eins funktioniert nicht. Es ist wieder eine SQL Abfrage und ich habe sie genauso wie die andere in die header function gepackt.

PHP-Code:
$result2 $GLOBALS['Sql']->getdata("SELECT * FROM xmentor_quote ORDER BY RAND() LIMIT 1");

if(
USE_NL == 1) {

for(
$x 0$x count($result2); $x++){

$array['quotetemp'] .= $GLOBALS['Template']->load('quotetemp'$result[$x]);

}


mein quotetemp.tpl sieht so aus:

PHP-Code:
{quote} - {author
Und genauso wirds auch ausgegeben. Also es erscheint lediglich:

{quote} - {author}


Hast du eine Idee, was das sein könnte?

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #10  
Alt 02.04.2004, 13:41
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Bin zwar nicht Phillip, aber so sollte es gehen:
PHP-Code:
$result2 $GLOBALS['Sql']->getdata("SELECT * FROM xmentor_quote ORDER BY RAND() LIMIT 1");
 
 if(
USE_NL == 1) {
 
$limit count($result2);
 for(
$x 0$x $limit$x++){
 
 
$array['quotetemp'] .= $GLOBALS['Template']->load('quotetemp'$result2[$x]);
 
 }
 
 } 

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #11  
Alt 02.04.2004, 13:45
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Hey Danke Patrick. Hat wunderbar geklappt!

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #12  
Alt 02.04.2004, 13:59
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Aber dummerweise funktioniert nun die Zufallsausgabe nicht so, wie sie soll.

PHP-Code:
SELECT FROM xmentor_quote ORDER BY RAND() LIMIT 1 
gibt nur den letzten Eintrag aus.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #13  
Alt 02.04.2004, 14:06
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Was hat die die Zufallsausgabe von Zitaten mit dem Newsletter zu tun?

Folgender Code sollte seinen Zweck erfüllen, ohne unnötige Rechenzeit zu verschwenden:

PHP-Code:
$result2 $GLOBALS['Sql']->getdata("SELECT * FROM xmentor_quote ORDER BY RAND() LIMIT 1");
 
$array['quotetemp'] = $GLOBALS['Template']->load('quotetemp'$result2[0]); 

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #14  
Alt 02.04.2004, 14:08
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
hmm die IF Abfrage ist mir da wohl so reingerutscht ... keine Ahnung warum.
Aber die Zufallsausgabe funktioniert immer noch nicht. Es wird immer nur der neuste Eintrag ausgegeben.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #15  
Alt 02.04.2004, 14:24
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Ist denn mehr als ein Zitat in der Tabelle?

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #16  
Alt 03.04.2004, 00:04
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Klar! 3.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #17  
Alt 03.04.2004, 00:53
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Der SQL-Code ist korrekt - daran kann es nicht liegen...

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #18  
Alt 03.04.2004, 12:11
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Ich habe bereits eine Lösung gefunden. Danke für die Mühen.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens

Geändert von Daniel Richter (03.04.2004 um 21:09 Uhr). Grund: Lösung gefunden
  #19  
Alt 06.04.2004, 18:18
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Sag mal Philipp, gibt es auf der Artikelübersichtsseite (also da wo die einzelnen Artikel aufgelistet werden, auch in den Kateogrien ... kurz gesagt, dass article_preview Template) eine Möglichkeit, die Anzahl der im Artikel vorhandenen Kommentare auszugeben?

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #20  
Alt 10.04.2004, 17:02
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Philipp keine Idee?

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #21  
Alt 10.04.2004, 22:42
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Für Kategorien (bei der Startseite musste es halt einfach anpassen:
Funktion category:
Suche:
PHP-Code:
$result $GLOBALS['Sql']->getdata("SELECT id,title,pretext,time,author,preimg 
Füge dahinter ein:
,comments

Nun hast du die Anzahl der Kommentare im als Template-Variable.
(Hoffe ich zumindest... ")

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #22  
Alt 11.04.2004, 10:48
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Ne das stimmt leider nicht. Damit liest man nur aus, ob die Erlaubnis für das Abgeben von Kommentaren erlaubt ist. Das heisst es wird 1 oder 0 ausgegeben.

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #23  
Alt 11.04.2004, 11:10
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
*räusper*
Stimmt... bitte nicht meckern... war gestern spät und ich hab in die falsche Versiongeguckt... genau das, was du haben willst hab ich nämlich fertig in meiner Version drin:

PHP-Code:
    function index()
     {
         
$result $GLOBALS['Sql']->getdata("SELECT id,title,pretext,time,author,preimg,comments FROM " SQL_PREF SQL_TBL2 " WHERE status='1' ORDER BY time DESC LIMIT " NUM_FRONT);
         
$return "";
         for(
$x 0$x count($result); $x++) {
             if(
$result[$x]['comments'] == 1) {
                 
$query $GLOBALS['Sql']->query('SELECT COUNT(id) AS counted FROM '.SQL_PREF.SQL_TBL3.' WHERE artid='.$result[$x]['id']);
                 
$result[$x]['comments'] = $GLOBALS['Sql']->result($query0'counted'); 
             } else {
                 
$result[$x]['comments'] = 0;
             }
             
$result[$x]['comment'] = $result[$x]['comments'] != 'Kommentare' 'Kommentar'
Aber immerhin hatte ich schonmal den einen Teil der Lösung verraten... "

Funktion category:
PHP-Code:
        for($x 0$x count($result); $x++) {
             if(
$result[$x]['comments'] == 1) {
                 
$query $GLOBALS['Sql']->query('SELECT COUNT(id) AS counted FROM '.SQL_PREF.SQL_TBL3.' WHERE artid='.$result[$x]['id']);
                 
$result[$x]['comments'] = $GLOBALS['Sql']->result($query0'counted'); 
             } else {
                 
$result[$x]['comments'] = 0;
             }
             
$result[$x]['comment'] = $result[$x]['comments'] != 'Kommentare' 'Kommentar'
Ich sollte so spät nicht versuchen zu denken... "

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #24  
Alt 11.04.2004, 11:38
Benutzerbild von Daniel Richter
TVBlogger
 
Registriert seit: 07.2003
Ort: Wilhelmshaven
Beiträge: 2.110
Funktioniert auch nicht *grübel*

Fehler auf der Index
Code:
Fatal error: Call to undefined function: result() in /www/htdocs/pforen/inc/system.class.php on line 140

Fehler in der Kategorie
Code:
Fatal error: Call to undefined function: result() in /www/htdocs/pforen/inc/system.class.php on line 283

Hast du vielleicht ne andere version? Ich hab die neuste (pl2)

__________________
Daniel Richter
Immer ein Besuch wert: TVBlogger.de - Aktuelle Nachrichten aus der Welt des Fernsehens
  #25  
Alt 11.04.2004, 12:59
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Die Anzahl der Kommentare kann man auch mit einer Abfrage auslesen, dafür muss man nicht für jeden Artikel eine neue Abfrage an die Datenbank absetzen.
Ich kenn mich jetzt mit dem X-Mentor nicht besonders gut aus, aber wenn du die Artikel folgendermaßen ausliest sollte das funktionieren.

PHP-Code:
$result $GLOBALS['Sql']->getdata("SELECT a.id, a.title, a.pretext, a.time, a.author, a.preimg, a.comments, COUNT(c.id) AS num_comments FROM " SQL_PREF SQL_TBL2 " a LEFT JOIN  ".SQL_PREF.SQL_TBL3." c ON c.artid = a.id WHERE status='1' GROUP BY c.artid ORDER BY time DESC LIMIT " NUM_FRONT); 
In der Spalte 'num_comments' steht dann jeweils die Anzahl der Kommentare für den jeweiligen Artikel. Die Zahl ins Template reinzubringen sollte dann ja kein Problem mehr sein.

 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mandrake 10.0 + LAMPP Fragen rellek Webspace, Webserver, Domains 1 28.10.2004 00:02
2 Fragen Mogli Onlinerecht, Datenschutz und Sicherheit 3 02.07.2004 15:52
Ein paar Fragen an unsere vB3-Experten: Silmarillion Forensoftware 8 11.06.2004 14:55
Mehrere Fragen zum Invision Board Floh Forensoftware 4 12.03.2004 19:27






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25