Seite 1 von 1
Importfunktion für Contenido
Verfasst: Fr 17. Jul 2015, 11:48
von Leo
Hallo Contenido-Gemeinde,
ich muss eine Importfunktion für Contenido schreiben. Die Funktion soll in einer Kategorie für jeden Datensatz aus einer externen CSV-Datei einen Artikel in Contenido reinschreiben. Ich habe mal alle DB-Tabelle zusammengetragen, die ich für eine solche Funktion berücksichtigen müsste.
- con_art
- con_art_lang
- con_cat_art
- con_content
Fehlt eine DB-Tabelle? Oder habe ich alle Tabellen dafür berücksichtigt?
Vielen Dank vorab für euer Feedback!
Gruß Leonhard
Re: Importfunktion für Contenido
Verfasst: Fr 17. Jul 2015, 13:29
von Oldperl
Servus Leo,
schau Dir doch mal die Funktion conEditFirstTime() (Datei: contenido/includes/functions.con.php) an, die sollte Dir eigentlich alles zur Verfügung stellen was du brauchst um einen Artikel anzulegen. Dabei werden auch alle Querverbindungen zu Kategorien und Co korrekt gesetzt.
Gruß aus Franken
Ortwin
Re: Importfunktion für Contenido
Verfasst: Fr 17. Jul 2015, 13:57
von Leo
Dank dir! Ich schaue es mir an.

VG Leonhard
Re: Importfunktion für Contenido
Verfasst: Di 21. Jul 2015, 17:29
von Leo
Hallo Ortwin,
dein Ansatz war die Lösung. Hier ein Beispiel(zusammengefasst):
Code: Alles auswählen
// kategorie
$_idcat = 15;
// kategorie
$_idcat_new = 15;
// standard-template
$_idtpl = 1;
$_user = 'sysadmin';
$_validfrom = '';
$_valid = '';
$_url_csv = $cfgClient[1]['path']['frontend'].'upload/liste.csv';
$row = 1;
if (($handle = fopen($_url_csv, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);
// echo "<p> $num Felder in Zeile $row: <br /></p>\n";
$row++;
$_title = "";
$_h1 = "";
for ($c=0; $c < $num; $c++) {
if($c==0){
$_h1 .= $data[$c];
}
if($c==1){
$_h1 .= " <em>(".$data[$c].")</em>";
}
if($c==0 or $c==1){
$_title .= $data[$c]." - ";
}
// $_h1 = htmlentities($_h1,ENT_QUOTES,'UTF-8');
$__idart = conEditFirstTime($_idcat,array($_idcat_new),'',0,$_idtpl,'',$lang,$_title,'','',date('Y-m-d H:i:s'),date('Y-m-d H:i:s'),$_user,1,$_validfrom,$_valid,$artsort,$keyart=0);
// step 1 => template
$sql_string = "SELECT * FROM " . $cfg['tab']['tpl_conf'] ." ORDER BY idtplcfg DESC";
$db->query($sql_string);
$db->next_record();
$idtplcfg = $db->f("idtplcfg");
$idtplcfg++;
$upd_string = "INSERT INTO " . $cfg['tab']['tpl_conf'] . " (idtplcfg, idtpl,created,lastmodified,author) VALUES (".$idtplcfg.", ".$_idtpl.", '".date('Y-m-d H:i:s')."', '".date('Y-m-d H:i:s')."','".$_user."')";
$db->query($upd_string);
//step 2 => tplcfg -> article
$_idartlang = getArtLang($__idart, $lang);
$sql_string = "UPDATE " . $cfg['tab']['art_lang'] . " SET idtplcfg='".$idtplcfg."' WHERE idartlang='".$_idartlang."'";
$db->query($sql_string);
conSaveContentEntry($_idartlang, 'CMS_HTMLHEAD', 1, $_h1, $bForce = false);
conSaveContentEntry($_idartlang, 'CMS_TEXT', 1,$_title, $bForce = false);
} // end while
fclose($handle);
} // end if
Vielen Dank noch mal!
Gruß Leonhard
Re: Importfunktion für Contenido
Verfasst: Mi 22. Jul 2015, 06:04
von Oldperl
Hallo Leonhard,
freut mich das ich helfen konnte.
Sobald ich mit dem Pluginmanager für die ConLite fertig bin werde ich mal schauen ob man aus deinem Ansatz nicht ein Import-/Export-Plugin stricken kann. So mit Drag&Drop für die Zuordnung von csv-Feld zu Content-Type.
Ob dafür Bedarf besteht kann ich halt nicht sagen. Na mal schauen.
Gruß aus Franken
Ortwin
Re: Importfunktion für Contenido
Verfasst: Mi 22. Jul 2015, 11:27
von Faar
Hallo Ortwin,
so eine Importfunktion wäre sicher sehr interessant für Produktdatenbanken, um je Produkt automatisch einen echten Artikel anlegen zu können.
Bisherige Lösungen bestehen meistens daraus, dass über einen GET-Link ein Modul angesprochen wird, das dann lediglich die Produkte aus der Datenbank ausliest.
Für SEO und Deeplinking wäre aber
1 Produkt = 1 Artikelseite deutlich besser.
Ich vermute mal frech aus der Hüfte heraus, dass 4fb so etwas in der Art für die Contenido-Oxidshop-Anbindung bereits hat. Ich kann mir nicht vorstellen, dass im Shop und Contenido jedesmal alles doppelt manuell eingerichtet wird. Also, ich denke, das haben die sicher irgendwo noch rumliegen

Re: Importfunktion für Contenido
Verfasst: Mi 22. Jul 2015, 11:39
von Oldperl
Servus Frank,
da schieß ich auch mal aus der Hüfte - für die OXID-Anbindung nutzt 4fb so viel ich weiß die SOAP-Schnittstelle von OXID. Ich denke nicht das die mal einfach so was "rumliegen" haben. Diverse Erweiterungen für CONTENIDO bieten sie ja bereits über Ihre HP an.
Aber wie auch immer, ich schau einfach mal ob Interesse in der Community besteht und wenn kann man so was ja recht leicht und schnell entwickeln. Genug KoffHoff rund um CONTENIDO habe ich ja.
Gruß aus Franken
Ortwin
Re: Importfunktion für Contenido
Verfasst: Sa 8. Aug 2015, 14:26
von Leo
Gibt es eigentlich auch so eine Funktion wie 'conEditFirstTime' für Kategorien? Oder müsste ich mir eine solche Funktion selbst schreiben?
http://api.contenido.org/con490/index.html
Danke vorab!
Gruß Leonhard
Re: Importfunktion für Contenido
Verfasst: So 9. Aug 2015, 11:08
von marcus.gnass_4fb
Klar gibts sowas: strNewCategory aus der functions.str.php.
Re: Importfunktion für Contenido
Verfasst: Mo 10. Aug 2015, 10:01
von Leo
Ach herrje, jetzt war ich zu schnell.

Ich habe mir dann selbst ne Funktion geschrieben.
Danke trotzdem!
VG Leonhard
Re: Importfunktion für Contenido
Verfasst: Do 13. Aug 2015, 17:30
von Leo
Hallo Contenido-Gemeinde,
die Importfunktion funktioniert jetzt soweit, auch für die Kategorien. Dabei ist mir eine Sache noch aufgefallen. Die importieren Artikel werden in der Volltextsuche nicht gefunden. Welche Funktion muss ich aufrufen, damit diese Artikel ebenfalls indiziert werden? Ich brauche einen Lösungsansatz für Contenido 4.8. Vielen Dank schon einmal!
VG Leonhard
Re: Importfunktion für Contenido
Verfasst: Do 13. Aug 2015, 18:45
von marcus.gnass_4fb
Schau dir dazu mal die Klasse Index aus class.search.php an. Die hab ich zumindest in der 4.8.18 gefunden.