Seite 1 von 1
Modul | Erstellen von neuen Artikeln
Verfasst: Do 13. Okt 2011, 14:57
von drive
Hallo zusammen,
habe eine kurze Frage:
zum Erstellen von neuen Artikeln über ein Modul wollte ich das Chain-System verwenden.
Irgendwie funktionierts aber nich so ganz, könnt ihr mir ein Tipp geben?
Code: Alles auswählen
$arr = array(
'idcat' => "1",
'idcatnew' => $idcatnew,
'idart' => "0",
'is_start' => "0",
'idtpl' => "6",
'idartlang' => "0",
'lang' => "1",
'title' => "testeintrag",
'summary' => "",
'artspec' => "",
'created' => "2011-10-13 15:06:18",
'lastmodified' => "2011-10-13 15:06:18",
'author' => "sysadmin",
'online' => "",
'datestart' => "",
'dateend' => "",
'artsort' => "0"
);
var_dump(CEC_Hook::execute("Contenido.Action.con_saveart.AfterCall", $arr));
Das Ergebnis ist NULL.
Kann mir das Thema hier vielleicht jemand kurz erläutern?
Da die Dokumentation hierüber nicht so umfangreich ist.
Gruß Tobi.
Re: Modul | Erstellen von neuen Artikeln
Verfasst: Do 13. Okt 2011, 15:53
von Spider IT
Hallo Tobi,
per Chain kann ich dir das nicht sagen, aber warum nutzt du nicht die Funktion conEditFirstTime()?
Code: Alles auswählen
$def = array(
"client" => $client,
"lang" => $lang,
"idcat" => $category,
"idcatnew" => array($category),
"is_start" => 0,
"idtpl" => null,
"idartlang" => null,
"title" => (("CMS_VALUE[1]" == "1") ? date('Y-m-d H:i ') : '') . $title,
"summary" => $summary,
"artspec" => null,
"created" => date('Y-m-d H:i:s'),
"lastmodified" => date('Y-m-d H:i:s'),
"author" => $author,
"online" => $is_online,
"datestart" => '0000-00-00 00:00:00',
"dateend" => '0000-00-00 00:00:00',
"artsort" => 0
);
// conEditFirstTime() zum erstellen eines neuen artikels mit den notwendigen variablen
$new_art_id = conEditFirstTime($def["idcat"], $def["idcatnew"], $def["idart"], $def["is_start"], $def["idtpl"], $def["idartlang"], $def["lang"], $def["title"], $def["summary"], $def["artspec"], $def["created"], $def["lastmodified"], $def["author"], $def["online"], $def["keyart"], $def["datestart"], $def["dateend"]);
Gruß
René
Re: Modul | Erstellen von neuen Artikeln
Verfasst: Do 13. Okt 2011, 17:09
von drive
Hey René,
vielen Dank.
Die Funktion kannte ich garnicht, aber die macht genau das was sie soll
-------------------------
EDIT:
Da gibt's doch noch ein Problem.
Und zwar legt er mir den Artikel wie gewollt an, weist aber das Template nicht zu.
Daher habe ich folgendes aus der class.articlelanguage Versucht:
Code: Alles auswählen
$articleLanguage = new cApiArticleLanguage($idartLang);
$articleLanguage->assignTemplate($idtpl);
Den Code hab ich hier im Forum aus einer älteren Version,
in der neuen Version 4.8.15 wurde aber die Methode aus der Klasse entfernt.
Hat jemand ein heißen Tip?
Gruß Tobi
Re: Modul | Erstellen von neuen Artikeln
Verfasst: Do 20. Okt 2011, 13:52
von drive
Hallo zusammen,
sorry für den Doppelpost aber ich konnte im Forum nirgendwo finden
wie ich einem Artikel ein Template mit Einstellungen zuweise (via PHP).
Bzw. das was ich herausgefunden habe funktioniert zwar,
aber sobald ich einen Artikel lösche wird die Zuweisung der
anderen Artikel mitgelöscht (also die `idtplcfg` verschiebt sich da irgendwie).
Hier mein Code:
Code: Alles auswählen
$sql = "SELECT idtplcfg FROM `con_template_conf`
WHERE idtpl='".Contenido_Security::toInteger(10)."'";
$db->query($sql);
$db->next_record();
$sql = "UPDATE ".$cfg["tab"]["art_lang"]."
SET idtplcfg = '".Contenido_Security::toInteger($db->f('idtplcfg'))."'
WHERE idart='".Contenido_Security::toInteger($newIdart)."'
AND idlang='".Contenido_Security::toInteger($lang)."'";
$db->query($sql);
$db->next_record();
Hat da jemand einen besseren Ansatz
um einem Artikel ein Template zuzuweisen?
Gruß Tobi.
Re: Modul | Erstellen von neuen Artikeln
Verfasst: Do 20. Okt 2011, 14:21
von Spider IT
Hallo Tobi,
das Problem liegt darin, dass du nicht das Template, sondern die Template-Konfiguration zuweist.
Diese wird aber je Kategorie und Artikel separat gespeichert und natürlich auch mitgelöscht.
Um das Template zuweisen zu können, muss eine neue idtplcfg erzeugt werden (inkl. Eintrag in der con_template_conf Tabelle).
Wenn du hierfür aber die höchste idtplcfg + 1 nimmst, wird der Zähler in der Tabelle con_sequence nicht mit hochgestellt.
Diese enthält je Tabelle den letzt genutzten Indexwert und Contenido nutzt diese Tabelle um neue Indexwerte zu generieren (Überschreibungsgefahr!).
Da du aber anscheinend ein Template zuweisen und die Konfiguration kopieren möchtest, kannst du die Funktion tplcfgDuplicate() verwenden.
Nachfolgend ein Codeausschnitt aus einem aktuellem Projekt von mir:
Code: Alles auswählen
cInclude('includes', 'functions.tpl.php');
# Templatekonfiguration uebernehmen aus der Kategorie
$sql = 'SELECT idtplcfg
FROM ' . $cfg['tab']['cat_lang'] . '
WHERE ((idcat=' . $target_idcat . ')
AND (idlang=' . $lang . '))';
$db->query($sql);
$db->next_record();
$idtplcfg_cat = intval($db->f('idtplcfg'));
$idtplcfg_new = tplcfgDuplicate($idtplcfg_cat);
$sql = 'UPDATE ' . $cfg['tab']['art_lang'] . '
SET idtplcfg = ' . $idtplcfg_new . '
WHERE (idartlang=' . $idartlang_new . ')';
$db->query($sql);
Gruß
René