Modul | Erstellen von neuen Artikeln

Gesperrt
drive
Beiträge: 28
Registriert: Mi 10. Sep 2008, 09:04
Kontaktdaten:

Modul | Erstellen von neuen Artikeln

Beitrag 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.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul | Erstellen von neuen Artikeln

Beitrag 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é
drive
Beiträge: 28
Registriert: Mi 10. Sep 2008, 09:04
Kontaktdaten:

Re: Modul | Erstellen von neuen Artikeln

Beitrag von drive »

Hey René,

vielen Dank.
Die Funktion kannte ich garnicht, aber die macht genau das was sie soll :wink:

-------------------------

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
drive
Beiträge: 28
Registriert: Mi 10. Sep 2008, 09:04
Kontaktdaten:

Re: Modul | Erstellen von neuen Artikeln

Beitrag 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.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul | Erstellen von neuen Artikeln

Beitrag 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é
Gesperrt