33 geniale Contao-Erweiterungen, die du kennen solltest! - Contao Academy
Ergebnis 1 bis 10 von 10

Thema: Probleme mit toogle Funktion in eigner Erweiterung

  1. #1
    Contao-Nutzer
    Registriert seit
    22.05.2015.
    Beiträge
    30

    Standard Probleme mit toogle Funktion in eigner Erweiterung

    Hallo liebe Community,
    Ich versuche gerade in einer eignen Erweiterung die toogle Funktion zum ein und ausblenden zu implementieren.
    Leider scheitere ich gerade:
    Ich habe zuerst das zusätziche Feld in der Datenbank angelegt:
    Code:
    $GLOBALS['TL_DCA']['tl_produktewebsite']['fields']['published'] = array
    (
        'label'               => &$GLOBALS['TL_LANG']['tl_produktewebsite']['published'],
        'exclude'             => true,
        'filter'              => true,
        'inputType'           => 'checkbox',
        'sql'                 => "char(1) NOT NULL default ''"
    );
    Das funktioniert natürlich ohne Probleme, danach habe ich die toogle Funktion in der DCA eingefügt:



    PHP-Code:
    $GLOBALS['TL_DCA']['tl_produktewebsite']['list']['operations']['toggle'] = array
    (
        
    'label'               => &$GLOBALS['TL_LANG']['tl_example']['toggle'],
        
    'icon'                => 'visible.gif',
        
    'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleVisibility(this,%s)"',
        
    'button_callback'     => array('tl_produktewebsite''toggleIcon')
    ); 
    Anschliessend habe ich unter system/meineerweiterung/einen Ordner classes angelegt und tl_produktewebsite.php mit folgendem Inhalt:

    PHP-Code:
    <?php

    class tl_produktewebsite
    {
     public function 
    toggleIcon($row$href$label$title$icon$attributes)
        {
            
    $this->import('BackendUser''User');

            if (
    strlen($this->Input->get('tid')))
            {
                
    $this->toggleVisibility($this->Input->get('tid'), ($this->Input->get('state') == 0));
                
    $this->redirect($this->getReferer());
            }

            
    // Check permissions AFTER checking the tid, so hacking attempts are logged
            
    if (!$this->User->isAdmin && !$this->User->hasAccess('tl_example::published''alexf'))
            {
                return 
    '';
            }

            
    $href .= '&amp;id='.$this->Input->get('id').'&amp;tid='.$row['id'].'&amp;state='.$row[''];

            if (!
    $row['published'])
            {
                
    $icon 'invisible.gif';
            }

            return 
    '<a href="'.$this->addToUrl($href).'" title="'.specialchars($title).'"'.$attributes.'>'.$this->generateImage($icon$label).'</a> ';
        }
    }
    Anschliessnd erhalte ich nun folgenden Fehler:
    Attempted to load class "tl_produktewebsite" from the global namespace. Did you forget a "use" statement?


    Zusätzlich gibt es noch die Datei tl_produktwebsite.php im root derErweiterung mit diesem Inhalt:
    PHP-Code:
    <?php
    if (!defined('TL_ROOT')) die('You can not access this file directly!');

    class 
    tl_produktewebsite extends Backend
    {
      public function 
    saveFile($value) {
        if (
    version_compare(VERSION,'3.2','>=')) {
            
    $uuid StringUtil::binToUuid($value);
            
    $objFile FilesModel::findByUuid($uuid);
            
    $value $objFile->path;
        }
        return 
    $value;
      }

      public function 
    loadFile($value) {
        if (
    version_compare(VERSION,'3.2','>=')) {
            
    $objFile FilesModel::findByPath($value);
            
    $value $objFile->uuid;
        }
        return 
    $value;
      }
      
      
      
    }  


    ?>

    Die autoload enthält folgenden Inhalt:
    PHP-Code:
    <?php
     
    /**
     * Back end modules
     */
    $GLOBALS['BE_MOD']['content']['JK produktewebsite'] = array(
        
    'tables' => array('tl_produktewebsite'),
        
    'icon'   => 'system/modules/produktewebsite/assets/images/screencast.png'
    );

    /**
     * Front end modules
     */
    $GLOBALS['FE_MOD']['produktewebsite'] = array
    (
        
    'produktewebsite'     => 'ModuleProduktewebsite',
    );
    autoload.php
    PHP-Code:
    <?php

    /**
     * Contao Open Source CMS
     *
     * Copyright (c) 2005-2014 Leo Feyer
     *
     * @package Process-form-messe
     * @link    https://contao.org
     * @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL
     */


    /**
     * Register the classes


    ClassLoader::addNamespaces(array
    (
        'ModuleProduktewebsite' => 'system/modules/produktewebsite/modules/ModuleProduktewebsite.php',

    ));
     
     
    ClassLoader::addClasses(array
    (
        'tl_produktewebsite' => 'system/modules/produktewebsite/tl_produktewebsite.php',
    ));

    TemplateLoader::addFiles(array
    (
        'mod_produktewebsite' => 'system/modules/produktewebsite/templates',
    ));
     <?php
     */
     

    ClassLoader::addClasses(array
    (
        
    // Modules
        
    'ModuleProduktewebsite' => 'system/modules/produktewebsite/modules/ModuleProduktewebsite.php',
        
    'tl_produktewebsite' => 'system/modules/produktewebsite/classes/tl_produktewebsite.php',

        
    ));


    /**
     * Register the templates
     */
    TemplateLoader::addFiles(array
    (
        
    'mod_produktewebsite' => 'system/modules/produktewebsite/templates',
    ));

    Wäre sehr dankbar wenn mir jemand kurz helfen konnte. Vielen Dank
    Geändert von mcm_cc (28.11.2018 um 11:22 Uhr)

  2. #2
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    1.847
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    'tl_produktewebsite' => 'system/modules/produktewebsite/tl_produktewebsite.php'
    Da fehlt der classes Ordner.

    Wenn du es ganz "hastig" hast, kannst du auch auf Contao-Haste zurückgreifen, die dafür eine Untersützung mitliefern, wo man sich die eigene Implementierung sparen kann:
    https://github.com/codefog/contao-ha...ggle-operation

  3. #3
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    659

    Standard

    Wofür entwickelst Du da überhaupt? Für 3.x oder 4.x?

    Die autoload brauchst Du ja nur in der 3.x, ein use-statement wäre mir aber in der 3.x noch nicht untergekommen...

  4. #4
    Contao-Nutzer
    Registriert seit
    22.05.2015.
    Beiträge
    30

    Standard

    Hallo,
    war lange nicht mehr an dem Problem dran und habe es nun wie vorgeschlagen mit haste versucht.
    Bei Klick wird der Wert published auch geändert, jedoch ändert sich das Augen Icon nicht.
    Die JS Konsole gibt mir "TypeError: t is undefined"

    Kann mir jemand bitte helfen?

  5. #5
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.434

    Standard

    Wo ist die Funktion toggleVisibility?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  6. #6

  7. #7
    Contao-Nutzer
    Registriert seit
    22.05.2015.
    Beiträge
    30

    Standard

    Hallo und Danke für die schnellen Antworten

    Ich habe dies so in meine DCA eingebaut, wie gesagt, die Änderung in der Datenbank wird vollzogen, jedoch ändert sich das Auge nicht
    https://github.com/codefog/contao-ha...ggle-operation


    https://docs.contao.org/books/cookbo...iterungen.html
    Diesen Weg habe ich bereits versucht, hier verändert sich das Auge nach klick.
    Wenn ich jedoch diese Zeile wieder mit reinnehme:

    'button_callback' => array('tl_produktewebsite, 'toggleIcon')

    Erhalte ich wieder den Fehler:
    Attempted to load class "tl_produktewebsite" from the global namespace. Did you forget a "use" statement?

    Bin über jede Hilfe dankbar

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.434

    Standard

    Standard ist ja bislang die Klasse, die zum DCA gehört, direkt mit in die Datei dca/tl_produktewebsite.php zu packen. Dann kannst Du Dir namespace und use sparen. Es ist nur eine Empfehlung die Klasse für das DCA auszulagern. Wer sich mit Namespaces auskennt, sollte das wahrscheinlich auch so machen. Ich bevorzuge die Klasse direkt unterhalb des DCA. Das empfehle ich auch für Dich.

    Wenn Du schon das Ganze auslagerst, dann mußt Du das button_callback auch richtig adressieren.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.434

    Standard

    Hier ein Beispiel aus einer meiner Erweiterungen.

    config/autoload.php:
    PHP-Code:
    /**
     * Register the namespaces
     */
    ClassLoader::addNamespaces(array
    (
        
    'Samson',
    ));


    /**
     * Register the classes
     */
    ClassLoader::addClasses(array
    (
        
    'Samson\Trainerlizenzen\Helper'              => 'system/modules/trainerlizenzen/classes/Helper.php'
    )); 
    classes/Helper.php:
    PHP-Code:
    namespace Samson\Trainerlizenzen;

    class 
    Helper extends \Frontend

    Klasse verwenden im DCA, wenn es in der Klasse Helper eine Funktion toggleIcon gibt:
    PHP-Code:
    'button_callback'     => array('\Samson\Trainerlizenzen\Helper''toggleIcon'
    Geändert von Samson1964 (23.08.2019 um 13:30 Uhr)
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  10. #10
    Contao-Nutzer
    Registriert seit
    22.05.2015.
    Beiträge
    30

    Standard

    Problem gelöst. Danke

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
  •