Ergebnis 1 bis 3 von 3

Thema: Isotope - Backend - Default Werte bei den Attributen setzen

  1. #1
    Contao-Nutzer
    Registriert seit
    27.05.2016.
    Beiträge
    19

    Trauriges Gesicht Isotope - Backend - Default Werte bei den Attributen setzen

    Hallo zusammen,

    ich komme leider nicht weiter.
    Ich möchte im Backend, beim Erstellen eines Produktes, Felder für meine angelegten Attribute (Select) vorauswählen, je nachdem welcher Backend User eingeloggt ist. Die Attribute werden ja dynamisch von Isotope erzeugt und stehen nicht fest im DCA drin. Man kann ja die Attribute im Backend selber anlegen. Wie bzw. wo kann ich auf die Attribute-Optionen zugreifen?

    - Die default-Werte im DCA funktionieren irgendwie nicht.
    - Besser über Callback-Funktionen? Aber wie?
    - Oder über jQuery im Backend? Wie kann ich ein eigenes Backend-Template anlegen?
    - Eine Funktion in einer Klasse überschreiben? Welche?

    Ich bin so langsam echt verzweifelt...


    Contao 3.5 und Isotope 2.3.4

  2. #2
    Contao-Nutzer
    Registriert seit
    27.05.2016.
    Beiträge
    19

    Standard Gelöst

    Habe das Problem gelöst, indem ich den Hook ausgetauscht habe (in der DCA) und die damit aufgerufene Klasse erweitert habe.

    DCA:
    PHP-Code:
    $id_tmp array_search(array('Isotope\Backend\Product\DcaManager''addOptionsFromAttribute'), $GLOBALS['TL_HOOKS']['getAttributesFromDca']);
    if(
    $id_tmp !== false)
        
    $GLOBALS['TL_HOOKS']['getAttributesFromDca'][$id_tmp] = array('BackendDefaults''addOptionsFromAttribute'); 

    Klasse Backend Defaults
    PHP-Code:
    class BackendDefaults extends \Isotope\Backend\Product\DcaManager {

        public 
    $arrData;

        public function 
    addOptionsFromAttribute($arrData$objDca)
        {

             
    // Calls and execute the parent function. 
            
    $this->arrData parent::addOptionsFromAttribute($arrData$objDca);

            
    // execute only when backend called. if $objDca is NULL, the frontend was called.
            
    if ($objDca != NULL) {
                     
    # Hier kann man das Array $this->arrData['value'] beliebig verändern und Werte setzen
            
    }

            return 
    $this->arrData;
        } 

  3. #3
    Contao-Nutzer
    Registriert seit
    19.02.2017.
    Beiträge
    10

    Standard

    Disclaimer: bitte um Entschuldigung für Englisch – ich verstehe Deutsch aber es ist viel schwieriger zu sprechen und zu schreiben.


    This is in case somebody still needs it.
    This method has a problem: you need to perform checks if you don't want to overwrite already existing records.

    There is a better way to do it (I use Contao 4.4 and Isotope 2.5.0). There is an undocumented callback in DCA, which gets called only when the new record is being created - perfect for setting default values.

    dca/tl_iso_product.php
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_iso_product']['config']['oncreate_callback'][] = ['BackendDefaults''updateNewRecord'];

    class 
    BackendDefaults
    {
        public function 
    updateNewRecord($strTable$insertID$arrSet$dc)
        {
            if (
    'tl_iso_product' != $strTable || $arrSet['pid'] > 0) {
                return;
            }

            \
    Database::getInstance()->prepare("UPDATE $strTable SET published=?, description=? WHERE id=?")->execute('1''Default description'$insertID);
        }

    Check Isotope\Backend\Product\DcaManager::updateNewRecord() to see how Isotope itself uses it.

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
  •