Ergebnis 1 bis 23 von 23

Thema: Wie bekomme ich werte aus einem dc-table objekt?

  1. #1
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard Wie bekomme ich werte aus einem dc-table objekt?

    hallöchen again,

    per save-callback versuche ich gerade die datenbank zu manipulieren. leider habe ich als übergabeparameter nur einen string mit dem wert 1. diesen wert möchte ich gerne in die datenbank in ein bestimmtes feld eintragen.

    ich übergebe auch wie gesagt ein dc-table objekt
    Code:
    $user
    , dass meine gesuchten werte inne hat. wenn ich jedoch mit
    PHP-Code:
    $user->strField 
    auf diesen wert zugreifen möchte, bleibt meine deklarierte variable bei null? wie komme ich denn an diesen wert ran aus dem dc-table objekt? er ist ja da.

    PHP-Code:
    'category' => array
    (
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['category'],
    'exclude'                 => true,
    'filter'                  => true,
    'inputType'               => 'checkbox',
                            
    'save_callback' => array
    (
                                    array(
    'tl_member''setCategories')
    )
    ), 
    PHP-Code:
    public function setCategories($dc$user)
            {
                
    $category $user->strInputName;
                
                
    $this->Database->prepare("INSERT INTO tl_member (" $user->strField ") VALUES (?)")->execute($dc); 
    Geändert von xchs (13.06.2013 um 09:58 Uhr)

  2. #2
    Contao-Fan Avatar von christian.barkowsky
    Registriert seit
    22.06.2009.
    Ort
    Brandenburg an der Havel
    Beiträge
    388
    Partner-ID
    6285
    User beschenken
    Wunschliste

    Standard

    Moin moin,

    deine Save-Methode sollte so aussehen: setCategories($varValue, DataContainer $dc)

    So kannst du auf den aktiven Datensatz zugreifen $dc->activeRecord->DEINFELD

  3. #3
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    Zitat Zitat von christian.barkowsky Beitrag anzeigen
    Moin moin,

    deine Save-Methode sollte so aussehen: setCategories($varValue, DataContainer $dc)

    So kannst du auf den aktiven Datensatz zugreifen $dc->activeRecord->DEINFELD
    das wäre meine nächste frage gewesen. mach ich das generell immer so? erst den $varValue und dann den $dc?

    wie genau steht denn der aufruf beim save_callback in zusammenhang mit der methode und mit dem methodenkopf unten, was die parameterübergabe betrifft?

    PHP-Code:
    save_callback( array('tl_member''setCategories'); 
    ist tl_member mein $dc?
    Geändert von wdfgea (30.05.2013 um 08:35 Uhr)

  4. #4
    Contao-Fan Avatar von christian.barkowsky
    Registriert seit
    22.06.2009.
    Ort
    Brandenburg an der Havel
    Beiträge
    388
    Partner-ID
    6285
    User beschenken
    Wunschliste

    Standard

    In diesem Fall schon.

    Das kannst du dir z.b. bei der Alias-Generierung im DCA von tl_article ansehen.

  5. #5
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    also ist die parameterübergabe verschieden geregelt? gibt es denn da keine api? irgendwie sehe ich da noch nicht durch und mit meinen kenntnisses komme ich da nicht weiter. tatsächlich übergebe ich ja bei methodenaufruf eigentlich nichts. jedenfalls nicht so, wie ich es klassischerweise bei methodenaufruf mache mit setCategories($param, $param). das irritiert mich so ein wenig.

  6. #6
    Contao-Fan Avatar von christian.barkowsky
    Registriert seit
    22.06.2009.
    Ort
    Brandenburg an der Havel
    Beiträge
    388
    Partner-ID
    6285
    User beschenken
    Wunschliste

    Standard

    Alles da --> Contao API

  7. #7
    Contao-Nutzer Avatar von Nils Heinold
    Registriert seit
    04.09.2010.
    Ort
    Uckermark
    Beiträge
    155
    User beschenken
    Wunschliste

    Standard

    siehe einfach mal hier

    https://contao.org/de/manual/3.1/dat...ys.html#felder

    ein bisschen nach untern scrollen


    unter save_callback:

    Wird beim Speichern des Feldes ausgeführt und übergibt den Feldwert sowie das DataContainer-Objekt als Argument. Erwartet einen Feldwert als Rückgabewert. Durch Auslösen einer Exception kann eine Fehlermeldung ausgegeben werden.

  8. #8
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    save_callback gelesen und verstanden.

    wenn ich im backend meinem mitglied per checkbox true oder false abspeichere, wird dieser checkbox-wert (0, 1) an meine methode setCategories() übergeben. der wert 1 ist so gesehen ja erstmal sehr hilfreich. diesen möchte ich gerne in die datenbank schreiben. soweit ganz einfach. jetzt habe ich allerdings das problem, dass ich auf den labelnamen meiner checkbox nicht zugreifen kann. der datacontainer hält in den variablen strField & strInputName genau diesen labelnamen. wenn ich diesen in meiner methode einer variablen zuweisen möchte, bleibt die variable $category leider null, obwohl die variable strField & strInputName in meinem datacontainer einen string des labelnamen hält. das macht mich kirre.

    komm ich nur auf bestimmte weise auf das dc_table objekt und dessen werte? das müsste doch so $dc->strField reichen?
    Geändert von wdfgea (04.06.2013 um 10:41 Uhr)

  9. #9
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    also das dc_table objekt kann ich in der api nicht finden.

    ist der $dc->strField wert mit un- oder deserialize zu erreichen? muss gestehen, dass ich nicht weiß, wie ich mit dem $dc in dem zusammenhang umgehen und arbeiten kann und sollte...danke für die hilfe.
    Geändert von wdfgea (04.06.2013 um 12:40 Uhr)

  10. #10
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    Eine schier unlösbare frage scheint das hier zu sein. Kann denn keiner helfen?

    erneute frage, anders gestellt: ihr seht das bild unten. warum funktioniert die deklaration bei meiner string-query nicht mit $dc->intId bzw. warum ist der wert bei benutzung dieser zuweisung null? bitte beachtet die gelb gemarkerteten bereiche.
    Angehängte Grafiken Angehängte Grafiken
    Geändert von wdfgea (07.06.2013 um 09:58 Uhr)

  11. #11
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    gibts denn keine ratschläge?!

  12. #12
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Nicht sicher, ob das etwas damit zu tun hat, aber:

    limit()->execute() vs. execute()->limit()
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  13. #13
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    darum ging es nur sekundär. die query-abfrage ist null, weil mein $dc->intId auch null liefert. warum ist das feld null an der stelle, wenn das objekt laut debugger an der stelle $dc->intId den wert hat, den ich brauche?? also die zuweisung funktioniert nicht. hat das was mit unserializie oder deserialize der werte zu tun mglw.?

  14. #14
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    anscheinend ein problem, was nicht zu lösen ist.

  15. #15
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    hast du denn schon probiert wie oben erwähnt:
    PHP-Code:
    $dc->activeRecord->intId 
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  16. #16
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    PHP-Code:
    $id $dc->activeRecord->intId
    in meinem fall führt auch diese abfrage zu null. wie gesagt, im debugger hat das feld den wert meiner id, die ich brauche.

  17. #17
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Normalerweise hast du über den DC ja Zugriff auf die Datenfelder der jeweiligen Tabelle in der du dich grad befindest mit dem callback.
    Ein Feld intId gibt es dort aber nicht, wie der Name vermuten lässt ist das eine interne ID, auf die man keinen Zugriff hat.
    In der Grafik (Debug) sieht man nur interne Klassen Variablen vom DC selbst, daher die Vermutung über activeRecord zu gehen.

    Sicher das du dieses ID benötigts? Wenn ich mir deine Abfrage (Grafik) so anschaue bekomme ich den Eindruck, du willst den Namen der Gruppe haben über die Gruppen ID.
    Die Gruppen ID als solches musst du erst ermitteln, denn in tl_member im Feld groups steht keine ID sondern ein serialisiertes Array.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  18. #18
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    jetzt hab ich wieder einen knoten im kopf. ich muss die id ermitteln? ok. ich befinde mich doch gerade im dc von "tl_member_group". irgendwo dort muss doch der aktuelle wert der id versteckt sein, dass ich den gruppennamen (string) zuweisen kann. und jetzt sehe ich mich internen klassen und variablen ausgesetzt, an die ich nicht rankomme, da die klasse intern ist (protected/private).

    wie und wo ermittel ich den die id des aktuellen datensatzes in meinem fall?

    kann es sein, dass bei diesem konkreten fall, die onchange_callback variante für meine checkbox unglücklich gewählt ist? ich setze ein häkchen im backend und rufe den callback auf. dann hab ich $value = 1,0 und das "geschützte" bzw. "interne" $dc-objekt? eigentlich möchte ich nur ein häkchen setzen im datensatz der member_group. das stelle ich mir gerade schwierig vor, wenn ich mir vorstelle, dass ich ausschließlich mit dem checkbox-wert arbeiten kann und nicht an das $dc-objekt rankomme, da dieses intern ist. versteh ich das falsch?
    Geändert von wdfgea (13.06.2013 um 10:43 Uhr)

  19. #19
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Kann ich aus dem Stehgreif sauch nicht sagen, müsste ich selber debuggen.
    Aber in meinen Erweiterungen greife ich je nach Art des Callbacks über $dc->id oder $dc->activeRecord->id zu, was anderes habe ich bisher nicht benötigt.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  20. #20
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    nehmen wir an, ich habe eine checkbox mit einem bestimmten namen. diese checkbox (label, value) möchte ich gerne mittels save_callback übergeben und in die datenbank schreiben. wie komme ich an den labelnamen der checkbox ran? bleibt da nur die möglichkeit des activeRecords oder gibt es da ne andere lösung? meiner meinung nach, hat der $dc nur in den besagten internen feldern diese werte, doch da komme ich ja nicht ran. hat da jemand eine idee?
    Geändert von wdfgea (13.06.2013 um 11:36 Uhr)

  21. #21
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Also, ich habe nochmal nachgeschaut, es ist so wie ich schrieb "$dc->id", Auszüge aus meiner Erweiterung:
    PHP-Code:
    //DCA Feld mit save_callback
    'published' => array
    (
        
    'exclude' => true,
        
    'label' => &$GLOBALS['TL_LANG']['tl_integrity_check']['published'],
        
    'inputType' => 'checkbox',
        
    'eval' => array('doNotCopy'=>true'tl_class' => 'w50'),
        
    'save_callback' => array
        (
            array(
    'tl_integrity_check''setPublished')
        )
    ),

    //Methode die vom callback aufgerufen wird
    public function setPublished($varValueDataContainer $dc)
    {
        if (
    $varValue)
        {
             
    // There can be only one.
             
    $this->Database->prepare("UPDATE tl_integrity_check 
                                    SET tstamp="
    time() .", published='' 
                                   WHERE id != ?"
    )
                            ->
    execute$dc->id );
        }
        return 
    $varValue;

    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  22. #22
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Und lass dich nicht dran stören, das es laut Debug keine id gibt, die kommt bestimmt über ein getter Methode.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  23. #23
    Contao-Nutzer
    Registriert seit
    06.02.2013.
    Beiträge
    60

    Standard

    die id-frage hat sich geklärt. jetzt aber wie gesagt an anderer stelle meines codes das gleiche "problem". im backend vergebe ich an meine mitglieder eine gruppenkategorie mit checkboxen. alle checkboxen rufen den callback auf. es muss doch irgendwie rauszufinden sein, mit welchem labelnamen ich arbeite gerade bzw. dieser muss doch dynamisch zu ermitteln sein. $dc->activeRecord->strField funktioniert hierbei nicht.

    meine variable $category soll doch bitte den wert hinter strInputName oder strField annehmen. siehe bild. die deklarierung mit $dc->id war nur zu testzwecken.
    Angehängte Grafiken Angehängte Grafiken

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •