einleitung wie man module für contenido programmiert?

Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy »

php kann ich ja schon aber ich wollte z.B. einen artikelToPDF modul schreiben und ich weiss echt nicht wo ich da anfangen wurde, obwohl ich so einen pdf-parser in "plain"-php geshrieben habe.
Dafür musst Du keinen Schimmer von der DB Struktur von Contenido haben.
Das Pferd wird von vorn Aufgezäumt.

Schau Dir die FPDF Klasse an zu finden unter http://www.fpdf.org

Dann schreibst du ein Modul in dem reiner Standard PHP Code enthalten ist, und nicht eine CMS_VAR benutzt.

Wie das dann Funktioniert kannst Du auf meiner Website unter Aktuelles Sehen.
Gruß aus Hamburg :wink:
smily
Beiträge: 53
Registriert: Do 27. Mai 2004, 13:49
Kontaktdaten:

Beitrag von smily »

hi leute erstmal viel dank für euren feedback aber ich glaube ausser Emceechen versteht mich keiner so richtig.

folgendes:
dies ist das einfachste pdf beispiel:

Code: Alles auswählen

<?php
define('FPDF_FONTPATH','font/');
require('fpdf.php');

$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?> 

so jetzt nehmen wir mal an mein ganzer artikell wäre diese zeichenkette 'Hello World!'

wie muss ich das modul schreiben das er den artikel id ermittelt den pdf id in db schreibt denn ich wieder bei erneuten abfrage des artikels abfragen kann um zu sehen ob die letzte generierung des pdfs älter als die letzte aktuallisierung des artikells ist?

dei join und restliche syntax muss man nicht erklären, das kennt jeder php-programmierer, aber wie funktioniert die schnittstelle zu contiendo?

ein kleiner beispiel zu diesem "einfacher geht garnicht"-beispiel were eine GROßE HILFE!
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

naja, sarkasmus ist das nicht - aber in einer Modulbauanleitung würde als erste Zeile auch nicht mehr stehen als "PHP- und MySQL-Kenntnisse erforderlich" ;)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

smily hat geschrieben:wie muss ich das modul schreiben das er den artikel id ermittelt den pdf id in db schreibt denn ich wieder bei erneuten abfrage des artikels abfragen kann um zu sehen ob die letzte generierung des pdfs älter als die letzte aktuallisierung des artikells ist?

dei join und restliche syntax muss man nicht erklären, das kennt jeder php-programmierer, aber wie funktioniert die schnittstelle zu contiendo?

ein kleiner beispiel zu diesem "einfacher geht garnicht"-beispiel were eine GROßE HILFE!
mach mal folgendes Modul:

<?php
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";
?>

Da wirst du einige Dinge finden ;) Ansonsten gibts ja die API-Doku, mehr Schnittstellen gibts aber im Moment leider auch nicht.
smily
Beiträge: 53
Registriert: Do 27. Mai 2004, 13:49
Kontaktdaten:

Beitrag von smily »

hi timo,

ich habe ja auch nicht gesagt dass ich was gegen sarkasmus habe 8) , in gegenteil.

aber wenn du noch bei denn beispiel helfen könntest wäre das 'ne duft sahe
smily
Beiträge: 53
Registriert: Do 27. Mai 2004, 13:49
Kontaktdaten:

Beitrag von smily »

danke timo,
das muss ich aber erstmal verdauen.
willst du mir was bestimmtes damit sagen? oder einfach so übersichtshalber?
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

da stehen alle Variablen drin, die dir zur Verfügung stehen. Unter anderem auch die idart (Artikel-ID).
Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy »

@smily und alle die auch Module schreiben wollen !!

Du erstellst ein neues Modul. Du nennst dieses Modul meinetwegen mach_mir_ein_pdf.
Das Modul bindest du über ein template in Contenido ein.Das Modul platziert ein Image (bild_fuer_link_mach_mir_ein_pdf.png) irgendwo in deinem Layot.
Du übergibst in dem Modul den den aktuellen client, die aktuelle lang, und die aktuelle Artikel id an deinen PDF Parser.
In diesem Beispiel die Datei: mach_mir_ein_pdf.php
Das Modul hat den folgenden Inhalt:

Code: Alles auswählen

<?
   if ($cfgClient["set"] != "set") // CONTENIDO
   {
      $db = new DB_Contenido;
      rereadClients();
   }
$pdfFile = $cfgClient[$client]['path']['frontendpath']."mach_mir_ein_pdf.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart";
echo "<A target=\"_blank\" href=\"$pdfFile\"><img src=images/bild_fuer_link_mach_mir_ein_pdf.png border=\"0\" height=30></A>"; 
?>
Nun noch die Datei: mach_mir_ein_pdf.php die du mit deinem Modul includest:
Die Datei liegt im Verzeichnis deines aktuellen Mandanten.
In dem Beispiel liest du den Inhalt des Moduls Text(HTML) --> CMS_HTML[1] des aktuellen Artikels aus.

Code: Alles auswählen

<?php
// include der DB Variablen von Contenido und der Pfade
include ('../contenido/includes/config.php');
include $cfg["path"]["contenido"].$cfg["path"]["includes"] . 'cfg_sql.inc.php';
// Verbinden mit der Datenbank
$db     = new DB_Contenido;
$query = "SELECT  htmlpath FROM ".$cfg["tab"]["clients"]." WHERE idclient='".$client."'"; 
$db->query($query); 
$db->next_record(); 
$front = $db->f("htmlpath");

//Auslesen der Aktuellen idartlang des Artikels 
$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
          $cfg["tab"]["art_lang"]." AS ARTLANG ".
         "WHERE CATART.idcat = '$idcat' AND ARTLANG.idart = '$idart' AND ARTLANG.idlang = '$lang' AND ".
         "ARTLANG.online = '1' ";
          $db->query($query);
          $db->next_record();
          $value = $db->f("idartlang"); //wird im nächsten SQL Query gebraucht

/*Auslesen der CMS_HTML[1] des Aktuellen Artikels
 '$value' AND idtype = '2' AND typeid = '1'"; ist das Modul Text(HTML) --> CMS_HTML[1]
 '$value' AND idtype = '1' AND typeid = '2'"; wäre z.B. das Modul Subheadline (HTML) --> CMS_HTMLHEAD[2]
 '$value' AND idtype = '1' AND typeid = '1'"; wäre z.B. das Modul Headline (HTML) --> CMS_HTMLHEAD[1]
 in der Tabelle con_content kann man sich das ansehen. in der Tabelle con_type ist die idtype
 abgelegt. --> in das DB-Modell schauen und die Tabellen mit PHPMyAdmin ansehen !!!! */
$sql2 = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '2' AND typeid = '1'"; 
          $db->query($sql2);
          $db->next_record();
          $htmltext = $db->f("value");
          $htmltext = urldecode  ($htmltext); 
          
//nun kommt dein PHP Code für das Parsen des CMS_HTML[1] ist in $htmltext enthalten !
define("FPDF_FONTPATH", "font/");
require_once ("fpdf.php");

$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->WriteHTML($htmltext);
$pdf->Output($pdfFile);

?>
Ich hoffe wenn Du diese Zusammenhänge nachvollziehen kannst, wirst Du demnächst in der Lage sein Module
für die Community zu schreiben. Ausserdem wäre es sehr nett von dir wenn du daraus eine A4 Seite machen könntest,
und diese dann der Contenido-FAQ zur verfügung stellst ;-) . Alleine schreiben macht keinen Spaß.

in diesem Sinne....
Zuletzt geändert von Snoopy am Sa 26. Jun 2004, 08:59, insgesamt 1-mal geändert.
Gruß aus Hamburg :wink:
Alex
Beiträge: 174
Registriert: So 20. Jul 2003, 11:31
Kontaktdaten:

Beitrag von Alex »

Hi

@snoopy
Ich arbeite bereits an einem PDF-Tool, was genau so arbeitet wie du es vorschlägst. Ich hatte ja bereits angekündigt, den Code hier nächste Woche zu veröffentlichen.

Läuft auch alles technisch, nur das fpdf mit dem Parsen des HTML-Codes (z.B. mit Bildern und Tabellen) Probleme hat. Ich nutze einen html2pdf-Parser (http://www.fpdf.org/en/script/script50.php), der die Funktionalität von fpdf erweitert.

Hast du bereits Erfahrungen mit dem html2pdf von fpdf? Tabellen und Bilder werden bei mir zurzeit nicht richtig "übersetzt", d.h. Bilder verrutschen, werden viel zu groß...

Viele Grüße

Alex
Contenido 4.4.4 & 4.5.3-CVS
smily
Beiträge: 53
Registriert: Do 27. Mai 2004, 13:49
Kontaktdaten:

Beitrag von smily »

hi snoopy,

U R THE MAN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ich wollte mich bei der erstmal herzlichst bedanken das ist genau das was ich gesucht habe! :D :D :D :D :D :D :D :D :D :D :D :D :D :D

allerdings so einfach ist das auch nicht, ich studieren denn code gerade und versuche es zu enträtseln :? so bald ich das richtig verstanden habe melde ich mich.
Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy »

Alex hat geschrieben:Hi

@snoopy
Ich arbeite bereits an einem PDF-Tool, was genau so arbeitet wie du es vorschlägst. Ich hatte ja bereits angekündigt, den Code hier nächste Woche zu veröffentlichen.

Läuft auch alles technisch, nur das fpdf mit dem Parsen des HTML-Codes (z.B. mit Bildern und Tabellen) Probleme hat. Ich nutze einen html2pdf-Parser (http://www.fpdf.org/en/script/script50.php), der die Funktionalität von fpdf erweitert.

Hast du bereits Erfahrungen mit dem html2pdf von fpdf? Tabellen und Bilder werden bei mir zurzeit nicht richtig "übersetzt", d.h. Bilder verrutschen, werden viel zu groß...

Viele Grüße

Alex
Die Beispiele Dort funktionieren alle nicht wirklich. Ich habe das ganze bereits fertig. kannst du in der FAQ sehen wenn Du PDF´s erzeugst.
In Contenido und der FAQ musste ich einen komplett neuen Parser Schreiben, ich binn mittlerweile so weit, dass Tabellen, die mit SPAW oder HTMLArea3 in Contenido erstellt werden richtig geparst werden. kannst du Dir auf www.thilo-sommer.de unter Aktuelles anschauen. wenn du dort einen Artikel auswählst, kannst du ihn als PDF ausgeben. Ich glaube der Artikel mit dem Design für alte Menschen sind auch Bilder enthalten.

http://www.thilo-sommer.de/cms/front_co ... 2&idart=52
Gruß aus Hamburg :wink:
Alex
Beiträge: 174
Registriert: So 20. Jul 2003, 11:31
Kontaktdaten:

Beitrag von Alex »

Hi Snoopy,

Danke für Deine Antwort...

Ich hab dir eben eine PM geschickt...

Alex
Contenido 4.4.4 & 4.5.3-CVS
smily
Beiträge: 53
Registriert: Do 27. Mai 2004, 13:49
Kontaktdaten:

Beitrag von smily »

hi Peter,

du hast schon echt viel geholfen
aber ich verstehe das hier nicht

Code: Alles auswählen

$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ". 
          $cfg["tab"]["art_lang"]." AS ARTLANG ". 
         "WHERE CATART.idcat = '$idcat' AND ARTLANG.idart = '$idart' AND ARTLANG.idlang = '$lang' AND ". 
         "ARTLANG.online = '1' "; 
          $db->query($query); 
          $db->next_record(); 
          $value = $db->f("idartlang"); 
eigentlich selektierst du die felder nur aus einer tabelle

Code: Alles auswählen

 ARTLANG.idart, ARTLANG.idartlang 
aber in FROM clausel sind 2.
Dazu kommt das es gar keinen join hier gibt?
sollte es nicht, wenn es eine beziehung zwischen diesen 2 tabellen gibt
eine where klausel geben wie

Code: Alles auswählen

ARTLANG.idart =CATART.idart 
???
mein problem ist, ich verstehe diese catart, art_lang beziehung nicht.
ausser dem dein kode funktioniert auch wenn man

Code: Alles auswählen

CATART.idcat = '$idcat' 
rausnimmt?
ich hoffe du wirst noch einmal helfen können
Zuletzt geändert von smily am So 11. Jul 2004, 16:49, insgesamt 2-mal geändert.
smily
Beiträge: 53
Registriert: Do 27. Mai 2004, 13:49
Kontaktdaten:

Beitrag von smily »

ich meine wozu fragst du das

Code: Alles auswählen

CATART.idcat = '$idcat' 
ab wenn die $idcat variable schon vorhanden und bekannt ist?
Gesperrt