idtpl Param von Funktion conEditFirstTime

Gesperrt
knb
Beiträge: 224
Registriert: Fr 9. Sep 2005, 14:03
Wohnort: Potsdam
Kontaktdaten:

idtpl Param von Funktion conEditFirstTime

Beitrag von knb »

Die Funktion conEditFirstTime benötigt 18 Parameter, wenn ich richtig gezählt habe.
Nummer 5 ist idtpl.

1. Mir scheint, als würde die Funktion diesen Parameter idtpl stets ignorieren. Im Quelltext der Funktion taucht er nicht mehr auf.

Der Parameter auf den es ankommt, um einen neuen Eintrag in con_art_lang vorzunehmen, ist idtplcfg. Diese idtplcfg ist Foreign Key zu Tabelle con_template_conf.

2. idtplcfg für den neuen Artikel wird nicht von der Funktion ermittelt.

Man sollte darauf hinweisen dass idtpl stets null sein muss. (genauso wie idart und idartlang). Sonst ist es leicht irreführend . Man denkt, man kann eine Template-ID Übergeben und der neu angelegte Artikel liegt im gewünschten Template vor, aber denkste!

Code: Alles auswählen

                  $sql = "INSERT INTO
                          ".$cfg["tab"]["art_lang"]." (
                          idartlang,
                          idart,
                          idlang,
-- hier fehlt idtplcfg
                          title,
                          pagetitle,
                          summary,
...
Mindestens Schlechtes API_Design, kann auch sein, dass es sich um einen Bug handelt. Vielleicht war der Code mal drin, welcher die neue idtplcfg ermittelt, wurde dann aber wieder wieder rausgenommen, aber nur teilweise. Denn in der Funktion wird aus tplcfg nur gelöscht, aber nichts eingefügt.

Code: Alles auswählen

   //******** delete from 'tpl_conf'-table ***************
...                  $tmp_idtplcfg = $db->f('idtplcfg');
$sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".$tmp_idtplcfg."'";
$db->query($sql);
DIe Templatezuweisung für einen Artikel muss man anscheinend mit extra Code bewerkstelligen.

PS
Die Vorgeschichte zu diesem Topic steht in diesem Thread
http://www.contenido.org/forum/viewtopic.php?p=104393
Gruss,
Knut
knb
Beiträge: 224
Registriert: Fr 9. Sep 2005, 14:03
Wohnort: Potsdam
Kontaktdaten:

Beitrag von knb »

also ich habe jetzt anscheinend herausgefunden wie man per API einem Artikel ein neues Template zuweisen kann:

1. den Code von der Methode assignTemplate() , Klasse cApiCategoryLanguageCollection aus dem File
/contenido/classes/contenido/class.categorylanguage.php
rüberkopieren nach
/contenido/classes/contenido/class.articlelanguage.php
(16 Zeilen )

2. (optional) Variable $c_tplcfg umbenennen in $a_tplcfg

3. in das eigene Modul folgenden Code einfügen (leicht gekürzt):

Code: Alles auswählen

cInclude('classes', 'class.article.php');
cInclude('includes', 'functions.con.php');
cInclude('classes', 'contenido/class.articlelanguage.php');

$new_idart = conEditFirstTime(...18 params...);
//grab newly created article
$newart = new Article($new_idart, $client, $lang);
$ial = $newart->getField('idartlang');
echo "<pre> trying cApiArticleLanguage call: \$ial = $ial, idtpl=$idtpl </pre>";
$al = new cApiArticleLanguage($ial);
$al->assignTemplate($idtpl);
-- fertig.
Scheint bei mir zu funktionieren. Nicht weiter getestet ! Morgen mal sehen ob es sich bewährt.
Wahrscheinlich gibt es noch andere Arten das zu machen. Diese Lösung hier beruht auf der berüchtigten genericdb und war für mich ganz lehrreich :-)
Gruss,
Knut
Gesperrt