Ergebnis 1 bis 9 von 9

Thema: Erweiterung - Sortierung

  1. #1
    Contao-Nutzer
    Registriert seit
    30.07.2014.
    Beiträge
    163

    Standard Erweiterung - Sortierung

    Hallo

    habe eine kleine Erweiterung geschrieben, mit einem Slider. Nun soll der User im Inhaltselement (per Select-Feld) einstellen können, welche Reihenfolge die Bilder/Texte haben werden.
    Randon, DESC, ASC

    Leider bekomme ich es nicht hin. Was mache ich falsch?

    Hier ein Auszug aus meinem "modules/ContentSlider.php"

    PHP-Code:
     protected function compile()
        {
        
            
    $sortBy "sorting DESC";

            
    $objStandorte Database::getInstance()
                        ->
    prepare(
                            
    'SELECT *
                            FROM tl_gerichte LEFT JOIN tl_standorte ON tl_gerichte.pid = tl_standorte.id
                            WHERE tl_gerichte.pid = ?
                            AND tl_standorte.published = ?
                            ORDER BY ?'
                        
    )
                        ->
    execute($this->standorte1$sortBy);

            
    $this->Template->ytvideo_data $objStandorte->fetchAllAssoc();

        } 

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Ich bin mir nicht sicher, ob Du Platzhalter (?) im ORDER BY Teil des SQL-Statements verwenden kannst.

    Aber abgesehen davon: wie äußert sich denn "bekomme es nicht hin"?
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Ich bin mir nicht sicher, ob Du Platzhalter (?) im ORDER BY Teil des SQL-Statements verwenden kannst.
    Ich denke wahrscheinlich macht Contao daraus
    Code:
    ORDER BY 'sorting DESC'
    Zitat Zitat von fiedsch Beitrag anzeigen
    Aber abgesehen davon: wie äußert sich denn "bekomme es nicht hin"?
    Vielleicht mit einem SQL-Fehler bei ORDER BY?!
    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

  4. #4
    Contao-Nutzer
    Registriert seit
    30.07.2014.
    Beiträge
    163

    Standard

    Genau...Contao macht daraus
    PHP-Code:
    ORDER BY 'sorting DESC' 
    Aber im Frontend wird alles sauber ausgegeben...nur halt die Sortierung wird ignoriert. Und ich weiss nicht wie ich das lösen kann, das ich im Inhaltselement sage...Sortiere random, DESC oder ASC
    und er übernimmt das im Template.

  5. #5
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Zitat Zitat von JCreeper Beitrag anzeigen
    ...nur halt die Sortierung wird ignoriert.
    Klar, weil nach 'sorting DESC' nicht sortiert werden kann...


    So könnte es gehen:
    PHP-Code:
        protected function compile()
         {
            
    $sortBy "sorting DESC"
            
    $objStandorte Database::getInstance()
                         ->
    prepare(
                             
    'SELECT *
                             FROM tl_gerichte LEFT JOIN tl_standorte ON tl_gerichte.pid = tl_standorte.id
                             WHERE tl_gerichte.pid = ?
                             AND tl_standorte.published = ?
                             ORDER BY '
    .$sortBy
                         
    )
                         ->
    execute($this->standorte1); 
            
    $this->Template->ytvideo_data $objStandorte->fetchAllAssoc(); 
        } 

  6. #6
    Contao-Nutzer
    Registriert seit
    30.07.2014.
    Beiträge
    163

    Standard

    Super...hat geklappt. Vielen Dank.

    In meiner tl_content.php habe ich das Sortier-Feld eingefügt
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['lernapp_sortBy'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_content']['lernapp_sortBy'],
        
    'exclude'                 => true,
        
    'inputType'               => 'select',
        
    'options'                 => array('product_name_asc''product_name_desc','random'),
        
    'reference'               => &$GLOBALS['TL_LANG']['tl_content'],
        
    'eval'                    => array('tl_class'=>'w50'),
        
    'sql'                     => "varchar(255) NOT NULL default ''"
    ); 
    Wie kann ich das nun übergeben bzw den Wert in der Select Abfrage auslesen?
    So???
    PHP-Code:
    if (\Input::get('lernapp_sortBy'))
            {
                
    $lernapp_sortBy = \Input::get('lernapp_sortBy');
            } 

  7. #7
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Zitat Zitat von JCreeper Beitrag anzeigen
    Wie kann ich das nun übergeben bzw den Wert in der Select Abfrage auslesen?
    So???
    PHP-Code:
    if (\Input::get('lernapp_sortBy'))
            {
                
    $lernapp_sortBy = \Input::get('lernapp_sortBy');
            } 
    Im Prinzip ja, aber Du willst natürlich sicher stellen, daß der übergebene Parameterwert auch das beinhaltet, was Du erwartest. Ansonsten hast Du eine SQL-Injection Sicherheitslücke eingebaut :-o
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  8. #8
    Contao-Nutzer
    Registriert seit
    30.07.2014.
    Beiträge
    163

    Standard

    Hab es nun so gelöst. Wäre das "sauber" ?

    PHP-Code:
    protected function compile()
        {
            
    //Find out sorting
            
    if($this->lernapp_sortBy
            {
                
    $t 'tl_gerichte';
                if(
    $this->lernapp_sortBy == 'product_name_asc') { $sortBy "$t.bezeichnung ASC"; }
                elseif(
    $this->lernapp_sortBy == 'product_name_desc') { $sortBy "$t.bezeichnung DESC"; }
                else { 
    $sortBy "rand()"; }
            }


            
    $objStandorte Database::getInstance()
                        ->
    prepare(
                            
    'SELECT *
                            FROM tl_gerichte LEFT JOIN tl_standorte ON tl_gerichte.pid = tl_standorte.id
                            WHERE tl_gerichte.pid = ?
                            AND tl_standorte.published = ?
                            ORDER BY '
    .$sortBy
                        
    )
                        ->
    execute($this->standorte1);

            
    $this->Template->ytvideo_data $objStandorte->fetchAllAssoc();

        } 

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

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Im Prinzip ja, aber Du willst natürlich sicher stellen, daß der übergebene Parameterwert auch das beinhaltet, was Du erwartest. Ansonsten hast Du eine SQL-Injection Sicherheitslücke eingebaut :-o
    @fiedsch
    Genau sowas meinte ich letzhin von wegen Audit-Team... Ich komme auf dem Stammtisch drauf zurück!

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
  •