Artikel automatisch erstellen?

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
falk07
Beiträge: 10
Registriert: So 13. Apr 2008, 14:13
Wohnort: Im hohen Norden
Kontaktdaten:

Artikel automatisch erstellen?

Beitrag von falk07 » Fr 20. Nov 2009, 11:45

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 8) )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.

_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Re: Artikel automatisch erstellen?

Beitrag von _wiewo_ » Fr 20. Nov 2009, 13:48

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? :)

falk07
Beiträge: 10
Registriert: So 13. Apr 2008, 14:13
Wohnort: Im hohen Norden
Kontaktdaten:

Re: Artikel automatisch erstellen?

Beitrag von falk07 » Fr 20. Nov 2009, 15:12

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... :mrgreen:

Danke,
falk07
Die meisten Erfahrungen bezahlt man teuer, dabei könnte man sie gebraucht viel billiger bekommen.

munkh.balidar_4fb
Beiträge: 10
Registriert: Mo 27. Jul 2009, 21:49
Kontaktdaten:

Re: Artikel automatisch erstellen?

Beitrag von munkh.balidar_4fb » Sa 21. Nov 2009, 14:01

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. :D

Viel Spaß mit Verwenden der Funktionen!

falk07
Beiträge: 10
Registriert: So 13. Apr 2008, 14:13
Wohnort: Im hohen Norden
Kontaktdaten:

Re: Artikel automatisch erstellen?

Beitrag von falk07 » Sa 21. Nov 2009, 15:02

Ein ganz großes Dankeschön euch beiden!
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.

djavet
Beiträge: 264
Registriert: Do 22. Jan 2004, 11:31
Kontaktdaten:

Re: Artikel automatisch erstellen?

Beitrag von djavet » Fr 26. Mär 2010, 15:21

Hallo

Ist diese Module fertig?
Ich suche etwas similar für ein Migration.

Gruss; Dom

falk07
Beiträge: 10
Registriert: So 13. Apr 2008, 14:13
Wohnort: Im hohen Norden
Kontaktdaten:

Re: Artikel automatisch erstellen?

Beitrag von falk07 » Mi 21. Apr 2010, 15:04

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... :oops:

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&uuml;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.";
}
?>
Vielleicht kannst du ja was damit anfangen...

Viele Grüße,
falk07
Die meisten Erfahrungen bezahlt man teuer, dabei könnte man sie gebraucht viel billiger bekommen.

Vektor
Beiträge: 3
Registriert: Do 29. Apr 2010, 13:33
Kontaktdaten:

Re: Artikel automatisch erstellen?

Beitrag von Vektor » Do 29. Apr 2010, 13:41

Der Performance wegen empfehle ich statt:

Code: Alles auswählen

 while($line = fgets($fr, 10000)){
besser

Code: Alles auswählen

 while($line = stream_get_line($fr, 10000)){
zu verwenden, gerade bei größeren Dateien sinnvoll :)

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
http://de3.php.net/manual/en/function.fgets.php#86319

Antworten