Tagged: dedupe
- This topic has 4 replies, 2 voices, and was last updated 10 years ago by sitesurety.
Author | Posts |
---|---|
November 5, 2014 at 3:09 pm #3555 | |
sitesurety
Post count: 13
|
I have a collection of MEOW_FieldSetCollection objects and want to filter the collection on a value of a custom field. I can’t seem to pass a string to the dedupe() method to filter the collection of objects. How do I filter the collection based on duplicate attribute values? |
November 5, 2014 at 4:55 pm #3557 | |
traversal
Post count: 207
|
So just to clarify, I presume you’re trying to dedupe by passing in a full-field string. As in “set_name.field_name”? That actually won’t work currently unfortunately, as the dedupe method is currently setup to allow expressions that resolve to a property through a slightly different mechanism. A “set_name.field_name” is a bit different, as it uses a runtime evaluated expression to get the value. It actually ought to work with anything, and I’ve noted it down to be fixed. Until then though, I believe something like this should work: https://gist.github.com/traversal/6a13e7786d168d7588db Basically you can extend the post class, and then give it a named method which can then be used to dedupe the posts. Let me know if that helps. |
November 5, 2014 at 8:21 pm #3558 | |
sitesurety
Post count: 13
|
Seems to have. I did have to make some slight changes, mainly around casting to a string so the function accepted the dedupe rule: foreach ($wf->type(“person”)->posts->dedupe(“person_type”) as $key) { In functions, I had to cast to a string: function person_type() { } |
November 5, 2014 at 8:23 pm #3559 | |
traversal
Post count: 207
|
Ahh, yep, you’re right. You can also use $this->person->type->val(); Sorry about the workaround, but I’m glad you got it going. |
November 5, 2014 at 8:32 pm #3560 | |
sitesurety
Post count: 13
|
Thanks for the help! Very much appreciated. I want to keep my code as slick and clean as possible.. I like how the MP plugin is very Java collection-ishs. Two other things I’ve been doing which I’m not entirely happy about: Creating a multi-dimensional array for all the filtered options by data type, which I then output to a form using a double loop: $filters = array( // Loop code with de-dup here as $key Then create a form with all the unique filter options: <!– Filter form –> <?php } ?> Then I’ve got some jQuery over the top which responds when an option is selected and posts the updated id => keys via Ajax back to the form, which updates the results table: $.ajax({ }); // Return select name and value return values; }); Ideally, I was thinking of moving the data filtering into the controller (functions.php) file, with different case rules…so I just have to output the view in the template. |
You must be logged in to reply to this topic.