Seite 2 von 2
Verfasst: Fr 25. Jun 2004, 13:46
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.
Verfasst: Fr 25. Jun 2004, 14:03
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!
Verfasst: Fr 25. Jun 2004, 14:04
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"

Verfasst: Fr 25. Jun 2004, 14:05
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.
Verfasst: Fr 25. Jun 2004, 14:06
von smily
hi timo,
ich habe ja auch nicht gesagt dass ich was gegen sarkasmus habe

, in gegenteil.
aber wenn du noch bei denn beispiel helfen könntest wäre das 'ne duft sahe
Verfasst: Fr 25. Jun 2004, 14:13
von smily
danke timo,
das muss ich aber erstmal verdauen.
willst du mir was bestimmtes damit sagen? oder einfach so übersichtshalber?
Verfasst: Fr 25. Jun 2004, 14:14
von timo
da stehen alle Variablen drin, die dir zur Verfügung stehen. Unter anderem auch die idart (Artikel-ID).
Verfasst: Fr 25. Jun 2004, 16:35
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....
Verfasst: Fr 25. Jun 2004, 16:47
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
Verfasst: Fr 25. Jun 2004, 20:05
von smily
Verfasst: Sa 26. Jun 2004, 10:06
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
Verfasst: Sa 26. Jun 2004, 14:46
von Alex
Hi Snoopy,
Danke für Deine Antwort...
Ich hab dir eben eine PM geschickt...
Alex
Verfasst: So 11. Jul 2004, 17:18
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
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
???
mein problem ist, ich verstehe diese catart, art_lang beziehung nicht.
ausser dem dein kode funktioniert auch wenn man
rausnimmt?
ich hoffe du wirst noch einmal helfen können
Verfasst: So 11. Jul 2004, 17:18
von smily
ich meine wozu fragst du das
ab wenn die $idcat variable schon vorhanden und bekannt ist?