Artikel automatisch erstellen?
Artikel automatisch erstellen?
Hallo liebe Experten,
ich schreibe gerade an einem Modul, das eine CSV-Datei einlesen und aus dem Inhalt automatisch Artikel generieren soll ( aus jedem Datensatz einen).
Dafür habe ich einen Artikel ganz normal über das Backend angelegt und hinterher nachgeschaut, wo überall in der Datenbank Einträge dazu gekommen sind. Diese lasse ich dann entsprechend vom Modul anlegen.
Der Ablauf ist bisher wie folgt:
1. Artikel anlegen in der tabelle con_art
2. Template festlegen in der tabelle con_template_inf
3. Artikel einer Kategorie zuordnen in der tabelle con_cat_art
4. Sprache für den Artikel festlegen in der tabelle con_art_lang
5. Die Daten selbst step by step in die tabelle con_content schreiben.
Das Ergebnis ist schon ganz gut, d.h. die Artikel sind am Ende vorhanden und werden auch auf der Seite angezeigt.
Allerdings spinnt hinterher das Backend, d.h. ich kann dort plötzlich keine Artikel mehr anlegen und auch viele andere Funktionen arbeiten nicht mehr. Erst nach einem DB-restore (ich habe natürlich vorher eine Sicherung gemacht )geht alles wieder.
Ich vermute, dass ich noch etwas wichtiges übersehen habe - weiß jemand von euch, wo in der Datenbank noch geschrieben wird, wenn man einen Artikel anlegt? Oder gibt es einen anderen Grund, warum das so nicht richtig funktioniert?
Bin für jeden Tipp dankbar,
falk07
ich schreibe gerade an einem Modul, das eine CSV-Datei einlesen und aus dem Inhalt automatisch Artikel generieren soll ( aus jedem Datensatz einen).
Dafür habe ich einen Artikel ganz normal über das Backend angelegt und hinterher nachgeschaut, wo überall in der Datenbank Einträge dazu gekommen sind. Diese lasse ich dann entsprechend vom Modul anlegen.
Der Ablauf ist bisher wie folgt:
1. Artikel anlegen in der tabelle con_art
2. Template festlegen in der tabelle con_template_inf
3. Artikel einer Kategorie zuordnen in der tabelle con_cat_art
4. Sprache für den Artikel festlegen in der tabelle con_art_lang
5. Die Daten selbst step by step in die tabelle con_content schreiben.
Das Ergebnis ist schon ganz gut, d.h. die Artikel sind am Ende vorhanden und werden auch auf der Seite angezeigt.
Allerdings spinnt hinterher das Backend, d.h. ich kann dort plötzlich keine Artikel mehr anlegen und auch viele andere Funktionen arbeiten nicht mehr. Erst nach einem DB-restore (ich habe natürlich vorher eine Sicherung gemacht )geht alles wieder.
Ich vermute, dass ich noch etwas wichtiges übersehen habe - weiß jemand von euch, wo in der Datenbank noch geschrieben wird, wenn man einen Artikel anlegt? Oder gibt es einen anderen Grund, warum das so nicht richtig funktioniert?
Bin für jeden Tipp dankbar,
falk07
Die meisten Erfahrungen bezahlt man teuer, dabei könnte man sie gebraucht viel billiger bekommen.
Re: Artikel automatisch erstellen?
warum machst du alles von hand?
benutze doch die contenido funktionen, die machen inner db dann ja alles genau so wie es soll
warum das rad neu erfinden?
benutze doch die contenido funktionen, die machen inner db dann ja alles genau so wie es soll
warum das rad neu erfinden?
Re: Artikel automatisch erstellen?
Hi,
erstmal danke für die schnelle Antwort.
Ich habe im Wiki und in der Api gestöbert, und da die Klassen article und article_collection gefunden. Diese bieten aber nur Funktionen zum Auslesen von Artikeln, nicht zum Erstellen.
Welche Funktionen meinst du, bzw. wo kann ich eine Beschreibung dazu finden? Kannst du mir auf die Sprünge helfen?
Ich wäre ja heilfroh, wenn ich nicht alles von Hand machen müsste...
Danke,
falk07
erstmal danke für die schnelle Antwort.
Ich habe im Wiki und in der Api gestöbert, und da die Klassen article und article_collection gefunden. Diese bieten aber nur Funktionen zum Auslesen von Artikeln, nicht zum Erstellen.
Welche Funktionen meinst du, bzw. wo kann ich eine Beschreibung dazu finden? Kannst du mir auf die Sprünge helfen?
Ich wäre ja heilfroh, wenn ich nicht alles von Hand machen müsste...
Danke,
falk07
Die meisten Erfahrungen bezahlt man teuer, dabei könnte man sie gebraucht viel billiger bekommen.
-
- Beiträge: 10
- Registriert: Mo 27. Jul 2009, 21:49
- Kontaktdaten:
Re: Artikel automatisch erstellen?
Die Funktionen kannst du in der Datei contenido/includes/functions.con.php.
Für die Neu-Erstellung eines Artikels ist die Funktion 'conEditFirstTime' und für die Änderung 'conEditArt' zuständig.
Da müssen nur die richtigen Parameter übergeben werden und wird es alles gut.
Viel Spaß mit Verwenden der Funktionen!
Für die Neu-Erstellung eines Artikels ist die Funktion 'conEditFirstTime' und für die Änderung 'conEditArt' zuständig.
Da müssen nur die richtigen Parameter übergeben werden und wird es alles gut.
Viel Spaß mit Verwenden der Funktionen!
Re: Artikel automatisch erstellen?
Ein ganz großes Dankeschön euch beiden!
Das hat mir jetzt wirklich viel Arbeit erspart...
Gruß,
falk07
Das hat mir jetzt wirklich viel Arbeit erspart...
Gruß,
falk07
Die meisten Erfahrungen bezahlt man teuer, dabei könnte man sie gebraucht viel billiger bekommen.
Re: Artikel automatisch erstellen?
Hallo
Ist diese Module fertig?
Ich suche etwas similar für ein Migration.
Gruss; Dom
Ist diese Module fertig?
Ich suche etwas similar für ein Migration.
Gruss; Dom
Re: Artikel automatisch erstellen?
Letztendlich ist es nur ein Script geworden, das mir selbst einiges an Redaktionsarbeit abnimmt.
In der Form ist es allerdings nur etwas für den Programmierer und nichts, was man einem Redakteur in die Hand drücken könnte...
Ich stelle hier gern den Code ein, allerdings ist da nichts konfigurierbar und genau auf meine Anforderungen (CSV-Datei und Artikeltemplate) zugeschnitten. Deshalb darfst du den nur als Lösungsansatz für den Ablauf verstehen - für ein "richtiges" Modul fehlt vor allem eine Validierung der hochgeladenen Daten sowie entsprechende Konfigurationsmöglichkeiten.
Vielleicht kannst du ja was damit anfangen...
Viele Grüße,
falk07
In der Form ist es allerdings nur etwas für den Programmierer und nichts, was man einem Redakteur in die Hand drücken könnte...
Ich stelle hier gern den Code ein, allerdings ist da nichts konfigurierbar und genau auf meine Anforderungen (CSV-Datei und Artikeltemplate) zugeschnitten. Deshalb darfst du den nur als Lösungsansatz für den Ablauf verstehen - für ein "richtiges" Modul fehlt vor allem eine Validierung der hochgeladenen Daten sowie entsprechende Konfigurationsmöglichkeiten.
Code: Alles auswählen
<?PHP
if(!isset($_POST['action'])){ //show Upload Form
?>
Hier bitte die CSV-Datei auswählen und hochladen<br />
<form action="<?php echo $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; ?>" enctype="multipart/form-data" method="post">
<input type="hidden" name="action" value="upload" />
<input name="csvFile" type="file" size="30" /><br />
<input name="submit" type="submit" value="abdafür" />
</form>
<?PHP }else{
cInclude("includes", "functions.con.php");
cInclude("includes", "functions.api.string.php");
global $db;
/********************************************************************************************
/ Nachfolgend wird die CSV-Datei eingelesen und zeilenweise in ein array geschrieben
/********************************************************************************************/
$daten = array();
$i = 0;
$fr = fopen($_FILES['csvFile']['tmp_name'], r);
while($line = fgets($fr, 10000)){
$daten[$i] = split(";", $line);
$i++;
}
fclose($fr);
/********************************************************************************************
/ Ab hier Daten verarbeiten - jede Zeile wird ein Artikel
/ Die Schleife beginnt bei 1 und nicht bei 0, da in der ersten Zeile der CSV-Datei (also Zeile 0) die Spaltenüberschriften
/ zu finden sind.
/********************************************************************************************/
$idclient = 1; //Konstante
$idtpl = 7; //Konstante
$idcat = 12; //Konstante
for($j = 1; $j < count($daten); $j++){
// Zunächst werden die Daten aus der CSV-Datei aufbereitet
$buchungsnummer = $daten[$j][1];
$datum = $daten[$j][4];
//...usw...
// Hier wirds wieder interessant: Ein neuer Artikel wird angelegt und die aufbereiteten Daten reingeschrieben
// step#1: create Article
$article_id = conEditFirstTime($idcat, array($idcat), '', 0, $idtpl=7, '', 1, $titel, '', '', $zeit, $zeit, 'CSV-Script', 0, '', '', $sortorder, $keyart=0);
// step#2 template
$sql_string = "SELECT * FROM con_template_conf ORDER BY idtplcfg DESC";
$db->query($sql_string);
$db->next_record();
$idtplcfg = $db->f("idtplcfg");
$idtplcfg++;
$upd_string = "INSERT INTO con_template_conf (idtplcfg, idtpl) VALUES (".$idtplcfg.", ".$idtpl.")";
$db->query($upd_string);
//step 2.5 tplcfg -> article
$idartlang = getArtLang($article_id, 1);
$sql_string = "UPDATE con_art_lang SET idtplcfg='".$idtplcfg."' WHERE idartlang='".$idartlang."'";
$db->query($sql_string);
//Daten step by step
conSaveContentEntry($idartlang, 'CMS_HTMLHEAD', 1, $titel, $bForce = false);
conSaveContentEntry($idartlang, 'CMS_HTMLHEAD', 3, $datum_von, $bForce = false);
conSaveContentEntry($idartlang, 'CMS_HTMLHEAD', 4, $buchungsnummer, $bForce = false);
conSaveContentEntry($idartlang, 'CMS_HTML', 2, $preis, $bForce = false);
conSaveContentEntry($idartlang, 'CMS_HTMLHEAD', 101, $datum_bis, $bForce = false);
conSaveContentEntry($idartlang, 'CMS_HTMLHEAD', 100, $land, $bForce = false);
//Statistics
echo "Zeile ".$j." - Datensatz erstellt: ".$titel.". <br />";
}
echo "Import abgeschlossen.";
}
?>
Viele Grüße,
falk07
Die meisten Erfahrungen bezahlt man teuer, dabei könnte man sie gebraucht viel billiger bekommen.
Re: Artikel automatisch erstellen?
Der Performance wegen empfehle ich statt:
besser
zu verwenden, gerade bei größeren Dateien sinnvoll
http://de3.php.net/manual/en/function.fgets.php#86319
Code: Alles auswählen
while($line = fgets($fr, 10000)){
Code: Alles auswählen
while($line = stream_get_line($fr, 10000)){
Code: Alles auswählen
$ time yes "This is a test line" | head -1000000 | php -r '$fp=fopen("php://stdin","r"); while($line=stream_get_line($fp,65535,"\n")) { 1; } fclose($fp);'
real 0m1.482s
user 0m1.616s
sys 0m0.152s
$ time yes "This is a test line" | head -1000000 | php -r '$fp=fopen("php://stdin","r"); while($line=fgets($fp,65535)) { 1; } fclose($fp);'
real 0m7.281s
user 0m7.392s
sys 0m0.136s