Ergebnis 1 bis 3 von 3

Thema: Formular-Feld mit eigenem PHP-String als Value

  1. #1
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard Katalogeinträge in Formular-Feldern als Value eintragen

    Hey...
    Ich verzweifel grad an dem Zusammenspiel zwischen Katalog und einem Formular-Generator-Formular.
    [Link entfernt]

    Ich möchte folgendes:
    1. In dem Formular (was unten per Klick auf den Button aufklappt) ein Eingabefeld indem erneut der Maschinenname auftaucht. Das löse ich momentan durch das Inserttag
    Code:
    {{env::page_title}}
    Das ist aber nicht so optimal, da man ja im Seitentitel auch noch andere Dinge hinzufügen kann.
    2. Das Feld soll außerdem gesperrt werden, also disabled.
    3. Ich möchte als Hiddenfeld noch weitere Einträge aus dem Katalog übertragen.



    Das Modul Katalog-Meldung kommt übrigens nicht in Frage, da ich da kaum Gestaltungsmöglichkeiten habe was die Formularfelder/Fieldsets betrifft.
    Das Insert-Tag {{catalog::title}} o.Ä. funktioniert scheinbar nur für die E-Mail bei Katalog-Meldung.
    Geändert von Stranger (16.11.2010 um 14:29 Uhr)
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  2. #2
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Hey, auch...

    • nein, dies ist nicht das Katalog-Forum
    • nein, nicht alle Fragen zu Formularen gehören ins EFG-Forum
    • nein, ich kenne die Katalog-Erweiterung nur "am Rande"
    • ja, ich habe sie installiert etc.


    Genug gemosert ;-)

    Generell bietet sich für die Befüllung von Formularfeldern mit Werten (woher auch immer) der Hook 'loadFormfield' an.
    Ob der Katalog nun irgendeine Möglichkeit bietet, innerhalb der callback-Funktion (per Insert-Tag oder als Eigenschaft eines Katalog-Items) auf die Werte zuzugreifen, weiß ich nicht.

    Dein Formular ist (wenn ich das richtig sehe) unterhalb eines Katalog-Reader-Moduls platziert.
    Du könntest also innerhalb des Katalog-Templates z.B. die $entries (oder auf Detailseite einfach den ersten $entry, also $entries[0] in einer globalen Variablen zwischenspeichern,
    um innerhalb der onload-Callback-Function auf die Werte zugreifen zu können.

    Fangen wir mit dem Template an, geringfügig geändertes 'catalog_full.tpl':
    PHP-Code:
    <?php if (count($this->entries)): ?>

    <div class="layout_full">

    <?php // hier "zwischenspeichern" in $GLOBALS ?>
    <?php $GLOBALS
    ['katalog_eintrag'] = $this->entries[0]; ?>

    <?php foreach ($this->entries as $entry): ?>
    <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
    <?php foreach ($entry['data'] as $field=>$data): ?>
    <?php 
    if (strlen($data['raw']) && !in_array($field, array('catalog_name','parentJumpTo'))): ?>
    <div class="field <?php echo $field?>">
        <div class="label"><?php echo $data['label']; ?></div>
        <div class="value"><?php echo $data['value']; ?></div>
    </div>
    <?php endif; ?>
    <?php 
    endforeach; ?>

    <div><?php echo $entry['link']; ?> </div>     

    </div>
    <?php endforeach; ?>
    </div>

    <?php else: ?>
    <p class="info">Invalid item reference for catalog.</p>
    <?php endif; ?>
    dann zur callback-Funktion, zunächst wieder in der system/config/dcaconfig (oder einer config.php im Modul-Verzeichnis) "registrieren":

    PHP-Code:
    $GLOBALS['TL_HOOKS']['loadFormField'][] = array('StrangersCatalogFuncs''onloadFormField'); 
    und in einem Modul-Verzeichnis dann die eigentliche Klasse, z.B.
    system/modules/stranger/StrangersCatalogFuncs.php :

    PHP-Code:
    <?php

    class StrangersCatalogFuncs extends Backend
    {

        public function 
    onloadFormField(Widget $objWidget$intForm$arrFormConfig)
        {

            
    // Einschraenkung auf Formular mit ID = ....
            
    if ($arrFormConfig['id']==15)
            {
        
                
    // Beispiel 1: 
                // .. Formularfeld ID 90 wird mit Wert des Felds 'bezeichnung' des Katalogeintrags befüllt
        
                // Einschraenkung Formularfeld mit ID = ....
                
    if ($objWidget->id == 90)
                {
                    
    // haben wir "zwischengespeicherten" Katalogeintrag?
                    
    if (isset($GLOBALS['katalog_eintrag'])) 
                    {
                        
    // existiert der "zwischengespeicherte" Wert
                        
    if (strlen($GLOBALS['katalog_eintrag']['data']['bezeichnung']['raw']))
                        {
                            
    // Wert an Formularfeld bzw. widget übergeben
                            
    $objWidget->value $GLOBALS['katalog_eintrag']['data']['bezeichnung']['raw'];
                            
    // Formularfeld 'deaktivieren'
                            
    $objWidget->disabled 'disabled';
                        }
                    }
                }

                
    // Beispiel 2: 
                // .. Formularfeld ID 92 wird mit Wert des Felds 'preis' des Katalogeintrags befüllt

                // Einschraenkung Formularfeld mit ID = ....
                
    if ($objWidget->id == 92)
                {
                    if (isset(
    $GLOBALS['katalog_eintrag'])) 
                    {
                        if (
    strlen($GLOBALS['katalog_eintrag']['data']['preis']['raw']))
                        {
                            
    $objWidget->value $GLOBALS['katalog_eintrag']['data']['preis']['raw'];
                            
    // ... oder in diesem Fall eher 'value' (bereits formatiert)?
                            
    $objWidget->value $GLOBALS['katalog_eintrag']['data']['preis']['value'];
                            
                            
    $objWidget->disabled 'disabled';
                        }
                    }
                }
                
            }
            
            
    // WICHTIG:
            
    return $objWidget;
        }

    }
    Anmerkung: ist nicht im Detail getestet

    Hoffe, das hilft Dir weiter,

    Schöne Grüße
    Thomas
    Geändert von tom (03.07.2009 um 20:46 Uhr)

  3. #3
    Contao-Nutzer
    Registriert seit
    19.06.2009.
    Ort
    Niederbayern
    Beiträge
    110

    Standard

    Genau das habe ich auch gebraucht und es hat super funktioniert.

    Danke Tom !

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.02.2011, 09:03
  2. formular in eigenem modul
    Von Marcel im Forum Entwickler-Fragen
    Antworten: 5
    Letzter Beitrag: 16.08.2009, 00:39

Lesezeichen

Lesezeichen

Berechtigungen

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