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 » Fr 17. Jul 2015, 11:48

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: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Oldperl » Fr 17. Jul 2015, 13:29

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 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.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 » Fr 17. Jul 2015, 13:57

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 » Di 21. Jul 2015, 17:29

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: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Oldperl » Mi 22. Jul 2015, 06:04

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 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Faar » Mi 22. Jul 2015, 11:27

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: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Importfunktion für Contenido

Beitrag von Oldperl » Mi 22. Jul 2015, 11:39

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 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.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 » Sa 8. Aug 2015, 14:26

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 » So 9. Aug 2015, 11:08

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 » Mo 10. Aug 2015, 10:01

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 » Do 13. Aug 2015, 17:30

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 » Do 13. Aug 2015, 18:45

Schau dir dazu mal die Klasse Index aus class.search.php an. Die hab ich zumindest in der 4.8.18 gefunden.

Antworten