Contao-Camp 2024
Ergebnis 1 bis 8 von 8

Thema: Contentmodel Instanz

  1. #1
    Contao-Nutzer
    Registriert seit
    08.09.2015.
    Beiträge
    2

    Standard Contentmodel Instanz

    Ich versuche ein Formular im Frontend darzustellen.
    Das Formular lade ich mit
    $objForm = \FormModel::findOneBy('title', $strForm);

    den Content lade ich mit
    $objFormElement = \ContentModel::findOneBy('form', $objForm->id);
    soweit OK

    Beim Darstellen des Contents wird aber nichts angezeigt.
    Der Grund ist dass in der Class Hybrid die Abfrage isHidden die Instanz mittels
    if (!$this->objParent instanceof ContentModel)
    geprüft wird.

    Die Instanz von $objFormElement wird jedoch als
    Contao\ContentModel
    !!!!!gesetzt.!!!

    Wenn ich in Hybrid die Abfrage auf
    if (!$this->objParent instanceof Contao\ContentModel)
    ändere isrt alles Ok.

    Ist das ein Bug, oder was mache ich falsch

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

    Standard

    PHP-Code:
    echo $this->getForm('42'); 

  3. #3
    Contao-Nutzer
    Registriert seit
    09.05.2021.
    Ort
    Konstanz
    Beiträge
    35

    Standard

    Danke für den Hinweis. Das hilft mir leider nur ein bisschen weiter.
    In dem dargestelten Formlar möcht ich gerne Daten eines bestehenden Datensatzes darstellen die ich edieren kann.
    Dazu habe ic eine Extendedform abgeleite von Form geschrieben.

    Diese Class wird auch mir dem entsprechenden compile() aufgerufen.
    Mir ist nicht klar, wie ich die Daten der Result-Klasse in dieses Formullar bekommen.
    Ich hoffe ich habe mich klar genug ausgedrückt.
    Idee

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

    Standard

    ah - o.k. ... da stecke ich jetzt nicht so tief in der Matrie... guck mal bei https://github.com/codefog/contao-haste ob da was Brauchbares dabei ist

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.028
    Partner-ID
    10107

    Standard

    Ich würde Haste Forms dafür nutzen, nicht den Formulargenerator.
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Nutzer
    Registriert seit
    09.05.2021.
    Ort
    Konstanz
    Beiträge
    35

    Standard

    Vielen Dank für den Tipp

    Ich bin schon ein großes Stück weiter.
    Was bei mir irgendwie noch nicht funktioniert ist das Zurückschreiben in die Datenbank

    Hier in etwa mein Code

    $formID=127;
    $objForm = new \Haste\Form\Form('efg-bundle', 'POST', function($objHaste) {
    return \Input:ost('FORM_SUBMIT') === $objHaste->getFormId();
    });

    $objForm->addFieldsFromFormGenerator($formId, function(&$strField, &$arrDca) {
    // add anything you like
    if (isset($this->objEditRecord->$strField)) { // objEditRecord ist gefüllt aus der tabelle tl_formdata_details die zum Formular formID (127) gehören
    $arrDca['value'] = $this->objEditRecord->$strField;
    }
    // you must return true otherwise the field will be skipped
    return true;
    });

    // Das Model an das Formular binden
    $objFormElement = \ContentModel::findOneBy('form', $formId); // class Contao\ContentModel
    $objForm->bindModel($objFormElement);
    // validate() also checks whether the form has been submitted
    if ($objForm->validate()) {
    $objFormElement->save();
    }

    ...
    Die Form wird richtig dargestellt incl. der Werte aus objEditRecord

    Die geänderten Werte werden aber nicht mit $objFormElement->save(); in die Datenbank geschrieben. Da bleiben die alten.
    Was mache ich falsch ??

  7. #7
    Contao-Nutzer
    Registriert seit
    09.05.2021.
    Ort
    Konstanz
    Beiträge
    35

    Standard gelöst

    Den Update in der DB muss ich wohl selber machen

    if ($objHasteForm->validate()) { // validate() also checks whether the form has been submitted
    $resData = $objHasteForm->fetchAll(); // Get all the submitted and parsed data (only works with POST):
    foreach ($resData as $k=>$v) {
    $val=$v;

    if (is_array($v)) {
    $val=$v[0]; // checkbox wird ein array zurückgemeldet. Sollen alle Werte übernommen werden so sollte dies hier in einer Update Schleife gemacht werden
    }

    $resUp = \Database::getInstance()->prepare('UPDATE tl_formdata_details SET `value`=? where `ff_name`=? AND pid =?')->execute($val,$k,$this->intRecordId);
    }
    \Controller::reload(); // Jetzt kannst du reloaden
    }

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

    Standard

    btw: wenn Du Code postest, bitte das Icon "php" verwenden ;-)

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
  •