Ergebnis 1 bis 10 von 10

Thema: Suche funktioniert bei einem DCA select Element mit options_callback nicht

  1. #1
    Contao-Nutzer
    Registriert seit
    14.06.2010.
    Beiträge
    81

    Standard Suche funktioniert bei einem DCA select Element mit options_callback nicht

    Hallo,

    ich habe ein DCA select Element welches mir von einer anderen Tabellen Daten anzeigt. Bei der options_callback Funktion gebe ich ein Array zurück (Key = id der Referenztabelle, Value - den Text welcher angezeigt wird und welcher auch gesucht werden können sollte). Es funktioniert eigentlich alles perfekt (z.b laden, speichern, filtern) aber die Suche geht nicht. Man kann hier nur nach der Id suchen, nicht aber nach dem Text.

    Hier mein Code

    DCA Element:
    Code:
    'idProject' => array
    		(
    			'label'                   => array('Projekt', ''),
    			'exclude'                 => false,
    			'inputType'               => 'select', 
    		  	'options_callback'        => array('tl_zv_drawing','options_project'),
    			'eval'                    => array('mandatory'=>true, 'includeBlankOption' => true,'tl_class'=>'w50'),
    			'filter'				=> true,
    			'search'				=> true
    		),
    options_callback Funktion
    Code:
    public function options_project($var)
    	{
    		$values = array();
    		$objPages = $this->Database->prepare("SELECT id, name,projectNumber FROM tl_zv_project ORDER BY projectNumber DESC")->execute();
    		if ($objPages->numRows < 1)
    		{
    			return $values;
    		}
    
    		//Array erzeugen
    		while($objPages->next())
    		{
    			$values[$objPages->id] = "<b>".$objPages->projectNumber."</b> ".$objPages->name;
    		}
    
    		return $values;
    	}
    Was mach ich falsche? Warum funktioniert der Filter aber die Suche nicht?

    Danke
    Ludi
    Geändert von ludi (02.07.2011 um 19:24 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    14.06.2010.
    Beiträge
    81

    Standard

    Bin ich der einzige welcher dieses Problem hat?

  3. #3
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Hast du mal die foreignKey-Eigenschaft probiert:
    Code:
    'idProject' => array
    		(
    			'label'                   => array('Projekt', ''),
    			'exclude'                 => false,
    			'inputType'               => 'select', 
                            'foreignKey'              => 'tl_zv_project.name',
    		  	'options_callback'        => array('tl_zv_drawing','options_project'),
    			'eval'                    => array('mandatory'=>true, 'includeBlankOption' => true,'tl_class'=>'w50'),
    			'filter'				=> true,
    			'search'				=> true
    		),
    Ich selbst habe damit noch nicht gearbeitet, aber vielleicht funktioniert das.
    Meine Erweiterungen: League Manager | Forum

  4. #4
    Contao-Nutzer
    Registriert seit
    14.06.2010.
    Beiträge
    81

    Standard

    Hallo,

    mit 'foreignKey' => 'tl_zv_project.name', kann ich mir die options_callback Eigenschaft schenken und es ist daher schneller zu programmieren. Das ist gut zu wissen, aber das Problem mit der Suche ist trotzdem nicht gelöst.

    Ich bin für weitere Ideen sehr dankbar.

    Schöne Grüße
    Ludi


    Zitat Zitat von Bandyt Beitrag anzeigen
    Hast du mal die foreignKey-Eigenschaft probiert:
    Code:
    'idProject' => array
    		(
    			'label'                   => array('Projekt', ''),
    			'exclude'                 => false,
    			'inputType'               => 'select', 
                            'foreignKey'              => 'tl_zv_project.name',
    		  	'options_callback'        => array('tl_zv_drawing','options_project'),
    			'eval'                    => array('mandatory'=>true, 'includeBlankOption' => true,'tl_class'=>'w50'),
    			'filter'				=> true,
    			'search'				=> true
    		),
    Ich selbst habe damit noch nicht gearbeitet, aber vielleicht funktioniert das.

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

    Standard

    Die Suche funktioniert imho nicht über fremde Tabellen.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  6. #6
    Contao-Nutzer
    Registriert seit
    14.06.2010.
    Beiträge
    81

    Standard

    Alles klar, gibt es eine Möglichkeit dieses elegant einzubauen?

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

    Standard

    Du könntest es mit dem onload_callback versuchen und dann sorting->filter setzen. Keine Ahnung ob das geht, aber einen Versuch ist es Wert
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  8. #8
    Contao-Nutzer
    Registriert seit
    14.06.2010.
    Beiträge
    81

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Du könntest es mit dem onload_callback versuchen und dann sorting->filter setzen. Keine Ahnung ob das geht, aber einen Versuch ist es Wert
    Was meinst du mit sorting->filter genau? Meinst du einfach dass ich nachher den Filter dementsprechend setze? Das wird nicht ganz funktionieren, denn bei der Suche könnten dann ja gleich mehrere Filter aktiv sein.
    z.b Suchstring = PRJ sollte mir auch Projekte mit PRJ1 und PRJ2 zurückgeben.

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

    Standard

    PHP-Code:
    public function onloadCallback(DataContainer $dc)
    {
        
    $session $this->Session->getData();
        if(!
    strlen($session['search'][$dc->table]['value']))
        {
          return;
        } 
                
        
    $GLOBALS['TL_DCA'][$dc->table]['list']['sorting']['filter'][] = array
        (
           
    '(SELECT COUNT(id) FROM mysubtable WHERE mycolumntosearch LIKE ?) AS myResultCount',
           
    '%' $session['search'][$dc->table]['value'] . '%'
        
    );
        
    $GLOBALS['TL_DCA'][$dc->table]['list']['sorting']['filter'][] = array
        (
           
    'myResultCount > ?)',
           
    '0'
        
    );

    So irgendwie? Ungetestet, Query könnte nicht stimmen usw. aber soll dir ja auch nur das Prinzip zeigen
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  10. #10
    Contao-Nutzer
    Registriert seit
    14.06.2010.
    Beiträge
    81

    Standard

    Super vielen Dank.
    Genau so hat es geklappt!!

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
  •