cms4ds - ein CMS für die DS

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
So - mittlerweile sind ja wieder ein paar Tage ins Land gegangen. Ich hab noch ein paar Dinge eingebaut und ein paar Ungereimtheiten beseitig.

Anbei eine zip-File, die das cms4ds komplett neu aufsetzt und mit einer Start-Datenbank versorgt. Es sind also alle Komponenten, die bislang hier diskutiert wurden enthalten. Mittels des eingebauten Editors kann man die Seiten abändern oder löschen oder neu hinzufügen und auf diese Weise das CMS kennen lernen.

Ich habe auch überlegt, ob ich das Ganze als spk-Paket schnüren soll, bin dann aber davon ab, weil man für die Datenbank-Aktionen eventuell ein Kennwort braucht, dass ich im spk-Paket aber nicht per Dialog anfordern kann.

Achtung: die angehängte Datei ist kein spk-Paket; sie hat nur die Dateiendung, damit sie hochgeladen werden konnte.

Für die Installation sind Vorbereitungen nötig:

(1) wir bauchen phpmyadmin, falls also noch nicht installiert, zuerst darum kümmern. Auch muss die Web Station aktiviert worden sein und laufen.
(2) eventuell vorhandene cms4ds-Tabellen in der Datenbank sichern und umbennen
(3) Download des cms4ds.zip.spk-Dateianhangs auf einen PC, umbenennen nach cms4ds.zip und entpacken; dann eventuell die Datei cms4ds.php.inc mit einen normalen (Windows-) Editor anpassen. Wenn man ein Datenbank-Kennwort für den Benutzer 'root' vergeben hat, dieses in die folgende Zeile einfügen:
Rich (BBCode):
$com = @mysql_connect("localhost","root","Kennwort");
(4) Kopieren des entpackten Verzeichnisses (cms4ds) ins DS-Verzeichnis /volume1/web (so dass danach /volume1/web/cms4ds entstanden ist) Das kann man auf Windows heraus machen oder mit der File Station.
(5) mit Telnet oder Ähnlichem als Benutzer 'root' auf der DS anmelden und folgendes ausführen:
Rich (BBCode):
cd /volume1/web; ln -s cms4ds.html index.html
(6) phpmyadmin aufrufen und im SQL-Fenster die Datei cms4ds.sql (vom PC aus) laden (Zeichenkodierung: cp1250) und ausführen
(7) im Browser eingeben: Ip_der_DS/cms4ds

Wie immer viel Spaß damit und daran denken, dass natürlich alles auf eigene Kappe geht :D. Alle Skripte und Dateien stehen unter der GPL3.

itari

PS. zip-file korrigiert ... und wer mal probieren will: cms4ds
 

Anhänge

  • cms4ds13.jpg
    cms4ds13.jpg
    117,6 KB · Aufrufe: 284
  • cms4ds.zip.spk
    148,4 KB · Aufrufe: 70
Zuletzt bearbeitet:

Benny

Benutzer
Mitglied seit
04. Aug 2008
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
cms4ds

Hallo itari

Ich habe alles so gemacht wie beschrieben, bekomme leider nur ein leeres Schirm und ein Fehler Meldung: LoadRSS2 is not defined. Was mach ich falsch?

Benny
 

Pompom

Benutzer
Mitglied seit
17. Jul 2008
Beiträge
70
Punkte für Reaktionen
0
Punkte
6
Hallo itari

Ich habe alles so gemacht wie beschrieben, bekomme leider nur ein leeres Schirm und ein Fehler Meldung: LoadRSS2 is not defined. Was mach ich falsch?

Benny

bei mir das gleiche!:confused:
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
ja ich hab mir das zip-file angesehen und da ist bei mir die Datei .htaccess nicht kopiert worden (warum auch immer), möglicherweise liegt es daran:

.htaccess:
Rich (BBCode):
Options +Includes
AddOutputFilter INCLUDES .php
XBitHack on

Also einfach noch erfassen und hinzufügen - am besten auch einen chmod 644 drauf machen. Ich hoffe nun, dass es das auch schon war.

itari
 

Pompom

Benutzer
Mitglied seit
17. Jul 2008
Beiträge
70
Punkte für Reaktionen
0
Punkte
6
Danke Itari das wars! :)

muss mich jetzt erst mal durch die Scripte durchwühlen!;)
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Habe leider noch nicht die Chance gehabt das cms selber auszuprobieren, (@itari: ;-) ) aber ich bin von itari's seite beeindruckt, wie flüssig das ganze läuft. Ich habe zusätzlich noch mit dem Problem zu kämpfen, dass ich meine dyndns-Adresse verstecken muss und daher von meinem domain-provider das angebotene url-hiding verwende. Dadurch explodieren die Zugriffszeiten bei allem, was keine reine html/css - datei ist. (insbesondere das Blog der Fotostation) Umso mehr freue ich mich schon auf meine ersten Gehversuche mit dem CMS.
Aber ein Ajax-Request-Wert von 0 ist dann doch etwas verwunderlich. Vielleicht liegt das aber auch an Google Chrome. (Ist ja nicht gerade einer der berühmteren Browser)

Mit Hinblick darauf, das cms noch ein wenig mehr in Richtung vollwertiges Blog zu bringen, hier noch ein paar Anregungen:
Kommentarfunktion
Die Seitenleiste sollte man bei zu vielen Einträgen eventuell kappen und dann unten einen verweis dran hängen "Alle Beiträge anzeigen".

Am Ende dann ein großes Lob an itari für seine Arbeit im Forum und am CMS. Was würden wir nur ohne dich machen!
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
hi Matthieu,

danke für dein Feedback. Das cms4ds soll keinen Kommentar entgegen nehmen, denn dafür bringt die DS ja schon was mit (DS Blog). Natürlich könnte man das cms4ds auch zu einem Blog mit Kommentar ausbauen, aber es sind dann doch recht umfangreiche Blockierungen nötig und der Geschwindigkeitsvorteil ist dann weg. Und man müsste auch ein wenig mehr Unterstützung in Sachen PHP bekommen (um nicht alles selbst zu machen, z. B. captcha), was nur geht, wenn man einen weiteren Apache per ipkg installiert. Deshalb hab ich das nicht eingebaut.

Bei der Seitenleiste kann man sich viel einfallen lassen. Ich hab es mir da recht bequem gemacht. Denk aber auch mal darüber nach, ob es nicht geschickter wäre, neue Seite per Menü aufzumachen, wenn es viele Beiträge gibt. Denn im Moment werden ja alle Beiträge zu einer Seite geladen und dann die Seitenleiste daraus aufgebaut. Je mehr Beiträge, desto mehr Content muss übertragen werden und desto mehr länger dauert die Inspektion per JavaScript. Irgendwann wird da auch so ein Punkt erreicht, wo es nicht mehr schön schnell läuft. So 20-30 Beiträge sind in der Regel ok.

Aber vielleicht mache ich ja da noch ein wenig weiter ... hab im Moment nur nicht die Zeit dafür.

itari
 

miroethi

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
50
Punkte für Reaktionen
0
Punkte
6
Hallo Zusammen,

Habe gestern das cms4ds bei meiner DS installiert und bin wirklich begeistert wie problems das ging. Eine tolle Sache. Nur ein Problem habe ich. Ich habe z.B. versucht an einem Beitrag ein wenig rumzuspielen und ein Bild einfach zweimal eingefügt. Das ganze habe ich mit der cms4ds_editor.php gemacht. Ein anschliesender Seitenaufruf sollte mir nun eigentlich das Bild zweimal zeigen, stattdessen ist es nun komplett verschwunden und es wird gar kein Bild mehr angezeigt. Im Text und in der SQL Datenbank ist der eintrag ...imgsrc... aber devinitiv vorhanden. Woran kann das liegen ???

mfg

Miroethi
 

miroethi

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
50
Punkte für Reaktionen
0
Punkte
6
Hallo nochmal,

Habe mitlerweile rausgefunden, dass wohl der cms4ds_editor.php die Zeichen anführungszeichen " durch dieses / ersetzt. Also

><img width="98%" src="_media/002.jpg" /> wird zu ><img width=/98%/ src=/_media/002.jpg/ />

warum ist das so ?, wie kann man das umgehen ?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hallo nochmal,

Habe mitlerweile rausgefunden, dass wohl der cms4ds_editor.php die Zeichen anführungszeichen " durch dieses / ersetzt. Also

><img width="98%" src="_media/002.jpg" /> wird zu ><img width=/98%/ src=/_media/002.jpg/ />

warum ist das so ?, wie kann man das umgehen ?

Besteht das Problem noch?

Erklärungsversuch: ich räume eigentlich die / weg. Da man das aber auch grundsätzlich in der php.ini einstellen kann (und ich weiß ja nicht, wie es da bei dir aussieht), kann es sein, dass da was falsch läuft. Typischerweise sollten dann aber bei dir /" statt einfach nur / erscheinen ... Hast mal mit einfach ' probiert?

Itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Matthieu hatte mal vor Längerem angefragt, ob man nicht wie beim Blog Kommentare durch die Leser einbauen/zulassen könnte. Ich hatte daraufhin geantwortet, dass das nicht ganz so einfach ist, weil ja doch durch die Eingabe recht viel Schaden angerichtet werden könnte.

Nur würde ich gerne dieses Thema angehen. Kennt wer eine relativ kurze PHP-Stecke, die so alles Gefährliche aus einem Kommentar herausfiltert? Am besten eine nette Funktion, die man direkt aufrufen kann.

Die Frage wäre auch, ob man BB-Code zulassen sollte oder auch eine begrenzte Auswahl an HTML-Tags (<b>,<i>, <a href ...>). Dabei müsste alles JavaScript herausgefiltert werden und die Tags sollten wohlgeformt umgewandelt werden.

Itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Kommentare im CMS

Schon wieder ein paar Wochen her als ich anfragte, ob jemand eine kurze Strecke zum Filtern unerwünschter Eingaben kennt. Leider gabs keine Ideen. So hab ich nun mal in meinem Schatzkästchen gegraben und ein wenig dazu geproggt.

Es geht um Kommentar zu den einzelnen Beiträgen des CMS ... Da das Ganze noch experimentell ist und ich weiß, dass ja jeder in seinem CMS schon das ein oder andere verändert hat, schreib ich hier mal die Strecken auf, die ich nun eingebaut habe.

1] Erweiterung der Content-Tabelle um ein Feld, mit dem das Kommentieren ein- bzw.- ausgeschaltet werden kann:

Rich (BBCode):
CREATE TABLE IF NOT EXISTS `cms4ds_content` (
  ...
  `Sequence` int(11) default NULL,
  `Comments` char(1) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`Content_ID`)
) ... ;

2] Damit der Kommentar nicht die Content-Tabelle beeinträchtigen kann, brauchen wir eine zusätzliche Tabelle für den Kommentar. Üblicherweise sind die Spalten: TS für die Erstellungszeit, der Verweis auf den eigentlichen Beitrag (Content_ID), der Autor mit seiner Email und der Kommentar-content selbst. Fürs mögloicherweise spätere bearbeiten bzw. freischalten eines Kommentars ist immer ein ID-Feld gut, also Comment_ID ...

Rich (BBCode):
CREATE TABLE IF NOT EXISTS `cms4ds_comments` (
  `Comment_ID` int(11) NOT NULL auto_increment,
  `TS` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `Content_ID` int(11) NOT NULL,
  `Autor` varchar(32) collate latin1_general_ci default NULL,
  `Email` varchar(128) collate latin1_general_ci NOT NULL,
  `Content` varchar(3000) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`Comment_ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

3] Für die Anzeige hab ich in der Datei cms4ds die Kommentarausgabe in die Ausgabeschleife integriert
[if ($rec['Comments']=='y') $out.=comments($rec['Content_ID']);]. Nebenbei hab ich die SQL-Geschichte ein wenig modernisiert - hat aber mit dem Kommentarthema nichts zu - sag ich bloß, damit keiner irritiert ist.

PHP:
if ($_REQUEST['where'] != '') {
 $where=preg_replace('/([^a-zA-Z%\'0-9äöüÄÖÜß_(), ])/','',utf8_mydecode($_REQUEST['where']));
 /*$recs = mysql_query("select * from cms4ds_content where find_in_set('"
                  .$where."',replace(Rubrik,' ',',')) order by Sequence, Titel_Datum desc"); */
 $query = sprintf("select * from cms4ds_content where find_in_set('%s',replace(Rubrik,' ',',')) order by Sequence, Titel_Datum desc",
                   mysql_real_escape_string($where));
 $recs = mysql_query($query);                                     
 $out='';                  
 while ($rec = mysql_fetch_assoc($recs)) {
 $out.='<div class="content" style="display:block"><h3 onclick="bookmark(\''
 .$rec['Titel'].'\')">'.$rec['Titel'].'</h3>'
 .($rec['Hide_Date']=='y'?'':'<i>'.substr($rec['Titel_Datum'],0,10)).($rec['Autor']==''?'':' - ')
 .$rec['Autor'].'</i><p>'.$rec['Content'].'</p>';
 if (substr($_SERVER['REMOTE_ADDR'],0,7)=='192.168') {
  $out.='<p style="position:absolute;top:150px;margin-left:-50px">'
  .'<a target="_blank" onclick="window.open(\''.$editor.'new\',\'\',\'top=120,left=250,width=616,height=540\')">new</a><br/>'
  .'<a target="_blank" onclick="window.open(\''.$editor.'search&Content_ID='
             .$rec['Content_ID'].'\',\'\',\'top=120,left=250,width=616,height=540\')"
    title="'.$editor.'">edit</a></p>';
  }
 if ($rec['Comments']=='y') $out.=comments($rec['Content_ID']);  
 $out.='</div>';
 }   
}

4] Zusätzlich sind in dieser Datei cms4ds 2 neue PHP-Funktionen. Zum einen ein kleiner BB-Code-Transformer, zum anderen die Ausgabe-Routine für die Kommentare (sortiert nach Datum) plus einem iFrame für die Kommentareingabe. Beim Aufruf des iFrame-Sources wird die passende Content_ID mitgegeben; damit ist sicher gestellt, dass der neu zu erfassende Kommentar auch richtig zugeordnet wird.

PHP:
function bb($t){
   $t = preg_replace('/\[(\/?([bius]|sub|sup|tt))\]/','<\\1>',$t);
   $t = preg_replace('/\[url\](http.+)\[\/url\]/U','<a target="_blank" href="\\1">\\1</a>',$t);
   return preg_replace('/\[url\](.+)\[\/url\]/U','<a target="_blank" href="http://\\1">\\1</a>',$t); 
}
function comments($id){
  $out='<h4 style="margin-bottom:15px">Kommentare</h4>';
  $recs = mysql_query("select * from cms4ds_comments where Content_ID ='".$id."' order by TS");
  while ($rec = mysql_fetch_assoc($recs))
     $out.='<div style="margin-bottom:5px;border-bottom:1px dotted #69c;padding-bottom:5px">von <b>'.$rec['Autor']
         .'</b> am '.substr($rec['TS'],0,16).'<br/>'.bb($rec['Content']).'</div>';
  $out.='<iframe src="cms4ds_comment.php?Content_ID='.$id.'" width="97%" height="228px" marginheight="0" marginwidth="0" frameborder="0"></iframe>';
  return $out;
}
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
5] Die Kommentar-Erfassung wird mit cms4ds_comment.php vorgenommen.

PHP:
<?php
function iso8859_mydecode($html){                   // simple translation of german letters
  $a = array('ä'=>"\xC3\xA4",'ö'=>"\xC3\xB6",'ü'=>"\xC3\xBC",
             'Ä'=>"\xC3\x84",'Ö'=>"\xC3\x96",'Ü'=>"\xC3\x9C",'ß'=>"\xC3\x9F");
  return strtr($html,$a);
}
function utf8_mydecode($html){                      // reverse simple translation of german letters
  $a = array("\xC3\xA4"=>'ä',"\xC3\xB6"=>'ö',"\xC3\xBC"=>'ü',
             "\xC3\x84"=>'Ä',"\xC3\x96"=>'Ö',"\xC3\x9C"=>'Ü',"\xC3\x9F"=>'ß');
  return strtr($html,$a);
}
function crasy($s){
  return preg_replace('/([^a-zA-Z0-9äöüÄÖÜß_,.!?;:()%\"+ \[\]\/\-])/','',utf8_mydecode($s));
} 
require "cms4ds.php.inc";
if ($_REQUEST['action'] == 'new') {
  $fields=$_REQUEST['Content_ID']."','".crasy($_REQUEST['Autor'])."','".crasy($_REQUEST['Email'])."','"
         .crasy($_REQUEST['Content']);
  mysql_query("insert into cms4ds_comments (Content_ID,Autor,Email,Content) values ('".$fields."')");
}
$_REQUEST['action']='';
?>
<html><head><title>cms4ds</title>
<style>body,input,textarea,td
               { font:13px 'Trebuchet MS',Trebuchet,Arial,Verdana,Sans-serif;}
.input         { width:445px;}
textarea       { width:530px;height:120px;}
</style>
<script>function $(e) {return document.getElementById(e);}
function lime() {
  z1=Math.floor(Math.random()*10);
  z2=Math.floor(Math.random()*10);
  var operanden = new Array('+','-','*');
  op=Math.floor(Math.random()*10)%3;
  $('real1').innerHTML=z1+operanden[op]+z2;
}
function spam(){
  if($('Autor').value=='' || $('Email').value=='' || $('Content').value=='') alert('falsche Eingabe');  
  else if(eval($('real1').innerHTML)==$('real2').value) {$('action').value='new'; f.submit()}
       else alert('Spam?');

}
</script>
</head><body>
<form id="f" name="f" method="post" action="cms4ds_comment.php">
<input type="hidden" name="Content_ID" value="<?= $_REQUEST['Content_ID'] ?>" />
<input type="hidden" id="action" name="action" value="" />
<table>
<tr><td width="80px">Name:</td><td><input type="text" class="input" id="Autor" name="Autor"/></td></tr>
<tr><td>E-Mail:</td><td><input type="text" class="input" id="Email" name="Email"/></td></tr>
<tr><td colspan="2"><textarea id="Content" name="Content"></textarea></td></tr>
<tr><td colspan="2" align="right">
<span id="real1" style="width:80px" title="MiniSpamFilter">3+7</span> = 
<input type="text" id="real2" style="width:30px" title="MiniSpamFilter" />
<input type="button" value="absenden" onclick="spam()" />
</td></tr></table>
</form>
<script>lime();</script>
</body></html>

Da passiert auch nicht viel mehr als bei dem Editor für die Beiträge. Interessant sind die PHP-Funktion crasy, welche unerwünschte Zeichen herausfiltert. Also es sind keine HTML-Tags möglich ... Aber ob das nun ausreicht??? BB-Code ist möglich. Das Filtern unerwünschter Eingaben ist halt noch die Baustelle ;)

Die beiden SPAM-JavaSkript-Funktionen sollen Bots abhalten. Deswegen wird jedesmal eine kleine Rechenaufgabe gestellt, deren Lösung den FORM-Submit freischaltet. Sowas hab ich auch an anderen Stellen gefunden, und ich denke, dass ist eine 'billige' Alternative zu Captchas (den Wortbildchen). Allerdings setzt das gewissen Grundrechenfähigkeit bei Benutzern voraus ... also man muss da schon abwägen :D

Die Funktion lime() stellt die Rechen-Aufgaben zufallsgesteuert; die Funktion spam() testet.

6] Beim Editor hab ich das Comment-Freischalt-Feld noch integriert.

Das ganze CMS kann man wie immer auf einen Rutsch herunterladen: http://itari.pcip.de/cms4ds.html?id=Download - Vorbereitung - Installation

Aber dran denken ... ist zur Zeit noch experimentell ... es geht wie immer alles auf eigene Kappe.

Itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Gästebuch

Ich hab noch eine Kleinigkeit eingebaut ... Kommentare ohne Überschrift. Hierfür wird das Kommentar-Feld eines Beitrags auf 'g' gesetzt und in der PHP-Funktion comments() mit übergeben ...

PHP:
function comments($type,$id){
  if ($type == 'g') $out='';
  else $out='<h4 style="margin-bottom:15px">Kommentare</h4>';

Damit lassen sich denn nun auch Gästebücher erzeugen.

Ich hab auch vergessen oben noch anzumerken, dass die Kommentare erst nach einem Refresh der Seite angezeigt werden ... das könnte man ändern, aber ich denke, dass ist schon ok so ... viele Blogs schalten ja erst nach Begutachtung die Kommentare frei. Meine Frage, sollte das auch hier so gemacht werden?
.
 

Anhänge

  • comments.jpg
    comments.jpg
    44,8 KB · Aufrufe: 144

Brian!

Benutzer
Mitglied seit
29. Mrz 2009
Beiträge
147
Punkte für Reaktionen
0
Punkte
0
Ich hab auch vergessen oben noch anzumerken, dass die Kommentare erst nach einem Refresh der Seite angezeigt werden ... das könnte man ändern, aber ich denke, dass ist schon ok so ... viele Blogs schalten ja erst nach Begutachtung die Kommentare frei. Meine Frage, sollte das auch hier so gemacht werden?

Also ich wäre dafür, dass die Anzeige direkt nach dem absenden aktualisiert wird. ;)

Ganz einfach deshalb, weil ich mir gut vorstellen kann, dass sonst weniger technisch versierte Nutzer mehrere Einträge nach einander verfassen weil Sie annehmen, dass es nicht funktioniert hat. :rolleyes:

Desweiteren fände ich eine "Vorschau" Option noch super nützlich (gerade erst selbst festgestellt :rolleyes:) - und/oder die Option als Autor den zuvor gemachten Eintrag wieder zurückziehen zu können (wobei dies wohl mangels Identifizierung wahrscheinlich schwieriger umzusetzen sein wird :confused:).

Bloß meine Meinung - ist aber natürlich auch so wie es jetzt ist schon spitze! :D
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
So hab noch was beim Kommentieren eingebaut.

Zusätzliche Spalte für die IP-Adresse bei der Tabelle cms4ds_comments:

Rich (BBCode):
CREATE TABLE IF NOT EXISTS `cms4ds_comments` (
  `Comment_ID` int(11) NOT NULL auto_increment,
  `TS` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `Content_ID` int(11) NOT NULL,
  `Autor` varchar(32) collate latin1_general_ci default NULL,
  `Email` varchar(128) collate latin1_general_ci NOT NULL,
  `Content` varchar(3000) collate latin1_general_ci default NULL,
  `IP` varchar(15) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`Comment_ID`)
)

Und in der Funktion zum Schreiben der Kommentare in der Datei cms4ds_comment.php ergänzt ein zweiter Spam-Filter auf die IP-Adresse des Eingebenden (zwischen 2 Kommentaren müssen mindestens 300 Sekunden vergehen, so dass Massen-Kommentare ausgebremst werden):

PHP:
if ($_REQUEST['action'] == 'new') {
  $fields=$_REQUEST['Content_ID']."','".crasy($_REQUEST['Autor'])."','".crasy($_REQUEST['Email'])."','"
           .crasy($_REQUEST['Content'])."','".$_SERVER['REMOTE_ADDR'];
  $recs = mysql_query("select max(TS) as lt from cms4ds_comments where IP='".$_SERVER['REMOTE_ADDR']."'");
  if ($recs) {
    $rec = mysql_fetch_assoc($recs);
    $last_time=$rec['lt'];
    if ($_SERVER['REQUEST_TIME']-strtotime($last_time)>300) { // 300 Verweigerung
      mysql_query("insert into cms4ds_comments (Content_ID,Autor,Email,Content,IP) values ('".$fields."')");
      $_REQUEST['action']='done';
      }     
  } else { 
    mysql_query("insert into cms4ds_comments (Content_ID,Autor,Email,Content,IP) values ('".$fields."')");
    $_REQUEST['action']='done';
  }
}

Außerdem hab ich noch einen parent-window-refresh() eingebaut, der die Kommentaranzeige forciert. Allerdings kommt nun immer so ne blöde Meldung ... man kann nicht alles haben :D

Vorschau und Revisionsmöglichkeiten beim Kommentieren hab ich nun nicht weiter verfolgt. Das Revidieren geht eigentlich nur, wenn man jemanden authentifizieren kann, um so das Ganze auch nur auf seine Beiträge zu beschränken. Aber wer was kennt ohne Authentifizierung, der soll kann mir mal den Code zuschicken - bin da noch auf der Suche.

Da war auch noch die Frage nach der Email ... ja eigentlich müsste man Beiträge sperren, wenn man jemanden nicht per Email identifizieren kann :D. Nee, ich dachte daran, dass man die Email eventuell beim Anzeigen des Kommentars mit als Link ausgeben kann, damit sich auch hierüber eine Diskussion ergeben könnte ... wer es nicht braucht, macht es einfach weg.

Hatte ich geschrieben, dass BB-Codes halbwegs im Kommentar gehen ... Smilies aber nicht auf Bildchen umgesetzt werden ;)

Itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Kommentar-Vorschau ist nun auch eingebaut.

Wenn man mit einem Doppelklick auf das textarea-Feld klickt, dann wird eine formatierte [BB-Code wird aufgelöst] Vorschau angezeigt. Erneuter Doppelklick springt zurück ins Eingabefeld. Man kann das beliebig wiederholen ...

Im Moment werden allerdings noch nicht die CSS aus der cms4ds.css-File für die Formatierung verwendet. Wer also seine CSS geändert hat, muss das hier für die Vorschau auch anpassen (ist nicht viel). Irgendwann werd ich das beides mal zusammenführen ...

Itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Cooliris Photo-Pages in cms4ds

Da hatte ich heute den Gedanken, eine nette leere iframe-Page zu basteln, in die man dann irgendwas Nettes hineinladen kann. Als ich dann die Photo Station auch hinein laden wollte, ist mir aufgefallen, dass ich die ja außer Betrieb genommen hatte und da hab ich mir gedacht, schreibst das Teil grad mal neu :D So mit Cooliris usw. und hier ist das Ergebnis. Natürlich längst nicht so komfortabel wie bei der Photo Station (ich will ja keine Konkurrenz machen oder doch?), halt ohne Datenbank-Gedöns und schön langsam bei Aufbau, weil ich ja die Bilder in der Originalfassung lade ... das könnte man natürlich alles ändern ... z. B. auf die Vorschaubildchen im jeweiligen @eadir gehen usw. - aber das war mit grad alles zu viel im Moment.

Also wir brauchen eine iframe-Seite, auf der nichts los ist (iframe.html):

PHP:
<html><head><title>cms4ds</title>
<link rel="stylesheet" type="text/css" href="cms4ds.css" />
<link rel="shortcut icon" href="cms4ds.ico" />
</head><body onload="history()">
<iframe src="blank.html?0" name="histFrame" id="histFrame"></iframe>
<div id="basecontainer">
<div id="top">cms4ds<br/><span>a CMS for Synology Disk Stations</span></div>
<div id="menu">
<a href="cms4ds.html">cms4ds</a>
<a href="files.html">files</a>
<a href="stylesheet.html">stylesheet</a>
<a href="javascript.html">javascript</a>
<a href="database.html">database</a>
<a href="rss.html">rss</a>
<a href="search.html">search</a>
<a href="tools.html">tools</a>
<a href="guests.html">guest-book</a>
</div> <!-- menu -->
<div id="container">
<iframe src="photos.php" width="100%" height="500px" frameborder="0"></iframe>
</div> <!-- container -->
<div id="footer">(c) 2008-2009 by ? itari based on <a style="text-decoration:none" href="http://itari.syno-ds.de/">cms4ds</a></div>
</div> <!-- basecontainer -->
</body></html>

Der iframe wird gefüllt mit der Datei photos.php. Diese sucht in einem Verzeichnis nach Fotos und bastelt dann die img-Tags zusammen:

PHP:
<html>
<head>
<link rel="alternate" href="photos_rss.php" type="application/rss+xml" title="" id="gallery" />
</head>
<body>
<?php
$path = 'pic/1988.04 Japan/';
$url  = 'http://syno/cms4ds/';
$cdir = dir($path);
while ($entry = $cdir->read())
  if (!preg_match("/^\.{1,2}$/", $entry)) 
    if (!is_dir($entry) && $entry <> 'Thumbs.db' && $entry <> '@eaDir')   
      print '<img src="'.$url.$path.$entry.'" style="width:100px;margin:2px"/>';
?>
</body>

Damit Cooliris auch was damit anfangen kann, braucht man eine passende Atom(XML-)Strecke, hier in diesem Fall die Datei photos_rss.php, die fast genauso per PHP zusammengebastelt wird. Hierzu gibt es auf der Homepage von Cooliris ne kleine feine Anleitung.

PHP:
<?php
function iso8859_mydecode($html){                   // simple translation of german letters
  $a = array('ä'=>"\xC3\xA4",'ö'=>"\xC3\xB6",'ü'=>"\xC3\xBC",
             'Ä'=>"\xC3\x84",'Ö'=>"\xC3\x96",'Ü'=>"\xC3\x9C",'ß'=>"\xC3\x9F");
  return strtr($html,$a);
}   
header('Content-Type: application/xml');
print '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; ?>
<?php
print '<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom"><channel>';
$path = 'pic/1988.04 Japan/';
$url  = 'http://syno/cms4ds/';
$cdir = dir($path);
while ($entry = $cdir->read())
  if (!preg_match("/^\.{1,2}$/", $entry)) 
    if (!is_dir($entry) && $entry <> 'Thumbs.db' && $entry <> '@eaDir')   
    print '<item><link>'.$url.$path.$entry.'</link><media:content url="'.$url.$path.$entry.'"/></item>';
print '</channel></rss>';
?>

Wenn die Pfad- und Dateinamen nicht allzu verunstaltet sind (ich hab grad keine Umlaute gestestet - wäre aber auch nicht wirklich ein Problem), dann müsste es mit dem Aufruf der Datei iframe.html nun gehen. Klar kann man die auch ins Menü oder sonst wie verlinken. Die Bildchen stehen bei mit in einen Unterverzeichnis namens pic ... und sind ein mount --bind von /volume1/photos ;)

.
 

Anhänge

  • photos.jpg
    photos.jpg
    69,5 KB · Aufrufe: 132
  • cooliris.jpg
    cooliris.jpg
    54,2 KB · Aufrufe: 131

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Cooliris Teil2 (Embed Wall)

Wenn man ein wenig weiter bei Cooliris stöbert, kommt man auf die folgende Seite: http://developer.cooliris.com/?p=embed

Hier gibt es eine weitere Variante, die Photo-Page aufzubereiten, welche mir auch sehr gut gefällt - sie ist allerdings noch ein wenig langsamer (gefühlt) - ich sage mal mehr als 20 gute Bilder wird es wohl nicht pro Seite/Feed werden.

Also hier die Dateien für die 2. Fassung ... iframe.html:

PHP:
<html><head><title>cms4ds</title>
<link rel="stylesheet" type="text/css" href="cms4ds.css" />
<link rel="shortcut icon" href="cms4ds.ico" />
</head><body onload="history()">
<iframe src="blank.html?0" name="histFrame" id="histFrame"></iframe>
<div id="basecontainer">
<div id="top">cms4ds<br/><span>a CMS for Synology Disk Stations</span></div>
<div id="menu">
<a href="cms4ds.html">cms4ds</a>
<a href="files.html">files</a>
<a href="stylesheet.html">stylesheet</a>
<a href="javascript.html">javascript</a>
<a href="database.html">database</a>
<a href="rss.html">rss</a>
<a href="search.html">search</a>
<a href="tools.html">tools</a>
<a href="guests.html">guest-book</a>
</div> <!-- menu -->
<div id="container">
<!--<iframe src="photos.php" width="100%" height="500px" frameborder="0"></iframe>-->
  <object id="o" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        width="800" height="500">
        <param name="movie" 
            value="http://apps.cooliris.com/embed/cooliris.swf" />
        <param name="flashvars"
            value="showEmbed=false&feed=http://itari.syno-ds.de/photos_rss.php" />
        <param name="allowFullScreen" value="true" />
        <param name="allowScriptAccess" value="false" />
        <embed type="application/x-shockwave-flash" 
            src="http://apps.cooliris.com/embed/cooliris.swf" 
            width="800" height="500" 
            flashvars="showEmbed=false&feed=http://itari.syno-ds.de/photos_rss.php" 
            allowFullScreen="true" allowScriptAccess="false"></embed>
    </object>

</div> <!-- container -->
<div id="footer">(c) 2008-2009 by ? itari based on <a style="text-decoration:none" href="http://itari.syno-ds.de/">cms4ds</a></div>
</div> <!-- basecontainer -->
</body></html>

photos_rss.php:

PHP:
<?php
function iso8859_mydecode($html){                   // simple translation of german letters
  $a = array('ä'=>"\xC3\xA4",'ö'=>"\xC3\xB6",'ü'=>"\xC3\xBC",
             'Ä'=>"\xC3\x84",'Ö'=>"\xC3\x96",'Ü'=>"\xC3\x9C",'ß'=>"\xC3\x9F");
  return strtr($html,$a);
}   
header('Content-Type: application/xml');
print '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; ?>
<?php
print '<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom"><channel>';
$path = 'pic/1988.04 Japan/';
$url  = 'http://itari.syno-ds.de/';
$cdir = dir($path);
while ($entry = $cdir->read())
  if (!preg_match("/^\.{1,2}$/", $entry)) 
    if (!is_dir($entry) && $entry <> 'Thumbs.db' && $entry <> '@eaDir')   
    print '<item><link>'.$url.$path.$entry.'</link><media:content url="'.$url.$path.$entry.'"/></item>';
print '</channel></rss>';
?>

und damit der Flash-Zugriff auch erlaubt ist, eine Datei namens crossdomain.xml:

PHP:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
    "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*.cooliris.com" secure="false" />
</cross-domain-policy>

Das Ergebnis sieht sehr beeindruckend aus ... schwarzes Übersichtsfenster direkt auf der Seite integriert ...

Ich denke, man sieht schon, wo die URL (itari.syno-ds.de) überall angepasst werden muss, so dass ich das nun nicht haarklein beschreiben muss ;)
.

PS. grad noch was oben geändert, damit man nicht Zugriff auf den Embed-Code hat ...
 

Anhänge

  • cooliris2.jpg
    cooliris2.jpg
    66,8 KB · Aufrufe: 109
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Kalender und Termine

So noch was eingebaut. Eine Terminliste bzw ein Kalender.

Ich hab den Kalender auf 30 Tage ab aktuellem Datum eingerichtet; mehr oder weniger Tage sind einfach möglich durch ändern der '30' im Skript cms4ds.php. Mehrfache Termine an einem Tag gehen, sowie auch periodische Termine (ich hab das sequence-Feld missbraucht ... wenn man das ungleich 0 setzt, dann wird es ein periodischer Termin).

Man kann im eigentlichen Content-Feld die bis-Zeit ("-18:30") als erstes Eingeben ... der Content wird dann ein wenig korrigiert. Der content wird als title-Attribut angelegt, so dass man ihn als Hilfstext sieht, wenn man mit der Maus über den Termin fährt.

An der Seite habe ich die Liste der Termine allerdings jetzt alphabetisch sortiert eingetragen. Beim Klicken verfärbt sich der ausgewählte Termin in der Liste.

Die new/edit-Tags sieht man nur, wenn man lokal (IP 192.168 ....) ist, wie sonst auch.
.
 

Anhänge

  • Termine.jpg
    Termine.jpg
    78,8 KB · Aufrufe: 96
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat