Ergebnis 1 bis 34 von 34

Thema: Metamodels Core Funktionen

  1. #1
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard Metamodels Core Funktionen

    Hallo Leute!

    Ich bin gerade daran einen eigenen CSV Importer als Contao Extension zu entwickeln.
    Die Daten von der CSV Datei sollen in ein bestehenden Metamodel eingetragen werden.

    Was mir jetzt noch fehlt, ist die Logik, wie man bei einem Metamodel Objekt einfach Daten inserten / updaten oder löschen kann.
    Bei anderen Extensions habe ich schon folgende MM Methoden gesehen:

    PHP-Code:
    $MMObject = \MetaModels\Factory::byTableName('test');

    $MMObject->set(...
    $MMObject->get(
    $MMObject->save()
    $MMObject->reset();
    $MMObject->next(); 

    Gibt es hierfür irgendwo im www ein Tutorial oder eine Lektüre zum lesen?
    Hab leider im Internet dazu nichts gefunden :-(
    Oder muss man die Daten über das Datenbankobjekt selber eintragen?
    Geändert von Flash (20.04.2015 um 14:13 Uhr)

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    ... [tabimporter] ist bekannt?!? ggf. reicht ein "push" auf 3.x

  3. #3
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Hallo, danke ja der [tabimporter] ist bekannt, leider wird dieser aber nicht mehr weiterentwickelt.
    Ich möchte gerne durch eine eigene Extension viel von Contao dazulernen :-)

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flash Beitrag anzeigen
    Hallo, danke ja der [tabimporter] ist bekannt, leider wird dieser aber nicht mehr weiterentwickelt.
    Ich möchte gerne durch eine eigene Extension viel von Contao dazulernen :-)
    schade - hatte auf einen "Weiterentwickler" gehofft...

    ... auch beim Weiterentwickeln/Adaptieren kann man eine Menge lernen ;-)

  5. #5
    Contao-Fan Avatar von WilhelmTell
    Registriert seit
    12.12.2014.
    Beiträge
    316

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    "Weiterentwickler"
    Das gesamte contao-Forum stimmt diesem Vorschlag zu !

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Gibt es hierfür irgendwo im www ein Tutorial oder eine Lektüre zum lesen?
    eher nein - Stichworte: "Metamodels + Interface" => das alle Dateien, die mit "I" anfangen

  7. #7
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    schade - hatte auf einen "Weiterentwickler" gehofft...

    ... auch beim Weiterentwickeln/Adaptieren kann man eine Menge lernen ;-)
    Hehe das stimmt, aber leider fehlen mit halt noch Basics, welche Ich nur so erlernen kann..

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    nun ja, es geht jeder seinen eigenen Weg...

    Hangelt man sich an einem bestehenden Projekt lang, kann man einige Fragen zu "Was/wie kann ich alles machen" beantworten.

  9. #9
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Ich wollte doch nur ein paar Infos zu den Metamodels Core Funktionen :-((

    PHP-Code:
    $MMObject = \MetaModels\Factory::byTableName('test');

    $MMObject->set(...
    $MMObject->get(
    $MMObject->save()
    $MMObject->reset();
    $MMObject->next(); 
    Damit ich mal eine so große Extension wie den Tabimporter umbauen kann, muss ich noch viel lernen...

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    hast Du "Mr. Google" wie in #6 geschrieben gefragt?

  11. #11
    Contao-Nutzer
    Registriert seit
    04.12.2010.
    Beiträge
    21

    Standard Tabimporter

    Hallo, hatte das gleiche Problem,
    habe es mit "CSV Datenbankimport" gelöst.

    https://github.com/markocupic/import_from_csv

  12. #12
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Super danke für den Extension Tipp.
    Von dieser Extension kann man viel lernen

    Ein Problem ist bei dieser Extension aber trotzdem noch gegeben:
    Metamodels mit einem Translatedtext Attribut können nicht eingefügt werden, da die Datensätze mit einen normalen Datenbank Insert eingefügt werden.

    Natürlich wäre es möglich zuerst einen Datensatz in der "tl_metamodel_translatedtext" Tabelle und dann in der Haupt Metamodels Tabelle anzulegen.

    Ich bin mir aber sicher das es bei den Metamodels Core eine fertige Funktion dafür gibt.

    Mr. Google findet leider nichts :-(
    Geändert von Flash (21.04.2015 um 11:10 Uhr)

  13. #13
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    check mal den Autoloader bzw. ist dein BE-Cache neu erstellt bzw. aus?

    da die Datensätze mittels einen normalen Datenbank Insert eingefügt werden
    wie sieht im Gegensatz ein "nicht-normaler" Insert aus?

  14. #14
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Ich denke da an Metamodel Core Funktionen zum Inserten, welche automatisch auch die Sprachen-Datensätze anlegen.
    Ein Metamodels Entwickler sollte sowas normal wissen oder?

  15. #15
    Contao-Fan
    Registriert seit
    09.09.2009.
    Beiträge
    366

    Standard

    Hi,

    hier ein Beispiel aus einer älteren MetaModels Installation, die Klassen-Bezeichnungen haben sich im TNG geändert. Aber das Prinzip ist so geblieben.

    PHP-Code:
    $objItem = new MetaModelItem('METAMODEL-Instance', array());
    $objItem->set('attribute_name''value');
    $objItem->save(); 
    Grüße

    Chris

  16. #16
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flash Beitrag anzeigen
    Ich denke da an Metamodel Core Funktionen zum Inserten, welche automatisch auch die Sprachen-Datensätze anlegen.
    Ein Metamodels Entwickler sollte sowas normal wissen oder?
    "DIE" Entwickler wissen das bestimmt - für alle anderen ist der steinige Weg der Suche vorgesehen

    https://github.com/MetaModels/core/b...Translated.php

    => setTranslatedDataFor könnte passen

  17. #17
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Der Weg von typo ist sicherer. Besonders wenn man ihn vorher noch durch "widgetToValue" piped.

    Im Endeffekt musst du dich, aus MetaModels Sicht, mit den Daten nur wie ein Widget verhalten. Den Rest macht dann das System.

    Hinsichtlich Importer, ich lasse das "Tab" mal absichtlich weg, werden wir wohl in den naechsten Monaten von MetaModels aus was releasen. Das Fundraising ist durch und wir haben ja in der Vergangenheit auch noch das ein oder andere Tool von dem wir noch ein wenig Code verwenden koennen.
    Was uns vorschwebt ist ein gaenzlicher Cross-porter (Je nachdem wie man ihn eben konfiguriert rein in ein System oder aber raus aus einem System oder rueber in ein System usw.). Bis das jedoch feature complete sein wird ist noch ein langer Weg (angesichts MM2, DCG, Composer, ... was alles an "den Entwicklern" klebt).

    Sorry to not be of better news und dass wir keine "Entwickler Doku" geschrieben haben, wir wissen leider einfach nicht wann wir die machen sollen.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  18. #18
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von xtra Beitrag anzeigen
    Sorry to not be of better news und dass wir keine "Entwickler Doku" geschrieben haben, wir wissen leider einfach nicht wann wir die machen sollen.
    => Hallo xtra, in einem der vergangenen Tickets hattest Du auf meine Frage/Anregung angekündigt, ein Doku-System ähnlich wie Isotope anzuwerfen... vielleicht können diejenigen, die nicht ganz so dicht an der "Codingschmiede" sitzen, das Projekt unterstützen.

  19. #19
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Hallo, danke für euer Feedback

    Ich habs nun hinbekommen , das Metamodel Item Objekt nimmt einem recht viel Arbeit ab.
    PHP-Code:
    // Objekt vom Metamodel erstellen
    $MMObject = \MetaModels\Factory::byId($TableId);
    // Neues Item Objekt erstellen
    $ObjItem = new \MetaModels\Item($MMObject, array());
    // Befüllen mit Attribut text
    $ObjItem->set('Feldname'$Wert);
    // Befüllen mit Attribut translatedtext
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url
    $ObjItem->set('Feldname', array($Name$URL));
    // Speichern
    $ObjItem->save(); 
    Ich hoffe ich konnte auch anderen damit helfen
    Geändert von Flash (22.04.2015 um 14:27 Uhr)

  20. #20
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    @xtra:

    wie habe ich nach dem Insert Zugriff auf die gerade erstellte Id?

    so?

    PHP-Code:
    ...
    // Speichern
    $objItem->save();

    // erzeugte Id (?)
    $intId $objItem->get('id'); 
    Hintergrund: wenn ich beim Einspielen Daten in eine andere mm-Tabelle mit einer Referenzierung speichern möchte, würde ich die Id benötigen

  21. #21
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Ja genau mit
    PHP-Code:
    $Id $ObjItem->get('id'); 
    Ermittelt man die aktuelle (gespeicherte) Datensatz ID.

    Habs gerade getestet

  22. #22
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    @Flash: Besser ist es, wenn du nicht die deprecated Methode der factory nimmst sondern beim container nach der factory fragst.
    PHP-Code:
    // Den service container kann man erhalten, wenn man ihn aus dem globalen scope holt, oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT (oder eines der konkretisierten events fuer Backend/Frontend) horcht.
    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container $GLOBALS['container']['metamodels-service-container'];

    $factory $container->getFactory();

    // Objekt vom Metamodel erstellen (wenn nur die id vom MetaModel bekannt ist).
    $MMObject $factory->byId($factory->translateIdToMetaModelName($TableId));
    // alternativ und besser, wenn der name vom MetaModel bekannt ist:
    $MMObject $factory->byTableName('mm_something');

    // Neues Item Objekt erstellen 
    $ObjItem = new \MetaModels\Item($MMObject, array()); 
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert)); 
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL)); 
    // Speichern 
    $ObjItem->save(); 
    @zonky: ja, genau so geht es und bzgl. Doku system: https://github.com/MetaModels/docs welches dann das http://metamodels.readthedocs.org/en/latest/ generiert, leider mangelnde Beteiligung.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  23. #23
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Super Danke für die Antwort!

    Ein paar Fragen hab ich noch:
    Wie kann ich das $ObjItem automatisch validieren lassen?

    &$GLOBALS['TL_DCA']['Tabellenname']['fields']['Feldname'] bekomme ich den aktuellen DCA.
    Wie funktioniert das mit Metamodels?

  24. #24
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flash Beitrag anzeigen
    Wie kann ich das $ObjItem automatisch validieren lassen?
    was meinst Du mit "validieren" - worauf oder auf was soll die Validierung laufen?

  25. #25
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    o.k. - und wie ist das Zusammenspiel mit Beispiel
    https://community.contao.org/de/show...l=1#post367239

    PHP-Code:
    // Den service container kann man erhalten, wenn man ihn aus dem globalen scope holt, oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT (oder eines der konkretisierten events fuer Backend/Frontend) horcht.
    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container $GLOBALS['container']['metamodels-service-container'];

    $factory $container->getFactory();

    // Objekt vom Metamodel erstellen (wenn nur die id vom MetaModel bekannt ist).
    $MMObject $factory->byId($factory->translateIdToMetaModelName($TableId));
    // alternativ und besser, wenn der name vom MetaModel bekannt ist:
    $MMObject $factory->byTableName('mm_something');

    // Neues Item Objekt erstellen 
    $ObjItem = new \MetaModels\Item($MMObject, array());

    //Sprache Setzen DE
    $GLOBALS['TL_LANGUAGE'] = 'de'
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL));

    //Sprache Setzen EN
    $GLOBALS['TL_LANGUAGE'] = 'en'
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL)); 

    // Speichern 
    $ObjItem->save(); 

    so?

  26. #26
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    o.k. - und wie ist das Zusammenspiel mit Beispiel

    so?
    So hab ich zurzeit auch umgesetzt.

    Es gibt in der Klasse Widget eine Methode welche eine Benutzer Eingabe validiert.

    Gibt es sowas auch bei den Metamodels oder muss ich das mit $objWidget->validate(); machen?

  27. #27
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    @zonky: Bitte vor dem Ändern der Sprache das Objekt einmal speichern

  28. #28
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Beim bearbeiten aber immer neu holen, sonst bygelst du dir die Texte tot.

    Das Item objekt ist nicht Language aware sondern ein stupider value bag.

    Das werden wir in Version 3 evtl. irgendwann mal angehen koennen dass dies komfortabler wird. Bei der aktuellen 2.0 wird sich hier jedoch nichts mehr tun.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  29. #29
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von xtra Beitrag anzeigen
    Beim Bearbeiten aber immer neu holen,
    also komplett auf "Start"

    PHP-Code:

    //Sprache Setzen DE
    $GLOBALS['TL_LANGUAGE'] = 'de'

    // Den service container kann man erhalten, wenn man ihn aus dem globalen scope holt, oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT (oder eines der konkretisierten events fuer Backend/Frontend) horcht.
    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container $GLOBALS['container']['metamodels-service-container'];

    $factory $container->getFactory();

    // Objekt vom Metamodel erstellen (wenn nur die id vom MetaModel bekannt ist).
    $MMObject $factory->byId($factory->translateIdToMetaModelName($TableId));
    // alternativ und besser, wenn der name vom MetaModel bekannt ist:
    $MMObject $factory->byTableName('mm_something');

    // Neues Item Objekt erstellen 
    $ObjItem = new \MetaModels\Item($MMObject, array());
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL));
    // Speichern 
    $ObjItem->save(); 

    //Sprache Setzen EN
    $GLOBALS['TL_LANGUAGE'] = 'en'

    // Den service container kann man erhalten, wenn man ihn aus dem globalen scope holt, oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT (oder eines der konkretisierten events fuer Backend/Frontend) horcht.
    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container $GLOBALS['container']['metamodels-service-container'];

    $factory $container->getFactory();

    // Objekt vom Metamodel erstellen (wenn nur die id vom MetaModel bekannt ist).
    $MMObject $factory->byId($factory->translateIdToMetaModelName($TableId));
    // alternativ und besser, wenn der name vom MetaModel bekannt ist:
    $MMObject $factory->byTableName('mm_something');

    // Neues Item Objekt erstellen 
    $ObjItem = new \MetaModels\Item($MMObject, array());
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL));
    // Speichern 
    $ObjItem->save(); 

  30. #30
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Wie ermittelt man für ein Metamodel Feld das DCA / bezw. die DCA Settings?

    Danke

    @ zonky Ich habs so gemacht:

    PHP-Code:

    //Sprache Setzen DE
    $GLOBALS['TL_LANGUAGE'] = 'de'

    // Den service container kann man erhalten, wenn man ihn aus dem globalen scope holt, oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT (oder eines der konkretisierten events fuer Backend/Frontend) horcht.
    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container $GLOBALS['container']['metamodels-service-container'];

    $factory $container->getFactory();

    // Objekt vom Metamodel erstellen (wenn nur die id vom MetaModel bekannt ist).
    $MMObject $factory->byId($factory->translateIdToMetaModelName($TableId));
    // alternativ und besser, wenn der name vom MetaModel bekannt ist:
    $MMObject $factory->byTableName('mm_something');

    // Neues Item Objekt erstellen 
    $ObjItem = new \MetaModels\Item($MMObject, array());
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL));
    // Speichern 
    $ObjItem->save(); 

    //Sprache Setzen EN
    $GLOBALS['TL_LANGUAGE'] = 'en'

    // Neues Item Objekt erstellen 
    $ObjItem = new \MetaModels\Item($MMObject, array());
    // Befüllen mit Attribut text 
    $ObjItem->set('Feldname'$Wert); 
    // Befüllen mit Attribut translatedtext 
    $ObjItem->set('Feldname', array('value' => $Wert));
    // Befüllen mit Attribut url 
    $ObjItem->set('Feldname', array($Name$URL));
    // Speichern 
    $ObjItem->save(); 

  31. #31
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.726
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flash Beitrag anzeigen
    Wie ermittelt man für ein Metamodel Feld das DCA / bezw. die DCA Settings?
    => für was brauchst Du die denn ??

  32. #32
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    also komplett auf "Start"
    Noe. .)

    Aber nun mach ich es mal etwas exzessiver.
    PHP-Code:
    <?php

    // Den service container kann man erhalten, wenn man ihn aus dem globalen scope holt,
    // oder aber indem man auf das Event \MetaModelsEvents::SUBSYSTEM_BOOT
    // (oder eines der konkretisierten events fuer Backend/Frontend) horcht.

    /** @var \MetaModels\IMetaModelsServiceContainer $container */
    $container $GLOBALS['container']['metamodels-service-container'];
    $factory   $container->getFactory();

    // Referenz auf das Metamodel holen (wenn nur die id vom MetaModel bekannt ist).
    $metaModel $factory->getMetaModel($factory->translateIdToMetaModelName($TableId));
    // alternativ und besser, wenn der name vom MetaModel bekannt ist:
    $metaModel $factory->getMetaModel('mm_something');

    // Sprache setzen DE.
    $GLOBALS['TL_LANGUAGE'] = 'de';
    // Neues Item Objekt erstellen
    $item = new \MetaModels\Item($metaModel, array());
    // Befüllen mit Attribut text
    $item->set('textfeld'$metaModel->getAttribute('textfeld')->widgetToValue('Dies ist nicht ybersetzt.'$item->get('id')));
    // Befüllen mit Attribut translatedtext
    $item->set('translatedtextfeld'$metaModel->getAttribute('translatedtextfeld')->widgetToValue('Dies ist deutscher text.'$item->get('id')));
    // Befüllen mit Attribut url
    $item->set('urlfeld'$metaModel->getAttribute('urlfeld')->widgetToValue('http://contao.org/de/'$item->get('id')));
    // Speichern
    $item->save();

    // Sprache setzen EN.
    $GLOBALS['TL_LANGUAGE'] = 'en';
    // Denselben Eintrag in nun anderer Sprache abfragen.
    $item $metaModel->findById($item->get('id'));

    // Wir holen uns das Item einfach nochmal neu aus der DB damit wir die aktuellen Sprachdaten fyr EN haben.
    $item $metaModel->findById($item->get('id'));
    // Befüllen mit Attribut text koennen wir uns hier sparen, ist ja nicht ybersetzt.
    // $item->set('textfeld', $metaModel->getAttribute('textfeld')->widgetToValue('Dies ist nicht ybersetzt.', $item->get('id')));
    // Befüllen mit Attribut translatedtext
    $item->set('translatedtextfeld'$metaModel->getAttribute('translatedtextfeld')->widgetToValue('This is English text.'$item->get('id')));
    // Befüllen mit Attribut url wir uns hier sparen, ist ja nicht ybersetzt.
    // $item->set('urlfeld', $metaModel->getAttribute('urlfeld')->widgetToValue('http://contao.org/de/', $item->get('id')));
    // Speichern
    $item->save();
    Hintergrund bzw. wichtigste Aenderung ist, dass wir uns die Methode widgetToValue() zunutze machen, welche die Daten von einem "leicht lesbaren" Format welches auch im Backend in ein widget eingegeben werden kann (also meistens ein Text oder einfaches Array wenn tags) ins interne MetaModel Attribut Format ybersetzt.
    Man muss also nicht wissen wie ein RAW Value von URL, Tags, select usw. aufgebaut ist sondern reicht einfach nur den Wert rein.
    Ebenso muss man nicht ybersetzte Daten in einer anderen Sprache nicht erneut setzen, sondern es reicht aus wenn man die "veraenderten" Werte setzt.
    Ebenso hole ich die Werte in einer anderen Sprache aus MetaModels raus, da ja durchaus ein Attribut aus der einen Sprache was in einer anderen aendern koennte und/oder in der neuen Sprache andere Werte erwarten koennte (Bsp. deutscher Alias bei Tags != englischer Alias) und somit das Item in dieser Sprache so nicht speicherbar waere.

    Evtl. wird es so ein wenig klarer.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  33. #33
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    => für was brauchst Du die denn ??
    Um zu überprüfen ob ein Feld (Attribut) ein Pflichtfeld ist

  34. #34
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Ort
    Österreich
    Beiträge
    59

    Standard

    Habs rausgefunden

    Funktioniert mit:
    PHP-Code:
    $container $GLOBALS['container']['metamodels-service-container'];
    $factory $container->getFactory();

    // Objekt vom Metamodel erstellen
    $MMObject $factory->byTableName('MM-Tabellenname'); 

    // Attribut ermitteln
    $MMAttribute $MMObject->getAttribute('Feldname');
    // DCA ermitteln
    $MMItemDCA $MMAttribute->getItemDCA();

    // Feld = Pflichtfeld
    $IsMandatory $MMItemDCA['fields']['Feldname']['eval']['mandatory'];

    // Feld erwartet eindeutige Werte
    $IsUnique $MMItemDCA['fields']['Feldname']['eval']['unique']; 
    Funktionieren tut mein Code, aber ob es so ganz richtig ist, weiss ich leider nicht
    Geändert von Flash (29.04.2015 um 11:41 Uhr)

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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