Ergebnis 1 bis 6 von 6

Thema: Unterschiedliches Toggle Verhalten bei Buttons (Published / Featured)

  1. #1
    Contao-Nutzer Avatar von xava
    Registriert seit
    13.06.2012.
    Beiträge
    22

    Frage Unterschiedliches Toggle Verhalten bei Buttons (Published / Featured)

    Hallo zusammen,

    ich habe für mein Modul einen Featured und einen Published Button. Beide sollen bei Klick per Ajax den entsprechenden Datensatz bearbeiten und das Icon ändern.

    Meines Erachtens sind beide Buttons identisch aufgebaut, dennoch löst der Published Button ein Reload aus, der Featured Button nicht.

    Mein Ziel ist es natürlich, dass auch der Published Button keinen Seiten Reload verursacht. Hat jemand Ideen woran es liegen könnte oder habe ich einen Denkfehler?

    viele Grüße
    Xava


    Operations
    PHP-Code:
    'operations' =>
        [   
      
    'featured' =>
          [
            
    'label'               => &$GLOBALS['TL_LANG']['tl_ps_units']['featured'],
            
    'icon'                => 'featured.gif',
            
    'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleFeatured(this,%s)"',
            
    'button_callback'     => ['tl_ps_units''generateFeaturedButton']
          ],
         
         
    'published' =>
          [
            
    'label'               => &$GLOBALS['TL_LANG']['tl_ps_units']['published'],
            
    'icon'                => 'visible.gif',
            
    'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.togglePublished(this,%s)"',
            
    'button_callback'     => ['tl_ps_units''generatePublishedButton']
          ],

    Funktionen zu Featured Button
    PHP-Code:
        # Featured Icon and Functionality
        
    public function generateFeaturedButton($row$href$label$title$icon$attributes)
        {
           if (
    strlen($this->Input->get('fid')))
           {
               
    $this->toggleFeatured($this->Input->get('fid'), ($this->Input->get('state') == 0));
               
    $this->redirect($this->getReferer());
           }

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

           if (!
    $row['featured'])
           {
               
    $icon 'featured_.gif';
           }

           return 
    '<a href="'.$this->addToUrl($href).'" title="'.specialchars($title).'"'.$attributes.'>'.$this->generateImage($icon$label).'</a> ';
       } 
    PHP-Code:
       public function toggleFeatured($intId$blnFeatured)
       {
         if (
    is_array($GLOBALS['TL_DCA']['tl_ps_units']['fields']['featured']['save_callback']))
           {
               foreach (
    $GLOBALS['TL_DCA']['tl_ps_units']['fields']['featured']['save_callback'] as $callback)
               {
                   
    $this->import($callback[0]);
                   
    $blnFeatured $this->$callback[0]->$callback[1]($blnFeatured$this);
               }
           }
           
    // Update the database
           
    $this->Database->prepare("UPDATE tl_ps_units SET tstamp="time() .", featured='" . ($blnFeatured '') . "' WHERE id=?")
               ->
    execute($intId);
           
    $this->createNewVersion('tl_ps_units'$intId);
        } 
    Funktionen zu Published Button
    PHP-Code:
    public function generatePublishedButton($row$href$label$title$icon$attributes)
        {
            if (
    strlen($this->Input->get('tid')))
            {
                
    $this->togglePublished($this->Input->get('tid'), ($this->Input->get('state') == 0));
                
    $this->redirect($this->getReferer());
            }

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

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

            return 
    '<a href="'.$this->addToUrl($href).'" title="'.specialchars($title).'"'.$attributes.'>'.$this->generateImage($icon$label).'</a> ';
        } 
    PHP-Code:
        public function togglePublished($intId$blnPublished)
        {
          if (
    is_array($GLOBALS['TL_DCA']['tl_ps_units']['fields']['published']['save_callback']))
            {
                foreach (
    $GLOBALS['TL_DCA']['tl_ps_units']['fields']['published']['save_callback'] as $callback)
                {
                    
    $this->import($callback[0]);
                    
    $blnPublished $this->$callback[0]->$callback[1]($blnPublished$this);
                }
            }
            
    // Update the database
            
    $this->Database->prepare("UPDATE tl_ps_units SET tstamp="time() .", published='" . ($blnPublished '') . "' WHERE id=?")
                ->
    execute($intId);
            
    $this->createNewVersion('tl_ps_units'$intId);
          } 

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Das Javascript AjaxRequest.togglePublished() gibt's auch nicht?
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Nutzer Avatar von xava
    Registriert seit
    13.06.2012.
    Beiträge
    22

    Frage

    Zitat Zitat von Toflar Beitrag anzeigen
    Das Javascript AjaxRequest.togglePublished() gibt's auch nicht?
    Danke Toflar, da tritt ein Aha Effekt ein.

    ---

    Jetzt habe ich mir mal angeschaut, wie es bei den Artikeln gemacht wird.

    https://github.com/contao/core/blob/...tl_article.php
    https://github.com/contao/core/blob/...asses/Ajax.php

    Aus der tl_article
    PHP-Code:
    'toggle' => array
        (
        
    'label'               => &$GLOBALS['TL_LANG']['tl_article']['toggle'],
        
    'icon'                => 'visible.gif',
        
    'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleVisibility(this,%s)"',
        
    'button_callback'     => array('tl_article''toggleIcon')
        ), 

    In der Klasse Ajax.php finde ich zum Beispiel die toggleFeatured, aber nicht toggleVisibility.

    Müsste diese sich nicht auch da befinden?
    Kann ich mir vergleichsweise einfach das gewünschte Verhalten herbeiführen?

  4. #4
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Naja, ich kann nicht sagen ob du genau das gleiche Verhalten brauchst und deshalb einfach das gleiche JS nutzen kannst.
    Womöglich musst du auch dein Javascript dazu selber schreiben.

    Ich persönlich schreibe relativ oft solche Toggle-Sachen und hab auch schon den Fall gehabt, dass ich mehr als nur einen Wert (also ein Dropdown) durchtoggeln können wollte (z.B. eine Ampel mit 3 Farben halt und dann soll der halt von rot auf orange und dann grün und zurück auf rot etc.). Und da ich faul bin, hab ich mich dann hingesetzt und es in unser Helferlein "haste" eingebaut, damit ich das nicht jedes Mal wieder bauen muss. Also wenn du es nicht selber machen willst, holst du dir einfach "haste" und folgst der Anleitung: https://github.com/codefog/contao-ha...ggle-operation

    Dann bleibt es bei einer sehr einfachen DCA Definition und mein Code von 2015 macht den Rest für dich :P
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  5. #5
    Contao-Nutzer Avatar von xava
    Registriert seit
    13.06.2012.
    Beiträge
    22

    Standard

    Hallo Toflar,

    danke für deine Antwort. Ich habe jetzt versucht das mit Haste umzusetzen, doch leider klappt das nicht.
    Kannst du mal rüber schauen, ob ich etwas falsch eingetragen habe?
    Wir nutzen die aktuellste Haste Version (4.17.6)

    PHP-Code:
          'toggle' =>
          [
            
    'label'                 => &$GLOBALS['TL_LANG']['tl_ps_units']['published'],
            
    'attributes'            => 'onclick="Backend.getScrollOffset();"',
            
    'haste_ajax_operation'  =>
            [
                
    'field'     => 'published',
                
    'options'   =>
                [
                    [
                        
    'value'     => '',
                        
    'icon'      => 'invisible.gif'
                    
    ],
                    [
                        
    'value'     => '1',
                        
    'icon'      => 'visible.gif'
                    
    ]
                ]
            ]
          ], 

    PHP-Code:
    'published' =>
            [
              
    'label'                   => &$GLOBALS['TL_LANG']['MSC']['published'],
              
    'filter'                  => true,
              
    'inputType'               => 'checkbox',
              
    'sql'                     => "char(1) NOT NULL default ''"
            
    ], 

  6. #6
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Scheint zu passen. Cache gelöscht etc.?
    Was heisst, klappt nicht? Irgendwelche Fehlermeldungen? JS Konsole?
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

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
  •