Importfunktion für Contenido

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Importfunktion für Contenido

Beitrag 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
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Leo »

Dank dir! Ich schaue es mir an. :D VG Leonhard
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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! :D

Gruß Leonhard
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Oldperl »

Hallo Leonhard,

freut mich das ich helfen konnte. :D
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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 15 Mal
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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 8)
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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
marcus.gnass_4fb
Beiträge: 87
Registriert: Do 26. Apr 2012, 23:02
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von marcus.gnass_4fb »

Klar gibts sowas: strNewCategory aus der functions.str.php.
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Leo »

Ach herrje, jetzt war ich zu schnell. :| Ich habe mir dann selbst ne Funktion geschrieben. :(

Danke trotzdem!

VG Leonhard
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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
marcus.gnass_4fb
Beiträge: 87
Registriert: Do 26. Apr 2012, 23:02
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag 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.
Antworten