0
Wird überprüft

Beim Erzeugen von Unterrubriken manche Metafelder nicht kopieren

Oliver Hoos vor 8 Jahren aktualisiert von Georg Mavridis vor 7 Jahren 4

Wenn eine neue Unterrubrik erzeugt wird, dann werden alle Metainformationen der Parent-Cat gelesen und als Grundlage für die neue Rubrik verwendet.


Ich wünsche mir für meinen Kunden eine updatesichere Möglichkeit einige Felder nicht mit zu kopieren.

Dazu könnten man eine system.conf Variable


"DO_NOT_COPY_METAFILED_ON_CAT_CREATE" = "UCID, mySwitch, Foo"


anlegen die dann in


Imperia/Controller/Structure/NewEdit.pm


ausgewertet wird.


In etwa so:


sub create_category {
    my %inp = @_;
    my $category   = $inp{category};
    my $parent_id  = $inp{parent_id};
    my $backto     = $inp{backto};

    my $nodeinfo = $category->getFields;

    # Children inherit meta information from their parents.
    if ($parent_id) {
        my $parent_cat = Category::Category->new;

        $parent_cat->initByID($parent_id)
            or fatalError($category->errorSuck)
               and return;
        $nodeinfo->{META_INFO} = $parent_cat->getMetaInfo;
            if ($imperia->common->{system_conf}->{CATEGORY_QUICK_CONFIG}) {
                $nodeinfo->{ACL} = $parent_cat->getACLString;
                $category->setACLString($nodeinfo->{ACL});
        } else {
            $nodeinfo->{ACL} = $imperia->getUMCache
                                                ->mergeACL($nodeinfo->{ACL}, $parent_cat->getACLString);
        }
    }

@IGNORE_METAFIELDS = split(',', DO_NOT_COPY_METAFILED_ON_CAT_CREATE)


Hier einen IGNORE_METAFIELDS - FILTER auf $nodeinfo->{META_INFO} hinzufügen

alterntiv 
$parent_cat->getMetaInfo(@IGNORE_METAFIELDS);


Quelle system.conf Variable "DO_NOT_COPY_METAFILED_ON_CAT_CREATE" = "UCID, mySwitch"


    $category->create ($parent_id, $nodeinfo) or
        fatalError($category->errorSuck) and return;

    $category->flush();

    my $catid = $category->getID();
    my $next_step = $backto
        ? $backto . (index ($backto, '?') == -1 ? "?cat=$catid" : "&cat=$catid")
        : $imperia->uri('/structure/categories', '?new_cat=' . $catid . '#' . $catid);

    my $msg = __x("Category '{name}' successfully created!",
                    name => $category->getName);

    $imperia->flashStatus->set($msg);

    $imperia->redirect($next_step);

    return 200;
}


Ich würde mich auch über alternative Ideen freuen, bei denen ich den Imperia-Code nicht verändern muss.

Wird überprüft

Das erscheint mir sehr speziell auf die von Euch verwendeten UCIDs zum Abgleich mehrerer Systeme, Die Cat ID IST ja in sich schon eindeutig. Solange da nicht noch mehrere Leute dafür "voten" sehe ich das Thema eher im Projekt.

Naja, es kommt im Projekt schon mal öfter vor, dass man nicht alle Attribute der Elterrubrik erben möchte (Die UCID ist nur ein Beispiel).

Aber speziell ist es schon. Vlt. hast du ja einen kleinen Tipp wie man sowas hinbekommt ohne eine Änderung an den Imperia-Sourcen zu machen.

Ist bis auf weiteres nicht auf unserer Todo liste, sorry.