Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Ticket #3549 #3716

Closed
wants to merge 1 commit into from

5 participants

@backbone87

Implementation of ticket #3549

@Toflar
Collaborator

The DB class has an abstraction in the drivers for FIND_IN_SET(), can't we use this somehow?

Nope. The findInSet() from the Database class is designed to be used for the ORDER BY clause.

@leofeyer
Owner

@contao/workgroup-core Do we need this? What is the advantage? Does the patch work?

@psi-4ward

For me its okay to implement these functionality, but i have not tested it with the 2.11.3 yet.

@leofeyer
Owner

What is the advantage at all? Is Andreas' current solution not efficient?

@backbone87

Look at the original ticket #3549
This solution supports filtering on comma separated lists for 1:n and n:n relations, which can be handled natively by MySQLs FIND_IN_SET

@psi-4ward

@backbone87 könnte es nicht auch mit diesem Trick gelöst werden: http://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle

Sprich, du legst ein "virtuelles" Feld an was als key ein Subquery ist?

@backbone87

@psi-4ward in dem ticket gehts, aber um Filterung und nicht Sortierung. Das hatten wir doch alles schon mal besprochen dachte ich?

@psi-4ward

Es geht auch um die Idee dahinter, liese sich das nicht auch auf die Filterung übertragen?

@backbone87

Nein, da man nirgends für die Filterung individuelles SQL absetzen kann. Davon abgesehen, finde ich die Sache mit SQL im Sortierarray ziemlich hacky, nichts was ich als "Teil der API" betrachten würde, da es einfach zu unberechenbar ist.

@Toflar
Collaborator

@contao/workgroup-core any updates?

@leofeyer
Owner

We have decided not to implement the feature, because there are ways to accomplish it using callbacks and we don't want to have more undocumented features which only a few users need. BTW, what did you try to do here:

$options = explode(',', implode(',', $options));

@leofeyer leofeyer closed this
@backbone87
array('blub,blab', 'blib,blob')

Und bitte nenne mir die callbacks mit denen ich das umsetzen kann und seit welcher Version diese Verfügbar sind.

Weiterhin sehe ich das nicht als "undocumented feature", sondern im jetzigen Zustand nicht dokumentierte, nicht unterstützte Ausnahme im Filtersystem. Nirgendswo steht, das der Filter nicht Konsistent auf "multi-valued" Feldern funktioniert.

@aschempp
Collaborator

Nach unseren Überlegungen müsste genau dasselbe auch mit einem onload_callback und list > sorting > root Array zu lösen sein.

@backbone87

Nach erstem schauen, ist dies mit 2.11.5 DC_Table NICHT möglich.
1. Wie bekomme ich mein Filter-Dropdown in den View rein?
2. list.sorting.root bezieht sich nur auf die numerischen PK-IDs, nicht auf ein beliebiges filterbares Feld

@aschempp
Collaborator

THIS IS GETTING FUN...
While talking to @backbone87, we noticed that this feature has already been implemented!! You need to set ['eval']['csv'] = true;, and the core does even more than this pull request suggests (auto-save as CSV instead of serialized).

I suggest the feature should be documented ;-)

@backbone87

I have looked at the code and ['eval']['csv'] = ',' // your delimiter to use should be the way to use it in current versions

@leofeyer
Owner

Kann das Ticket also geschlossen bleiben?

@aschempp
Collaborator

Absolut!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Dec 23, 2011
  1. @backbone87

    Filtering for fields containing comma-separated-lists of multiple

    backbone87 authored
    options within DCA listings. see #3549
This page is out of date. Refresh to see the latest.
Showing with 14 additions and 1 deletion.
  1. +14 −1 system/drivers/DC_Table.php
View
15 system/drivers/DC_Table.php
@@ -4510,6 +4510,13 @@ protected function filterMenu()
$this->values[] = $objDate->yearEnd;
}
}
+
+ // comma separated list
+ elseif($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['eval']['findInSet'])
+ {
+ $this->procedure[] = 'FIND_IN_SET(?, ' . $field . ')';
+ $this->values[] = $session['filter'][$filter][$field];
+ }
// Manual filter
elseif ($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['eval']['multiple'])
@@ -4632,9 +4639,15 @@ protected function filterMenu()
unset($options[$k]);
}
}
+
+ // comma separated list
+ if($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['eval']['findInSet'])
+ {
+ $options = explode(',', implode(',', $options));
+ }
// Manual filter
- if ($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['eval']['multiple'])
+ elseif ($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['eval']['multiple'])
{
$moptions = array();
Something went wrong with that request. Please try again.