Zur Boardunity Forenstartseite

Zurück   Boardunity & Video Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 12.08.2004, 14:23
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639

Sammelthema, mein Weblog


Hallo,

Für ein Projekt dessen Domain ich mir gestern gesichert habe bin ich grad dabei ein Weblog zu programmieren.

Nase geht ja mit der Zeit und so versuche ich Klassen und Funktionen einzusetzen.

Da ich nicht ganz so die grosse PHP-Leuchte bin tauchen sicherlich Fragen auf die ihr hier in diesem Thema sammeln werde damit ihr mit kompetent wie immer zur Seite stehen könnt

Momentan ist das Weblog relativ simpel, über ein Admincenter kann ein Beitrag angegeben werden der dann in der Datenbank gespeichert wird. Das besondere daran ist, dass gleichzeit eine index.html erstellt wird die alle Beiträge enthält (in meinem Fall die letzten 15). Die alte index.html wird ins Archiv verschoben und umbenannt. Auf diese Weise bekommt jeder Besucher eine fertig generierte Seite präsentiert und PHP arbeitet nur im Backend. Die Archivseite liest das Verzeichnis 'archiv' aus und präsentiert den Inhalt zum einfachen Betrachten älterer Beiträge.


Nun ist meine erste konkrete Frage wie ich innerhalb der Klassen agieren kann..
Wenn ich z.B. eine Klasse namens 'core' hab, dann noch die Klasse 'templates' und die Klasse 'database', wie kann ich dann Funktionen aus der Klasse 'template' in Funktionen der Klasse 'core' verwenden?
  #2  
Alt 12.08.2004, 18:11
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Normalerweise geht das über den Namen der Klasse selbst:

PHP-Code:
class test
{
   function 
blubb
   
{
       
//...
   
}
}

class 
test2
{
   function 
blubb
   
{
       
test::blubb();
   }

Oder du machst das Objekt der einen Klasse in der Funktion mit 'global' verfügbar und greifst darüber auf die Methode zu:

PHP-Code:
class test
{
   function 
blubb
   
{
       echo 
"bla";
   }
}

class 
test2
{
   function 
blubb
   
{
       global 
$obj;
       
$obj->blubb();
   }
}

$obj = new test();
$obj2 = new test2();

$obj2->blubb(); 

Meiner Meinung nach hast du das Archiv noch nicht genau durchdacht, da du dann ja mit jedem neuen Eintrag eine neue Archivdatei hast, wobei sich Einträge im Archiv wiederholen würden, da ja immer die letzten 15 angezeigt werden.
Ich fände es besser wenn du jedes Mal eine Extra-Archivdatei generieren lassen würdest (die alle Einträge beinhaltet).
Evtl. würde ich sogar soweit gehen noch eine Seitenaufteilung über mehrere Dateien einzubauen.


code

  #3  
Alt 12.08.2004, 19:19
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ich schätze mal, dass Singleton die richtige Strategie für dich sein dürfte.

PHP-Code:
<?php
 
class Core {
     function &
getInstance() {
         if(isset(
$GLOBALS['Singleton.Core.class'])) {
             return 
$GLOBALS['Singleton.Core.class'];
         } else {
             
$GLOBALS['Singleton.Core.class'] = &new Core();
             return 
$GLOBALS['Singleton.Core.class'];
         }
     }
     
     function 
render() {
         
$tpl Template::getInstance();
         return 
$tpl->get('core_main'$this->data);
     }
 }
 
 class 
Template {
     function &
getInstance() {
         if(isset(
$GLOBALS['Singleton.Template.class'])) {
             return 
$GLOBALS['Singleton.Template.class'];
         } else {
             
$GLOBALS['Singleton.Template.class'] = &new Template();
             return 
$GLOBALS['Singleton.Template.class'];
         }
     }
 }
 
?>
Alternativ kannst du dir die Variante von X-Mentor ansehen oder die entsprechenden Klassen als Instanz in einer Variable der Klasse speichern und diese dann entweder per Konstruktor (oder Methode) übergeben oder im Konstruktor anlegen.

Ich habe übrigens bewusst auf das static-Keyword verzichtet... bei mir hat es bislang noch nie funktioniert.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #4  
Alt 13.08.2004, 13:47
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Hallo und Guten Morgen,

Mittlerweile stehe ich vor einem ganz anderen Problem *g*

Ich habe eine XML-Datei, die, dank exe, geparsed wird und aktuelle Wetterinformationen aus meiner Umgebung liefert.

Leider darf das Script maximal einmal pro 15 Minuten aufgerufen werden, sodass ich die Daten zwischenspeichern muss.

Ich hatte mir da folgendes Überlegt:

Code:
 $time = file_get_contents('time.txt');
 
 if(time() >= ($time+(60*15))) {
 // XML-Datei wird geparsed
 // Datenbank wird gefüttert
 // time.txt wird mit aktuellem Timestamp gefüllt
 }
 else {
 // Datenbankabfrage
 }
Hat da jemand nen anderen Vorschlag zu?

  #5  
Alt 13.08.2004, 13:57
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Cronjob, aber du kannst es dir noch einfacher machen bei deinem Script.

1. Daten auslesen, paren und in als fertiges HTML in eine Cachedatei schreiben.
2. Cachedatei via include einfügen.
3. Bei jedem Aufruf prüfst du das Erstellungsdatum der Datei mit filemtime(), und wenn die Datei 15 Minuten alt ist, wird der die Cachedatei neu erstellt.

  #6  
Alt 13.08.2004, 14:03
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Cronjobs hat mein Packet leider nicht

Das Problem bei einer fertigen Seite ist, dass ich dann ja keine Variablen mehr zur Verfügung habe. Die brauche ich aber, damit sie in der fertigen Seite in den Templates verwendet werden können.

  #7  
Alt 13.08.2004, 19:34
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Axo, das war ja reines HTML. Ich erinner mich... Das macht es natürlich etwas schwieriger, dort etwas dynamisches reinzubauen.

  #8  
Alt 13.08.2004, 21:36
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
So, jetzt hab ich ein Problem bei dem ich an mein Latein stosse..

Code:
 while($row = $db->fetch($result))
  	{
  		echo '<div />';
  	}
Und damit lese ich Einträge aus der Datenbank aus. (ganz offensichtlich )

Da ich damit eine Bildergalerie generieren will brauch ich nach 4 Durchläufen ein <br /> und dann soll es mit <div /> weitergehen. Sodass ich am Ende sowas wie

<div /><div /><div /><div /><br /><div /><div /><div /><div /><br />
<div /><div /><div /><div /><br /><div /><div /><div /><div />

habe.

Wie muss ich die Schleife verändern?

  #9  
Alt 13.08.2004, 21:41
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Zitat:
21:39 >> <Reimer`away> nase: Mit zählen: $i=0; in der Schleife $i um eins erhöhen; if i==4 echo <br />
Siehe IRC

  #10  
Alt 14.08.2004, 00:23
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Zitat:
[21:44] <nase_> http://paste.calitrix.de/29 ?


Nun ein anderes Problem. Die Einträge habe ich ausgelesen, gut und schön. Nun möchte ich aber z.B. alle Einträge vom Mai unter der Überschrift 'Mai' haben damit es wie folgt aussieht:

laufender Monat
| Eintrag | | Eintrag | | Eintrag | | Eintrag |

Juli
| Eintrag | | Eintrag | | Eintrag | | Eintrag |


Wie muss ich da vorgehen? Brauche ich da mehr als eine Abfrage? Wie muss ich die While-Schleife verändern?

  #11  
Alt 14.08.2004, 08:42
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Du speicherst ja das Datum, an dem du den Eintrag erstellt hast, also kannst du dir mit Date einfach den Monat als Zahl wiedergeben lassen.

Beispiel:
PHP-Code:
<?php
 $result 
$db->query('SELECT * FROM entries ORDER BY posttime DESC LIMIT 25');
 
$lastMonth 0;
 while(
$entry $result->next()) {
     
$month date('n'$entry['posttime']); // n = "Numeric representation of a month, without leading zeros"
     
if($month != $lastMonth) {
         
$lastMonth $month;
         echo 
'<h1>'.getGermanMonth($lastMonth).'</h1>';
     }
     
// [...]
 
}
 
?>
Die Funktion "getGermanMonth" müsstest du noch implementieren, im Idealfall sollte sie den deutschen Namen des übergebenen Monats wiedergeben.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #12  
Alt 14.08.2004, 13:41
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Hallo,

Verstanden wie du es meinst habe ich es. Nur leider bekomme ich es nicht zusammengeschustert. Hier mal mein Code, vielleicht kannst du es ja zusammenbringen?!
PHP-Code:
  $Tarchiveintrag = new Template("./templates/archiveintrag.html");
  
  
$result   $db->query('SELECT * FROM eintrag ORDER BY id DESC LIMIT 1,40');
  
  
$i 0;
  
$lastMonth 0;    
  
  while(
$row $db->fetch($result)) {
      
  
$month date('n'$row['zeit']); // n = "Numeric representation of a month, without leading zeros"
      
if($month != $lastMonth) {
          
$lastMonth $month;
          
$monat '<h1>'.$lastMonth.'</h1>';
      }
      
$row['ueberschrift'] = chopstring($row['ueberschrift'],15);
     
$code "<div class=\"thumbnail\"><img src=\"bild.php?filename=".$row['bild']."&size=menu\" width=\"125px\" /><br />".$row['ueberschrift']."</div> \n\n";
      
      if(
$i == '4') {
          
$code '<br />';
          
$i 0;
      }        
          
      
$i++;
      eval(
$Tarchiveintrag->GetTemplate('ARCHIV'));
  } 
Hinterher soll es dann z.B. so ausehen:

laufender Monat
| Eintrag | | Eintrag | | Eintrag | | Eintrag | <br />
| Eintrag | | Eintrag |

Juli
| Eintrag | | Eintrag | | Eintrag | | Eintrag | <br />
| Eintrag | | Eintrag | | Eintrag | | Eintrag | <br />
| Eintrag | | Eintrag |


Geändert von MrNase (14.08.2004 um 15:41 Uhr).
  #13  
Alt 15.08.2004, 11:09
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Guten Morgen,

Dank einer schlaflosen Nacht und MaMo der es gestern geschafft hat mir zu helfen bin ich nun schon was den eigentlichen Code angeht ziemlich weit vorgeschritten.

Zum generieren der Bilder verwende ich die gdlib, Bilder werden über die Datei 'bild.php' ausgegeben (z.B. <img src="bild.php?filename=pic_d36cac6cd40764fa7fd0496 bf2f89855&size=large" />)
Nun ist die bild.php relativ ungesichert und die GDLib geht ja ganz schön auf die Serverperformance. Deswegen möchte ich die bild.php gerne vor aufrufen von Aussen schützen.

Wie stelle ich es geschickt an? Eine htaccess -Datei die rausfindet ob die Anfrage von meiner Domain kommt und wenn nicht ein Fehlerbild ausgibt? Wenn ja, wer kennt weitere Quellen bzw. hat was zur Hand?

  #14  
Alt 18.08.2004, 18:43
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Huhu,

Ich schieb es mal nach oben in der Hoffnung doch noch ne Antwort zu bekommen

  #15  
Alt 18.08.2004, 22:06
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Mit htaccess und Mod_Rewrite ist das relativ einfach möglich: www.trafficklau.de

  #16  
Alt 18.08.2004, 22:42
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Da hab ich schon geschaut.. Das Script soll nur ausgeführt werden, wenn z.B. die Seite

http://www.blatest.de/index.php die Datei http://www.blatest.de/bild.php als Bild einbindet. Da kann ich nicht mit einer htaccess-Datei arbeiten. Zumindest habe ich dort keine Funktionierende Lösung gefunden

  #17  
Alt 08.09.2004, 21:37
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Hast du inzwischen die Lösung gefunden?
Wenn nicht:
Du könntest ja theoretisch die Grafikdatei mit einer PHP-Datei laden.
Sodass es dann in etwa so aussieht: <img src="pic.php?file=bild.jpeg" ... /> .
Die Bilddatei selber könntest du dann mit .htaccess schützen, da PHP .htaccess AFAIK umgeht und .htaccess somit keinen Einfluss hat.

PS: Kannst du mir eigentlich mal die URL deines feinen Weblogs geben?

  #18  
Alt 08.09.2004, 21:57
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Zitat:
Zitat von MrNase
Da hab ich schon geschaut.. Das Script soll nur ausgeführt werden, wenn z.B. die Seite

http://www.blatest.de/index.php die Datei http://www.blatest.de/bild.php als Bild einbindet. Da kann ich nicht mit einer htaccess-Datei arbeiten. Zumindest habe ich dort keine Funktionierende Lösung gefunden
Du könntest anhand der Refererangabe sowas in der Art basteln. Dabei müsstest du in der bild.php prüfen ob im Referer deine Domain steht. Sowas in der Art:
PHP-Code:
<?PHP
$myDomain 
'http://'.$_SERVER['SERVER_NAME'];
$referer  = isset($_SERVER['HTTP_REFERER']) ? substr($_SERVER['HTTP_REFERER'], 0strlen($myDomain)) : '';

if(
$referer != $myDomain) {
    die(
'Hau bloss ab ...');
}
?>
Allerdings ist das keine sehr sichere Methode da der Referer vom Client angegeben wird und daher auch beliebig gefälscht werden kann.

Eine sichere Methode gibt es da nicht da ein serverseitiges Script nicht feststellen kann ob der Client die Anfrage nach dem Bild aufgrund eines HTML-Befehls stellt oder nicht.

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #19  
Alt 09.09.2004, 07:18
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Hm, ich hab bei mir die Möglichkeit übersehen, dass der User das Bild direkt über pic.php?file=wasweißich aufruft.

Nach langem Suchen habe ich doch noch den Artikel gefunden, den ich vor einiger Zeit gelesen habe:
http://aktuell.de.selfhtml.org/artik...ages/index.htm

Du könntest evtl. also so vorgehen:
<img src="<?php include('pic.php?file=bla'); ?>" ... />
Wobei pic.php den Inhalt der Bilddatei lädt.
Ich bin mir jetzt allerdings nicht sicher, ob man der zu includierenden Datei einen Parameter angeben darf. Ggf. musst du vor das include() noch ein $file = "datei.jpeg"; schreiben, wobei du dann in der pic.php auf diese Variable zugreifst.


Ich weiß es ist umständlich, aber immernoch besser, als sich aufwendige Grafiken klauen zu lassen und dann mit TrafficKlau leben zu müssen.


Bis dann,

codethief


[EDIT]: Ich hab gerade bemerkt, dass diese Variante nicht überall funktioniert:
Zitat:
Zitat von SelfAktuell
Das funktioniert bei Netscape 4.x, aber leider nicht beim MS Internet Explorer 4.x - 5.x.

Antwort


Stichworte
-


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
Aus vBulletin ein Weblog - Jemand Erfahrungen? TRS Web Design und Grafik 11 07.05.2004 22:10
Sunlog :: Weblog and Contenmanagement Daniel Richter Blog, CMS, Wiki und Sonstige 12 07.02.2004 21:35






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